1、結合圖形描述LVS的工作原理;
lvs是基于內核的虛擬主機用來做四層的負載均衡,工作在netfilter框架的INPUT鏈上,有四種模式,上圖為lvs-nat
lvs-nat:有DNAT功能,支持端口映射,請求報文和響應報文都需要經過Director
請求過程:cip–>vip,Director,cip–>rip
響應過程:rip–>cip,gw dip Director,vip–>cip
條件和不足:vip公網ip,dir,rip都為私網地址且在相同網段的物理網絡中,Director可能會成為系統瓶頸
lvs-dr:Director在接收到目的為vip的請求后,按算法挑一臺Realserver來處理相應請求,Director先獲得Realserver的mac之后增加到請求報文的數據幀首部,Realserver的響應報文一定不能經過Director
請求過程:cip–>vip,Director cip–>vip,cip–>vip RealServer 此過程數據幀首部在變化
響應過程:vip–>cip–>gw–>cip internet 或 當rip為公網ip時vip–>cip internet
條件和不足:vip公網ip,dir,rip可以是公網和私網也可以在不同網段,但必須在同一物理二層交換網絡中
疑問: 如何保證Realserver的vip不響應訪問請求報文在交換機arp廣播和在Realserver使用vip響應給客戶端; arp_ignore:定義linux主機在收到ARP請求數據包后,發送ARP響應數據包的條件級別 0 - (默認值): 回應任何網絡接口上對任何本地IP地址的arp查詢請求 1 - 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求 2 -只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內 3 - 不回應該網絡界面的arp請求,而只對設置的唯一和連接地址做出回應 做lvs-dr模型時 每個Realseverarp_ignore=1 arp_announce:定義linux主機發送ARP請求數據包時如何選擇數據包中使用的發送方IP地址(怎樣宣告自己arp) 0(默認值)- 允許使用任一網絡接口配置的IP地址(即任一本地地址), 通常就是待發送的IP數據包的源IP地址。(通告所有網段) 1 - 盡量避免使用不屬于該網絡接口(即發送數據包的網絡接口)子網的本地地址作為發送方IP地址, 就是說如果主機包含多個子網,而IP數據包的源IP地址屬于其中一個子網, 雖然該IP地址不屬于本網口的子網,但是也可以作為ARP請求數據包的發送方IP地址, 否則就會按照取值為2的方式選擇發送方IP地址。(通告相同網段) 2 - 忽略IP數據包的源IP地址,總是選擇網口所配置的最合適的IP地址作為ARP 請求數據包的發送方IP地址(一個網口可能會配置多個IP地址)(一定通告相同的網段) 做lvs-dr模型時,每個Realsever需要設置arp_annonuce=2 各個Realsever上的route add -host $VIP dev lo:0 ,讓Realserver從本地物理網卡收到Director 轉發的報文交給lo:0,響應客戶端時,會以Realserver lo:0 vip作為源地址響應,然后經過本地網卡
lvs-tun:Director在接收到目的為vip的請求后,按算法挑一臺Realserver來處理相應請求,會在原來ip包頭上
再封裝一個源為dip目的為rip的ip包頭,之后Realserver收到請求,處理后通過互聯網響應客戶端.
請求過程:cv–>Director,cvdr–>cvdr ip包頭的變化
響應過程:Realserver vip–>cip
條件和不足:vip,dip,rip必須全部為公網地址,可以跨地域部署,但是要考慮mtu問題,而且Realserver必須支持特定的隧道協議
lvs-fullnat:Director在接收到目的為vip的請求后,按算法挑一臺Realserver來處理相應請求,Director和個Realserver可以在不同網段,Director會同時修改源和目的ip,改成dip和rip,Realserver處理完成后,經過各個路由,響應給Director,Director會響應給客戶端
請求過程:cip–>vip Director–>dip–>rip Realserver
響應過程:rip–>dip Director–>vip–>cip
這幾題想省事簡單化下,用lvs-dr做apache的負載均衡,nginx和php分離可以參考上篇博文的Lnmp.sh腳本
2、搭建一套LVS-DR模型的高性能集群,并實現以下功能:
(1)、wordpress程序通過nfs共享給各個realserver;
(2)、后端realserver中的nginx和php分離
實驗環境 Director:vip 192.168.40.200,dip 192.168.40.120 RS1:vip 192.168.40.200,rip1 192.168.40.130,gw 192.168.40.2 apache RS2:vip 192.168.40.200,rip2 192.168.40.140,gw 192.168.40.2 apache 實際生產環境則可以根據ip規劃情況來部署
在RS上操作 vim /etc/sysctl.conf net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 或者 [root@centos ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@centos ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@centos ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@centos ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@centos ~]# ifconfig lo:0 192.168.40.200 broadcast 192.168.40.200 netmask 255.255.255.255 up [root@centos ~]# route add default gw 192.168.40.2 [root@centos ~]# route add -host 192.168.40.200 dev lo:0 [root@centos ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.40.200 0.0.0.0 255.255.255.255 UH 0 0 0 lo 192.168.40.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2 0.0.0.0 192.168.40.2 0.0.0.0 UG 0 0 0 eth2 [root@centos ~]# echo "RS1---RS1" > /var/www/html/test.html [root@centos ~]# service httpd start [root@centos ~]# curl http://192.168.40.130/test.html RS1---RS1 以上關于RS1的操作,在RS2上操作一邊,確保RS2的測試頁為RS2--RS2 在DR上操作 [root@centos ~]# modprobe -l | grep "ip_vs" kernel/net/netfilter/ipvs/ip_vs.ko ,,,,, [root@centos ~]# uname -r 2.6.32-504.el6.x86_64 [root@centos ~]# yum install ipvsadm -y [root@centos ~]# ifconfig eth1:0 192.168.40.200 broadcast 192.168.40.200 netmask 255.255.255.255 up [root@centos ~]# ipvsadm --version ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1) [root@centos ~]# iptables -F [root@centos ~]# ipvsadm -A -t 192.168.40.200:80 -s rr [root@centos ~]# ipvsadm -a -t 192.168.40.200:80 -r 192.168.40.130 -g [root@centos ~]# ipvsadm -a -t 192.168.40.200:80 -r 192.168.40.140 -g [root@centos ~]# ipvsadm -l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.40.200:http rr -> 192.168.40.130:http Route 1 0 0 -> 192.168.40.140:http Route 1 0 0 使用筆記本本地瀏覽器訪問幾次后的輪訓結果 [root@centos ~]# ipvsadm -l IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.40.200:http rr -> 192.168.40.130:http Route 1 1 13 -> 192.168.40.140:http Route 1 1 14
3、基于heartbeat v2 crm實現HA LAMP組合;要求,部署wordpress,用于編輯的文章中的任何數據在節點切換后都能正常訪問;
heartbeat或corosync(集群信息層),pacemaker(crm),crmshell或pscd(資源配置cli); 建議使用centos7系列安裝測試,或centos6系列升級python為2.7.X floating ip ,nfs,httpd為需要高可用的資源
原創文章,作者:Snoo,如若轉載,請注明出處:http://www.www58058.com/61698