使用lvs搭建负载均衡集群
? 有時候,單臺服務(wù)器的性能可能無法應(yīng)付大規(guī)模的服務(wù)請求,且其一旦出現(xiàn)故障,就會造成用戶在一段時間內(nèi)無法訪問。通過集群技術(shù),可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益。
? 集群是一組相互獨(dú)立的、通過網(wǎng)絡(luò)互聯(lián)的計(jì)算機(jī)組,并以單一系統(tǒng)的模式加以管理,或用于分?jǐn)傌?fù)載,或用于增強(qiáng)可靠性,或用于高速計(jì)算。
一、集群類型
? ?LB:Load Balancing,負(fù)載均衡集群,用于消除單點(diǎn)故障,當(dāng)一個節(jié)點(diǎn)出現(xiàn)故障而無法正常提供服務(wù)時,自動、快速地切換到另外的節(jié)點(diǎn)上去;常見軟件或?qū)崿F(xiàn)方式有l(wèi)vs, haproxy, nginx
? ?HA:High Availability,高可用集群,將客戶端的請求遵從恰當(dāng)?shù)呢?fù)載均衡原則分配給各節(jié)點(diǎn)的集群;heartbeat, corosync+pacemaker, cman+rgmanager, cman + pacemaker, keepalived
? ?HPC:High Performance Computing,高性能計(jì)算集群;hadoop
二、lvs工作原理
? ?lvs由?ipvsadm/ipvs 這兩段代碼組成,ipvsadm是工作于用戶空間的程序,用于編寫規(guī)則(定義集群服務(wù)、調(diào)度標(biāo)準(zhǔn),指明有哪些后端服務(wù)器等)并送給ipvs;ipvs是集成于內(nèi)核中的真正實(shí)現(xiàn)調(diào)度功能的代碼,工作于netfilter的INPUT鏈上,它會根據(jù)指定的調(diào)度標(biāo)準(zhǔn)確定將匹配的請求報(bào)文調(diào)度到哪臺后端服務(wù)器,然后對請求報(bào)文做一定處理(或修改目標(biāo)ip、或修改目標(biāo)MAC等)并轉(zhuǎn)到POSTROUTING鏈上發(fā)往相應(yīng)的后端服務(wù)器
三、lvs相關(guān)術(shù)語
? ?director:調(diào)度器,即提供ipvsadm/ipvs,直接面向客戶端請求,實(shí)現(xiàn)調(diào)度功能的主機(jī)
? ?real server:后端真實(shí)服務(wù)器,即真正處理客戶端請求的服務(wù)器
? ?CIP:client ip
? ?VIP:virtual ip,客戶端請求的目標(biāo)ip,要配置在director上
? ?DIP:director ip
? ?RIP:real server ip
四、lvs的類型
? 1、lvs-nat
? ?
? ? 這種模型中,響應(yīng)報(bào)文會經(jīng)由director轉(zhuǎn)發(fā)回client,因此real server和director要位于同一子網(wǎng)中且real server的網(wǎng)關(guān)必須指向director,director會對請求報(bào)文和響應(yīng)報(bào)文分別做DNAT(目標(biāo)地址轉(zhuǎn)換)和SNAT(源地址轉(zhuǎn)換)。
? ? nat類型的特性:
? ? ? ①RS可使用私有地址來隱藏服務(wù)器;RS的網(wǎng)關(guān)必須指向DIP;
? ? ? ②請求和響應(yīng)都要經(jīng)過Director,因此在高負(fù)載場景中,Director易成為性能瓶頸;
? ? ? ③支持端口映射;
? ? ? ④RS可以使用任意OS;
? 2、lvs-dr
? ? 這種模型中,響應(yīng)報(bào)文不會流經(jīng)director,而是直接響應(yīng)給client,因此在real server上必須也配置VIP,且要將其隱藏,即不允許通告和響應(yīng)arp解析請求,否則請求報(bào)文可能不經(jīng)director而直接到達(dá)real server;director不能給請求報(bào)文做IP地址轉(zhuǎn)換,只能修改其目標(biāo)MAC地址以將其送往real server,因此,要求director和real server在同一物理網(wǎng)絡(luò)中。
? ? dr類型的特性:
? ? ? ⑴保證前端路由將目標(biāo)地址為VIP的報(bào)文統(tǒng)統(tǒng)發(fā)往Directory,而不能是RS;
? ? ? ? ?解決方案:
? ? ? ? ? ?①靜態(tài)地址綁定:在前端路由器上操作(問題:未必有路由操作權(quán)限)
? ? ? ? ? ?②aprtables
? ? ? ? ? ?③修改RS上內(nèi)核參數(shù),將RS上的VIP配置在lo接口的別名上,并限制其不能響應(yīng)對VIP地址解析請求;
? ? ? ⑵RS可以使用私有地址;也可以使用公網(wǎng)地址,此時可通過互聯(lián)網(wǎng)通過RIP對其直接訪問;
? ? ? ⑶RS跟Directory必須在同一物理網(wǎng)絡(luò)中;
? ? ? ⑷請求報(bào)文經(jīng)由Director,但響應(yīng)報(bào)文不經(jīng)過Director,因此相比NAT模型,Director負(fù)荷大大減小。
? ? ? ⑸不支持端口映射;
? ? ? ⑹RS可以是大多數(shù)常見的OS;
? ? ? ⑺RS的網(wǎng)關(guān)絕不允許指向DIP;
? ? ? ⑻缺點(diǎn):RS上綁定vip,風(fēng)險(xiǎn)大
? ? lvs-dr的配置:
? ? ? ⑴RS上首先配置內(nèi)核參數(shù): ? ? ? ??
? ? ? ? ?echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
? ? ? ? ?echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
? ? ? ? ?echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
? ? ? ? ?echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
? ? ? ? ?說明:
? ? ? ? ? ?arp_ignore:如何響應(yīng)接收到的ARP請求;默認(rèn)為0,表示只要本機(jī)有,就響應(yīng);1表示僅當(dāng)請求解析的IP地址為接收請求報(bào)文的端口地址時才進(jìn)行響應(yīng)
? ? ? ? ? ?arp_annouce:如何通告本機(jī)地址;默認(rèn)為0,通告本機(jī)所有接口地址,2表示僅通告網(wǎng)絡(luò)直連的接口的地址
? ? ? ? ?這一步的作用在于禁止通告VIP和響應(yīng)對VIP的ARP解析請求
? ? ? ⑵然后在RS上配置VIP:
? ? ? ? ?ifconfig lo:0 VIP netmask 255.255.255.255 broadcast VIP up
? ? ? ? ?route add -host VIP dev lo:0 ?#請求報(bào)文本來是物理接口eth#接收的,需要添加一條使請求報(bào)文到達(dá)VIP所在接口(VIP通常配置在lo:0上)的路由,這樣響應(yīng)報(bào)文的源地址才能是VIP。
? 3、lvs-tun
? ? lvs-tun不同于lvs-dr的地方在于它允許director和real server在不同的網(wǎng)絡(luò)中,這是通過隧道機(jī)制實(shí)現(xiàn)的。在這種模型中,director會在請求報(bào)文原有IP首部之外再封裝一層首部,這樣,請求報(bào)文的IP首部就變成:內(nèi)層IP首部(源地址:CIP,目標(biāo)地址:VIP),外層IP首部(源地址:DIP,目標(biāo)地址:RIP)。real server收到報(bào)文后,先將報(bào)文解封獲得原來目標(biāo)地址為VIP的報(bào)文,發(fā)現(xiàn)VIP地址被配置在本地的IP隧道設(shè)備上,所以就處理這個請求,然后根據(jù)路由表將響應(yīng)報(bào)文直接返回給客戶。
? ? tun類型的特性:
? ? ?①RIP、VIP、DIP全部是公網(wǎng)地址;
? ? ?②RS的網(wǎng)關(guān)不會也不可能指向DIP;
? ? ?③請求報(bào)文經(jīng)由Director,但響應(yīng)報(bào)文必須不能經(jīng)過Director;
? ? ?④不支持端口映射;
? ? ?⑤RS的OS必須支持隧道功能,一般需安裝隧道網(wǎng)卡;
? ? ?⑥由于該模型允許Director和RS不在同一物理網(wǎng)絡(luò)中,因此常用于異地容災(zāi)的場景中
? ? lvs-tun的配置可參考http://www.linuxidc.com/Linux/2012-09/71340p3.htm
? 4、lvs-fullnat
? ? 同時修改請求報(bào)文的源地址和目標(biāo)地址(CIP--VIP ==> DIP--RIP);實(shí)現(xiàn)director和RS之間跨子網(wǎng)通信,并且in/out流都會經(jīng)過director;支持端口映射。
? ? fullnat模式?jīng)]有被整合進(jìn)linux內(nèi)核,若要使用需要向內(nèi)核打補(bǔ)丁,并且不被ipvsadm支持,不過可以使用keepalive生成規(guī)則。
四、lvs調(diào)度方法
? ?grep -i 'VS' /boot/config-VERSION
? ⑴靜態(tài)方法:僅根據(jù)調(diào)度算法本身進(jìn)行調(diào)度 ??
? ? ?rr: round robin,輪流,輪詢,輪叫
? ? ?wrr: weighted round robin, 加權(quán)輪詢
? ? ?sh: source hashing,源地址hash,表示將來源于同一個CIP的請求始終定向至同一個RS;SESSION保持;
? ? ?dh: destination hashing, 目標(biāo)地址hash,后端一般為緩存服務(wù)器,可提高緩存命中率
? ⑵動態(tài)方法:根據(jù)算法及各RS當(dāng)前的負(fù)載狀況進(jìn)行調(diào)度
? ? ?lc: least connection,最少連接
? ? ? ? Overhead=Active*256+Inactive ?#overhead值越小越優(yōu)先被選中,若overhead值一樣,則根據(jù)real server列表自上而下挑選
? ? ?wlc: weighted lc,默認(rèn)調(diào)度方法
? ? ? ? Overhead=(Active*256+Inactive)/weight
? ? ?sed: shortest expection delay;
? ? ? ? wlc有個缺點(diǎn),就是當(dāng)overhead值相同時,權(quán)重小的若在列表中靠前則會被優(yōu)先選擇,當(dāng)請求量只有一個或很少時,這種調(diào)度不合適,而sed調(diào)度的主要目的在于讓權(quán)重大的優(yōu)先接受請求
? ? ? ? Overhead=(Active+1)*256/weight
? ? ?nq: Never Queue,先按權(quán)重輪詢一圈,然后依照sed的overhead值選擇
? ? ?lblc: Locality-Based Least Connection,動態(tài)版dh
? ? ?lblcr:Replicated lblc
五、使用ipvsadm配置director
? ?yum -y install ipvsadm
? ⑴定義一個集群服務(wù):
? ? ? ipvsadm -A|E -t|u|f service-address [-s scheduler]?
? ? ? ? -A: 添加
? ? ? ? -E: 修改 ? ? ?
? ? ? ? -f: firewall mark
? ? ? ? -t: 說明提供的是TCP服務(wù)
? ? ? ? -u: 說明提供的是UDP服務(wù)
? ? ? ? -f: 說明是經(jīng)過iptables標(biāo)記過的服務(wù)類型
? ? ? ? service-address:
? ? ? ? ? -t|u: VIP:Port
? ? ? ? ? -f: #
? ? ? 例如:ipvsadm -A -t 172.16.100.7:80 -s wlc
? ⑵向一個已經(jīng)存在集群服務(wù)添加一個RS:
? ? ? ipvsadm -a|e -t|u|f service-address -r server-address [options]
? ? ? ? -a: 添加RS記錄
? ? ? ? -e: 修改RS記錄
? ? ? ? options:
? ? ? ? ? -w weight
? ? ? ? ? -g, --gatewaying: 指定lvs工作模式為DR模式,缺省模式
? ? ? ? ? -i, --ipip: ipip encapsulation (tunneling)
? ? ? ? ? -m, --masquerading: masquerading (NAT)
? ? ??例如:ipvsadm -a -t 172.16.100.7:80 -r 10.0.0.8 -m -w 2
? ⑶查看已經(jīng)定義的集群服務(wù)及RS:
? ? ? ipvsadm -L -n
? ? ? ? -c: 查看各連接
? ? ? ? --stats: 統(tǒng)計(jì)數(shù)據(jù)
? ? ? ? --rate: 速率
? ? ? ? --exact: 精確值
? ⑷從集群服務(wù)中刪除RS:ipvsadm -d -t|u|f service-address -r server-address
? ⑸刪除集群服務(wù):ipvsadm -D -t|u|f service-address
? ⑹清空所有的集群服務(wù):ipvsadm -C
? ⑺保存集群服務(wù)定義:
? ? ? ipvsadm -S > /path/to/some_rule_file
? ? ? ipvsadm-save > /path/to/some_rule_file
? ? ? service ipvsadm save ?#該命令會將規(guī)則保存于/etc/sysconfig/ipvsadm中
? ⑻讓規(guī)則文件中的規(guī)則生效:
? ? ? ipvsadm -R < /path/from/some_rule_file
? ? ? ipvsadm-restore < /path/from/some_rule_file
? ? ? ? 可將該命令寫入/etc/rc.d/rc.local中,這樣開機(jī)啟動時就自動導(dǎo)入了
? ? ? service ipvsadm start ?#以服務(wù)的方式啟動ipvsadm,它會從/etc/sysconfig/ipvsadm中讀取定義的集群服務(wù)規(guī)則
? ⑼基于防火墻標(biāo)記定義集群服務(wù)
? ? ? 功能:將同屬于同一組應(yīng)用的多個不同端口的服務(wù)定義成一個集群服務(wù),統(tǒng)一調(diào)度;例如http和https
? ? ? 結(jié)合netfilter來實(shí)現(xiàn)一種集群服務(wù)定義機(jī)制;
? ? ? ? ①在mangle表的PREROUTING鏈定義規(guī)則,實(shí)現(xiàn)指定防火墻標(biāo)記;
? ? ? ? ? ?iptables -t mangle -A PREROUTING -d VIP -p {tcp|udp} --dport PORT -j MARK --set-mark #
? ? ? ? ②基于此前的標(biāo)記定義集群服務(wù);
? ? ? ? ? ?ipvsadm -A -f # [-s METHOD]
? ? ? ? ? ?ipvsadm -a -f # -r RS [options]
? ? ? ? 例如:
? ? ? ? ? ?iptables -t mangle -A PREROUTING -d 192.168.30.13 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 2
? ? ? ? ? ?ipvsadm -A -f 2 -s wlc
? ? ? ? ? ?ipvsadm -a -f 2 -r 172.16.100.2 -g -w 3
??⑽lvs持久連接功能
? ? ? 無論使用什么調(diào)度方法,持久連接功能都能保證在指定的一段時間內(nèi),來自同一個客戶端的請求始終被定向至同一個RS。當(dāng)使用LVS持久連接時,調(diào)度器使用連接跟蹤(持久連接模板)來記錄每一個客戶端和給其分配的real server的映射關(guān)系
? ? ? -p, --persistent [timeout]:使用持久連接,默認(rèn)時長為300秒
? ? ? 持久連接類型: ? ? ? ?
? ? ? ? ①PCC(persistent client connections):持久客戶端連接,又稱零端口連接
? ? ? ? ? ?在基于tcp或udp定義集群服務(wù)時,將來自于同一個客戶端對所有端口的請求,始終定向至此前選定的RS;以0作為端口號
? ? ? ? ? ?例:ipvsadm -A -t 172.16.100.7:0 -s rr -p
? ? ? ? ②PPC(persistent port connections):持久端口連接,將對同一端口的請求,始終定向至此前選定的RS;單服務(wù)調(diào)度;各集群服務(wù)分開調(diào)度
? ? ? ? ? ?例:ipvsadm -A -t 172.16.100.7:21 -s rr -p
? ? ? ? ③PFMC(persistent firewall mark connections):持久防火墻標(biāo)記連接 ? ? ? ? ?
? ? ? ? ? ?iptables -t mangle -A PREROUTING -d 192.168.30.13 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 2
? ? ? ? ? ?ipvsadm -A -f 2 -s wlc -p 600
? ? ? -M, --netmask [NETMASK] 選項(xiàng):
? ? ? ??配合persistence_timeout使用,表示持久連接的粒度,默認(rèn)是255.255.255.255,即單獨(dú)的客戶端IP。如果改成255.255.255.0,則表示只要是一個網(wǎng)段的client都會被分配到同一臺后端服務(wù)器上
六、配置示例
? 注意:lvs-nat模型中,director需要開啟報(bào)文轉(zhuǎn)發(fā)功能,而lvs-dr模型中則不需要
? 1、配置lvs-nat
? ? ?以下示例中,我們以node3為director,以node3上的兩個容器centos2和centos3(容器的創(chuàng)建詳見博客http://9124573.blog.51cto.com/9114573/1761114)作為real server,node1作為客戶端
? ? ?VIP:192.168.30.13?
? ? ?DIP:172.16.100.1
? ? ?RIP1:172.16.100.2
? ? ?RIP2:172.16.100.3
#首先啟動容器,并保證其httpd服務(wù)正常運(yùn)行 [root@node3?~]#?lxc-start?-n?centos2?-d [root@node3?~]#?lxc-start?-n?centos3?-d [root@node3?~]#?ssh?root@172.16.100.2 root@172.16.100.2's?password:? Last?login:?Wed?Apr??6?13:31:11?2016 [root@centos2?~]#?service?httpd?start Starting?httpd:?httpd:???????????????????????????????????????????[??OK??] [root@centos2?~]#?ss?-tnl State???????Recv-Q?Send-Q????????????????????????Local?Address:Port??????????????????????Peer?Address:Port? LISTEN??????0??????0?????????????????????????????*:22????????????????????????????????????*:*????? LISTEN??????0??????0?????????????????????????????:::22???????????????????????????????????:::*????? LISTEN??????0??????0?????????????????????????????:::80???????????????????????????????????:::* [root@centos2?~]#?logout Connection?to?172.16.100.2?closed. [root@node3?~]#?ssh?root@172.16.100.3 root@172.16.100.3's?password:? Last?login:?Wed?Apr??6?13:31:38?2016 [root@centos3?~]#?service?httpd?start Starting?httpd:?httpd:???????????????????????????????????????????[??OK??] [root@centos3?~]#?logout Connection?to?172.16.100.3?closed.[root@node3?~]#?yum?-y?install?ipvsadm ... Installed:ipvsadm.x86_64?0:1.26-4.el6??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Complete! [root@node3?~]#?rpm?-ql?ipvsadm /etc/rc.d/init.d/ipvsadm???#ipvsadm也有服務(wù)腳本 /etc/sysconfig/ipvsadm-config /sbin/ipvsadm /sbin/ipvsadm-restore /sbin/ipvsadm-save /usr/share/doc/ipvsadm-1.26 /usr/share/doc/ipvsadm-1.26/README /usr/share/man/man8/ipvsadm-restore.8.gz /usr/share/man/man8/ipvsadm-save.8.gz /usr/share/man/man8/ipvsadm.8.gz[root@node3?~]#?ipvsadm?-A?-t?192.168.30.13:80?-s?rr???#定義一個集群服務(wù),采用輪循調(diào)度 [root@node3?~]#?ipvsadm?-a?-t?192.168.30.13:80?-r?172.16.100.2?-m???#添加real?server [root@node3?~]#?ipvsadm?-a?-t?192.168.30.13:80?-r?172.16.100.3?-m [root@node3?~]#?ipvsadm?-L?-n???#查看定義的集群服務(wù)及RS IP?Virtual?Server?version?1.2.1?(size=4096) Prot?LocalAddress:Port?Scheduler?Flags->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn TCP??192.168.30.13:80?rr->?172.16.100.2:80??????????????Masq????1??????0??????????0?????????->?172.16.100.3:80??????????????Masq????1??????0??????????0 [root@node3?~]#?cat?/proc/sys/net/ipv4/ip_forward???#確保開啟報(bào)文轉(zhuǎn)發(fā)功能 1 [root@node3?~]#?iptables?-L?-n???#確保已開放集群服務(wù)端口 Chain?INPUT?(policy?DROP) target?????prot?opt?source???????????????destination????????? ACCEPT?????all??--??0.0.0.0/0????????????0.0.0.0/0???????????state?ESTABLISHED? ACCEPT?????tcp??--??0.0.0.0/0????????????192.168.30.13???????tcp?dpt:22?state?NEW? ACCEPT?????tcp??--??0.0.0.0/0????????????172.16.100.1????????tcp?dpt:22?state?NEW? ACCEPT?????tcp??--??0.0.0.0/0????????????192.168.30.13???????tcp?dpt:80?state?NEW?Chain?FORWARD?(policy?ACCEPT) target?????prot?opt?source???????????????destination?????????Chain?OUTPUT?(policy?ACCEPT) target?????prot?opt?source???????????????destination#這里為演示負(fù)載均衡的效果,刻意讓后端兩個RS上的網(wǎng)頁內(nèi)容不同,實(shí)際環(huán)境是當(dāng)然是相同的 [root@node1?~]#?curl?192.168.30.13 hello [root@node1?~]#?curl?192.168.30.13 how?are?you [root@node1?~]#?curl?192.168.30.13 hello [root@node1?~]#?curl?192.168.30.13 how?are?you[root@node3?~]#?ipvsadm?-L?-n?-c IPVS?connection?entries pro?expire?state???????source?????????????virtual????????????destination TCP?01:17??TIME_WAIT???192.168.30.10:38368?192.168.30.13:80???172.16.100.2:80 TCP?01:17??TIME_WAIT???192.168.30.10:38369?192.168.30.13:80???172.16.100.3:80 TCP?01:15??TIME_WAIT???192.168.30.10:38367?192.168.30.13:80???172.16.100.3:80 TCP?01:14??TIME_WAIT???192.168.30.10:38366?192.168.30.13:80???172.16.100.2:80 [root@node3?~]#?ipvsadm-save?>?/tmp/lvs???#將定義的規(guī)則保存至某個文件中 [root@node3?~]#?ipvsadm?-D?-t?192.168.30.13:80???#刪除指定的集群服務(wù) [root@node3?~]#?ipvsadm?-L?-n IP?Virtual?Server?version?1.2.1?(size=4096) Prot?LocalAddress:Port?Scheduler?Flags->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn [root@node3?~]#?ipvsadm-restore?<?/tmp/lvs [root@node3?~]#?ipvsadm?-L?-n IP?Virtual?Server?version?1.2.1?(size=4096) Prot?LocalAddress:Port?Scheduler?Flags->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn TCP??192.168.30.13:80?rr->?172.16.100.2:80??????????????Masq????1??????0??????????0?????????->?172.16.100.3:80??????????????Masq????1??????0??????????0? 2、配置lvs-dr
? ? ? 以下示例中,node1為客戶端,node3為director,node4和node5為real server,可將VIP配置于虛擬接口上,DIP與RIP要位于同一物理網(wǎng)絡(luò);
? ? ? DIP:192.168.30.13,eth0
? ? ? VIP:192.168.30.100,eth0:0
? ? ? RIP1:192.168.30.14
? ? ? RIP2:192.168.30.15
[root@node4?~]#?echo?1?>?/proc/sys/net/ipv4/conf/lo/arp_ignore [root@node4?~]#?echo?2?>?/proc/sys/net/ipv4/conf/lo/arp_announce [root@node4?~]#?echo?1?>?/proc/sys/net/ipv4/conf/all/arp_ignore [root@node4?~]#?echo?2?>?/proc/sys/net/ipv4/conf/all/arp_announce [root@node4?~]#?ifconfig?lo:0?192.168.30.100?netmask?255.255.255.255?broadcast?192.168.30.100?up [root@node4?~]#?route?add?-host?192.168.30.100?dev?lo:0 [root@node4?~]#?service?httpd?start Starting?httpd:?httpd:?apr_sockaddr_info_get()?failed?for?node5 httpd:?Could?not?reliably?determine?the?server's?fully?qualified?domain?name,?using?127.0.0.1?for?ServerName[??OK??] [root@node4?~]#?iptables?-F? 再在node5的做相同配置,略
#在director上配置VIP,定義集群服務(wù),添加后端RS [root@node3?~]#?ifconfig?eth0:0?192.168.30.100/24?up???#配置VIP [root@node3?~]#?ifconfig eth0??????Link?encap:Ethernet??HWaddr?00:0C:29:CB:26:9B??inet?addr:192.168.30.13??Bcast:192.168.30.255??Mask:255.255.255.0inet6?addr:?fe80::20c:29ff:fecb:269b/64?Scope:LinkUP?BROADCAST?RUNNING?MULTICAST??MTU:1500??Metric:1RX?packets:28711?errors:0?dropped:0?overruns:0?frame:0TX?packets:9590?errors:0?dropped:0?overruns:0?carrier:0collisions:0?txqueuelen:1000?RX?bytes:4456933?(4.2?MiB)??TX?bytes:1970077?(1.8?MiB)eth0:0????Link?encap:Ethernet??HWaddr?00:0C:29:CB:26:9B??inet?addr:192.168.30.100??Bcast:192.168.30.255??Mask:255.255.255.0UP?BROADCAST?RUNNING?MULTICAST??MTU:1500??Metric:1 ... [root@node3?~]#?cat?/proc/sys/net/ipv4/ip_forward? 1 [root@node3?~]#?ipvsadm?-C [root@node3?~]#?iptables?-t?mangle?-A?PREROUTING?-d?192.168.30.100?-p?tcp?-m?multiport?--dports?80,243?-j?MARK?--set-mark?1 [root@node3?~]#?ipvsadm?-A?-f?1?-s?wlc???#基于防火墻定義集群服務(wù) [root@node3?~]#?ipvsadm?-a?-f?1?-r?192.168.30.14?-g?-w?2 [root@node3?~]#?ipvsadm?-a?-f?1?-r?192.168.30.15?-g?-w?1 [root@node3?~]#?iptables?-P?INPUT?ACCEPT? 負(fù)載均衡效果測試:
[root@node1?~]#?curl?192.168.30.100 hello [root@node1?~]#?curl?192.168.30.100 hello [root@node1?~]#?curl?192.168.30.100 how?are?you六、Session持久機(jī)制
? ①session綁定:始終將來自同一個源IP的請求定向至同一個RS;沒有容錯能力;有損均衡效果;
? ②session復(fù)制:在RS之間同步session,每個RS擁有集群中的所有的session;對大規(guī)模集群不適用;
? ③session服務(wù)器:利用單獨(dú)部署的服務(wù)器來統(tǒng)一管理集群中的session;
七、real server的健康狀態(tài)檢測
? ?lvs自身不具備后端RS健康狀態(tài)檢測功能,需要借助keepalived,keepalived不僅能為lvs提供高可用,還可以給lvs生成規(guī)則。 ??
? ?1、如何檢測RS的健康狀態(tài):
? ? ? ? 應(yīng)用層:利用集群服務(wù)依賴的協(xié)議進(jìn)行檢測
? ? ? ? 傳輸層:利用端口掃描或探測類工具對指定協(xié)議的端口進(jìn)行探測
? ? ? ? 網(wǎng)絡(luò)層:如ping
? ?2、處理措施:
? ? ?①自動上下線各RS; ? ??
? ? ? ? online --> fail,探測三次及以上;
? ? ? ? offline --> ok,一次即可;
? ? ?②所有RS均故障時,應(yīng)該提供一個back server;
? ? ? ? ipvsadm -a -t 192.168.30.13:80 -r 127.0.0.1 -m -w 0
轉(zhuǎn)載于:https://blog.51cto.com/9124573/1759997
總結(jié)
以上是生活随笔為你收集整理的使用lvs搭建负载均衡集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android app 集成 信鸽推送
- 下一篇: 学习汇编