隨著移動(dòng)互聯(lián)網(wǎng)的加速,應(yīng)用大規(guī)模同時(shí)使用的情況成為了常態(tài),如微博、知乎、今日頭條等大型應(yīng)用,作為Linux運(yùn)維從業(yè)者,高并發(fā)場(chǎng)景的解決能力成為了高薪的關(guān)鍵。
今天我們特別邀請(qǐng)了資深的Linux運(yùn)維老司機(jī)慘綠少年Linux來(lái)給大家普及高并發(fā)場(chǎng)景 LVS的實(shí)現(xiàn)過(guò)程,助你高薪之路順暢。
1.1負(fù)載均衡介紹
1.1.1負(fù)載均衡的妙用
負(fù)載均衡(Load Balance)集群提供了一種廉價(jià)、有效、透明的方法,來(lái)擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的負(fù)載、帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。
單臺(tái)計(jì)算機(jī)無(wú)法承受大規(guī)模的并發(fā)訪問(wèn)或數(shù)據(jù)流量了,此時(shí)需要搭建負(fù)載均衡集群把流量分?jǐn)偟蕉嗯_(tái)節(jié)點(diǎn)設(shè)備上分別處理,即減少用戶等待響應(yīng)的時(shí)間又提升了用戶體驗(yàn);
7*24小時(shí)的服務(wù)保證,任意一個(gè)或多個(gè)有限后端節(jié)點(diǎn)設(shè)備宕機(jī),不能影響整個(gè)業(yè)務(wù)的運(yùn)行。
1.1.2為什么要用lvs
工作在網(wǎng)絡(luò)模型的7層,可以針對(duì)http應(yīng)用做一些分流的策略,比如針對(duì)域名、目錄結(jié)構(gòu),Nginx單憑這點(diǎn)可利用的場(chǎng)合就遠(yuǎn)多于LVS了。
最新版本的Nginx也支持4層TCP負(fù)載,曾經(jīng)這是LVS比Nginx好的地方。
Nginx對(duì)網(wǎng)絡(luò)穩(wěn)定性的依賴非常小,理論上能ping通就就能進(jìn)行負(fù)載功能,這個(gè)也是它的優(yōu)勢(shì)之一,相反LVS對(duì)網(wǎng)絡(luò)穩(wěn)定性依賴比較大。
Nginx安裝和配置比較簡(jiǎn)單,測(cè)試起來(lái)比較方便,它基本能把錯(cuò)誤用日志打印出來(lái)。LVS的配置、測(cè)試就要花比較長(zhǎng)的時(shí)間了,LVS對(duì)網(wǎng)絡(luò)依賴比較大。
那為什么要用lvs呢?
簡(jiǎn)單一句話,當(dāng)并發(fā)超過(guò)了Nginx上限,就可以使用LVS了。
日1000-2000W PV或并發(fā)請(qǐng)求1萬(wàn)以下都可以考慮用Nginx。
大型門(mén)戶網(wǎng)站,電商網(wǎng)站需要用到LVS。
1.2 LVS介紹
LVS是Linux Virtual Server的簡(jiǎn)寫(xiě),意即Linux虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng),可以在UNIX/LINUX平臺(tái)下實(shí)現(xiàn)負(fù)載均衡集群功能。該項(xiàng)目在1998年5月由章文嵩博士組織成立,是中國(guó)國(guó)內(nèi)最早出現(xiàn)的自由軟件項(xiàng)目之一。
1.2.1相關(guān)參考資料
LVS官網(wǎng):http://www.linuxvirtualserver.org/index.html
相關(guān)中文資料
LVS項(xiàng)目介紹 http://www.linuxvirtualserver.org/zh/lvs1.html
LVS集群的體系結(jié)構(gòu) http://www.linuxvirtualserver.org/zh/lvs2.html
LVS集群中的IP負(fù)載均衡技術(shù) http://www.linuxvirtualserver.org/zh/lvs3.html
LVS集群的負(fù)載調(diào)度 http://www.linuxvirtualserver.org/zh/lvs4.html
1.2.2 LVS內(nèi)核模塊ip_vs介紹
早在2.2內(nèi)核時(shí),IPVS就已經(jīng)以內(nèi)核補(bǔ)丁的形式出現(xiàn)。
從2.4.23版本開(kāi)始,IPVS軟件就合并到Linux內(nèi)核的常用版本的內(nèi)核補(bǔ)丁的集合。
從2.4.24以后IPVS已經(jīng)成為L(zhǎng)inux官方標(biāo)準(zhǔn)內(nèi)核的一部分。
LVS無(wú)需安裝
安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive
ipvsadm是通過(guò)命令行管理,而keepalive讀取配置文件管理
后面我們會(huì)用Shell腳本實(shí)現(xiàn)keepalive的功能
1.3 LVS集群搭建
1.3.1集群環(huán)境說(shuō)明
主機(jī)說(shuō)明
[root@lb03 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@lb03 ~]# uname -aLinux lb03 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux[root@lb03 ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)[root@lb03 ~]# getenforce Disabled
web環(huán)境說(shuō)明
[root@lb03 ~]# curl 10.0.0.17web03[root@lb03 ~]# curl 10.0.0.18web04
web服務(wù)器的搭建參照:
Tomcat:http://www.cnblogs.com/clsn/p/7904611.html
Nginx:http://www.cnblogs.com/clsn/p/7750615.html
1.3.2安裝ipvsadm管理工具
安裝管理工具
yum -y install ipvsadm
查看當(dāng)前LVS狀態(tài),順便激活LVS內(nèi)核模塊。
ipvsadm
查看系統(tǒng)的LVS模塊。
[root@lb03 ~]# lsmod|grep ip_vsip_vs_wrr 12697 1ip_vs 141092 3 ip_vs_wrrnf_conntrack 133387 1 ip_vslibcrc32c 12644 3 xfs,ip_vs,nf_conntrack
1.3.3 LVS集群搭建
配置LVS負(fù)載均衡服務(wù)(在lb03操作)
步驟1:在eth0網(wǎng)卡綁定VIP地址(ip)
步驟2:清除當(dāng)前所有LVS規(guī)則(-C)
步驟3:設(shè)置tcp、tcpfin、udp鏈接超時(shí)時(shí)間(--set)
步驟4:添加虛擬服務(wù)(-A),-t指定虛擬服務(wù)的IP端口,-s指定調(diào)度算法調(diào)度算法見(jiàn)man ipvsadm,rr wrr權(quán)重輪詢-p指定超時(shí)時(shí)間
步驟5:將虛擬服務(wù)關(guān)聯(lián)到真實(shí)服務(wù)上(-a)-r指定真實(shí)服務(wù)的IP端口-g LVS的模式DR模式-w指定權(quán)重
步驟6:查看配置結(jié)果(-ln)
命令集:
ip addr add 10.0.0.13/24 dev eth0ipvsadm -C ipvsadm --set 30 5 60 ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20 ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1 ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1ipvsadm -ln
檢查結(jié)果:
[root@lb03 ~]# ipvsadm -lnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 10.0.0.13:80 wrr persistent 20 -> 10.0.0.17:80 Route 1 0 0 -> 10.0.0.18:80 Route 1 0 0
ipvsadm參數(shù)說(shuō)明:(更多參照man ipvsadm)
1.3.4在web瀏覽器配置操作
步驟1:在lo網(wǎng)卡綁定VIP地址(ip)
步驟2:修改內(nèi)核參數(shù)抑制ARP響應(yīng)
命令集:
ip addr add 10.0.0.13/32 dev locat >>/etc/sysctl.conf<
至此LVS集群配置完畢!
1.3.5進(jìn)行訪問(wèn)測(cè)試
瀏覽器訪問(wèn):
命令行測(cè)試:
[root@lb04 ~]# curl 10.0.0.13web03
抓包查看結(jié)果:
arp解析查看:
[root@lb04 ~]# arp -nAddress HWtype HWaddress Flags Mask Iface10.0.0.254 ether 00:50:56:e9:9f:2c C eth010.0.0.18 ether 00:0c:29:ea:ca:55 C eth010.0.0.13 ether 00:0c:29:de:7c:97 C eth0172.16.1.15 ether 00:0c:29:de:7c:a1 C eth110.0.0.17 ether 00:0c:29:4a:ac:4a C eth0
1.4負(fù)載均衡(LVS)相關(guān)名詞
術(shù)語(yǔ)說(shuō)明:
DS:Director Server。指的是前端負(fù)載均衡器節(jié)點(diǎn)。RS:Real Server。后端真實(shí)的工作服務(wù)器。VIP:向外部直接面向用戶請(qǐng)求,作為用戶請(qǐng)求的目標(biāo)的IP地址。DIP:Director Server IP,主要用于和內(nèi)部主機(jī)通訊的IP地址。RIP:Real Server IP,后端服務(wù)器的IP地址。CIP:Client IP,訪問(wèn)客戶端的IP地址。
1.4.1 LVS集群的工作模式--DR直接路由模式
DR模式是通過(guò)改寫(xiě)請(qǐng)求報(bào)文的目標(biāo)MAC地址,將請(qǐng)求發(fā)給真實(shí)服務(wù)器的,而真實(shí)服務(wù)器將響應(yīng)后的處理結(jié)果直接返回給客戶端用戶。
DR技術(shù)可極大地提高集群系統(tǒng)的伸縮性。但要求調(diào)度器LB與真實(shí)服務(wù)器RS都有一塊物理網(wǎng)卡連在同一物理網(wǎng)段上,即必須在同一局域網(wǎng)環(huán)境。
DR直接路由模式說(shuō)明:
a)通過(guò)在調(diào)度器LB上修改數(shù)據(jù)包的目的MAC地址實(shí)現(xiàn)轉(zhuǎn)發(fā)。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。b)請(qǐng)求的報(bào)文經(jīng)過(guò)調(diào)度器,而RS響應(yīng)處理后的報(bào)文無(wú)需經(jīng)過(guò)調(diào)度器LB,因此,并發(fā)訪問(wèn)量大時(shí)使用效率很高,比Nginx代理模式強(qiáng)于此處。c)因DR模式是通過(guò)MAC地址的改寫(xiě)機(jī)制實(shí)現(xiàn)轉(zhuǎn)發(fā)的,因此,所有RS節(jié)點(diǎn)和調(diào)度器LB只能在同一個(gè)局域網(wǎng)中。需要注意RS節(jié)點(diǎn)的VIP的綁定(lo:vip/32)和ARP抑制問(wèn)題。d)強(qiáng)調(diào)下:RS節(jié)點(diǎn)的默認(rèn)網(wǎng)關(guān)不需要是調(diào)度器LB的DIP,而應(yīng)該直接是IDC機(jī)房分配的上級(jí)路由器的IP(這是RS帶有外網(wǎng)IP地址的情況),理論上講,只要RS可以出網(wǎng)即可,不需要必須配置外網(wǎng)IP,但走自己的網(wǎng)關(guān),那網(wǎng)關(guān)就成為瓶頸了。e)由于DR模式的調(diào)度器僅進(jìn)行了目的MAC地址的改寫(xiě),因此,調(diào)度器LB無(wú)法改變請(qǐng)求報(bào)文的目的端口。LVS DR模式的辦公室在二層數(shù)據(jù)鏈路層(MAC),NAT模式則工作在三層網(wǎng)絡(luò)層(IP)和四層傳輸層(端口)。f)當(dāng)前,調(diào)度器LB支持幾乎所有UNIX、Linux系統(tǒng),但不支持windows系統(tǒng)。真實(shí)服務(wù)器RS節(jié)點(diǎn)可以是windows系統(tǒng)。g)總之,DR模式效率很高,但是配置也較麻煩。因此,訪問(wèn)量不是特別大的公司可以用haproxy/Nginx取代之。這符合運(yùn)維的原則:簡(jiǎn)單、易用、高效。日1000-2000W PV或并發(fā)請(qǐng)求1萬(wàn)以下都可以考慮用haproxy/Nginx(LVS的NAT模式)h)直接對(duì)外的訪問(wèn)業(yè)務(wù),例如web服務(wù)做RS節(jié)點(diǎn),RS最好用公網(wǎng)IP地址。如果不直接對(duì)外的業(yè)務(wù),例如:MySQL,存儲(chǔ)系統(tǒng)RS節(jié)點(diǎn),最好只用內(nèi)部IP地址。
DR的實(shí)現(xiàn)原理和數(shù)據(jù)包的改變
(a) 當(dāng)用戶請(qǐng)求到達(dá)Director Server,此時(shí)請(qǐng)求的數(shù)據(jù)報(bào)文會(huì)先到內(nèi)核空間的PREROUTING鏈。 此時(shí)報(bào)文的源IP為CIP,目標(biāo)IP為VIP(b) PREROUTING檢查發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)IP是本機(jī),將數(shù)據(jù)包送至INPUT鏈(c) IPVS比對(duì)數(shù)據(jù)包請(qǐng)求的服務(wù)是否為集群服務(wù),若是,將請(qǐng)求報(bào)文中的源MAC地址修改為DIP的MAC地址,將目標(biāo)MAC地址修改RIP的MAC地址,然后將數(shù)據(jù)包發(fā)至POSTROUTING鏈。 此時(shí)的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標(biāo)MAC地址為RIP的MAC地址(d) 由于DS和RS在同一個(gè)網(wǎng)絡(luò)中,所以是通過(guò)二層來(lái)傳輸。POSTROUTING鏈檢查目標(biāo)MAC地址為RIP的MAC地址,那么此時(shí)數(shù)據(jù)包將會(huì)發(fā)至Real Server。(e) RS發(fā)現(xiàn)請(qǐng)求報(bào)文的MAC地址是自己的MAC地址,就接收此報(bào)文。處理完成之后,將響應(yīng)報(bào)文通過(guò)lo接口傳送給eth0網(wǎng)卡然后向外發(fā)出。 此時(shí)的源IP地址為VIP,目標(biāo)IP為CIP(f) 響應(yīng)報(bào)文最終送達(dá)至客戶端
1.5在web端的操作有什么含義?
1.5.1 RealServer為什么要在lo接口上配置VIP?
既然要讓RS能夠處理目標(biāo)地址為vip的IP包,首先必須要讓RS能接收到這個(gè)包。
在lo上配置vip能夠完成接收包并將結(jié)果返回client。
1.5.2在eth0網(wǎng)卡上配置VIP可以嗎?
不可以,將VIP設(shè)置在eth0網(wǎng)卡上,會(huì)影響RS的arp請(qǐng)求,造成整體LVS集群arp緩存表紊亂,以至于整個(gè)負(fù)載均衡集群都不能正常工作。
1.5.3為什么要抑制ARP響應(yīng)?
①arp協(xié)議說(shuō)明
ARP協(xié)議,全稱"Address Resolution Protocol",中文名是地址解析協(xié)議,使用ARP協(xié)議可實(shí)現(xiàn)通過(guò)IP地址獲得對(duì)應(yīng)主機(jī)的物理地址(MAC地址)。
ARP協(xié)議要求通信的主機(jī)雙方必須在同一個(gè)物理網(wǎng)段(即局域網(wǎng)環(huán)境)!
為了提高IP轉(zhuǎn)換MAC的效率,系統(tǒng)會(huì)將解析結(jié)果保存下來(lái),這個(gè)結(jié)果叫做ARP緩存。
Windows查看ARP緩存命令 arp -aLinux查看ARP緩存命令 arp -nLinux解析IP對(duì)應(yīng)的MAC地址 arping -c 1 -I eth0 10.0.0.6
ARP緩存表是把雙刃劍
a)主機(jī)有了arp緩存表,可以加快ARP的解析速度,減少局域網(wǎng)內(nèi)廣播風(fēng)暴。因?yàn)閍rp是發(fā)廣播解析的,頻繁的解析也是消耗帶寬的,尤其是機(jī)器多的時(shí)候。
b)正是有了arp緩存表,給惡意黑客帶來(lái)了攻擊服務(wù)器主機(jī)的風(fēng)險(xiǎn),這個(gè)就是arp欺騙攻擊。
c)切換路由器,負(fù)載均衡器等設(shè)備時(shí),可能會(huì)導(dǎo)致短時(shí)網(wǎng)絡(luò)中斷。因?yàn)樗械目蛻舳薃RP緩存表沒(méi)有更新
②服務(wù)器切換ARP問(wèn)題
當(dāng)集群中一臺(tái)提供服務(wù)的lb01機(jī)器宕機(jī)后,然后VIP會(huì)轉(zhuǎn)移到備機(jī)lb02上,但是客戶端的ARP緩存表的地址解析還是宕機(jī)的lb01的MAC地址。從而導(dǎo)致,即使在lb02上添加VIP,也會(huì)發(fā)生客戶端無(wú)法訪問(wèn)的情況。
解決辦法是:當(dāng)lb01宕機(jī),VIP地址遷移到lb02時(shí),需要通過(guò)arping命令通知所有網(wǎng)絡(luò)內(nèi)機(jī)器更新本地的ARP緩存表,從而使得客戶機(jī)訪問(wèn)時(shí)重新廣播獲取MAC地址。
這個(gè)是自己開(kāi)發(fā)服務(wù)器高可用腳本及所有高可用軟件必須考慮到的問(wèn)題。
ARP廣播進(jìn)行新的地址解析
arping -I eth0 -c 1 -U VIParping -I eth0 -c 1 -U 10.0.0.13
測(cè)試命令
ip addr del 10.0.0.13/24 dev eth0ip addr add 10.0.0.13/24 dev eth0ip addr show eth0arping -I eth0 -c 1 -U 10.0.0.13
windows查看arp -a
接口: 10.0.0.1 --- 0x12 Internet 地址 物理地址 類型 10.0.0.13 00-0c-29-de-7c-97 動(dòng)態(tài) 10.0.0.15 00-0c-29-de-7c-97 動(dòng)態(tài) 10.0.0.16 00-0c-29-2e-47-20 動(dòng)態(tài) 10.0.0.17 00-0c-29-4a-ac-4a 動(dòng)態(tài) 10.0.0.18 00-0c-29-ea-ca-55 動(dòng)態(tài)
③arp_announce和arp_ignore詳解
# 配置的內(nèi)核參數(shù)net.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2
lvs在DR模式下需要關(guān)閉arp功能
arp_announce
對(duì)網(wǎng)絡(luò)接口上,本地IP地址的發(fā)出的,ARP回應(yīng),作出相應(yīng)級(jí)別的限制:
確定不同程度的限制,宣布對(duì)來(lái)自本地源IP地址發(fā)出Arp請(qǐng)求的接口
arp_ignore定義
對(duì)目標(biāo)地定義對(duì)目標(biāo)地址為本地IP的ARP詢問(wèn)不同的應(yīng)答模式0
抑制RS端arp前的廣播情況
抑制RS端arp后廣播情況
1.6 LVS集群的工作模式
1.6.1 LVS集群的工作模式--NAT
通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換,調(diào)度器LB重寫(xiě)請(qǐng)求報(bào)文的目標(biāo)地址,根據(jù)預(yù)設(shè)的調(diào)度算法,將請(qǐng)求分派給后端的真實(shí)服務(wù)器,真實(shí)服務(wù)器的響應(yīng)報(bào)文處理之后,返回時(shí)必須要通過(guò)調(diào)度器,經(jīng)過(guò)調(diào)度器時(shí)報(bào)文的源地址被重寫(xiě),再返回給客戶,完成整個(gè)負(fù)載調(diào)度過(guò)程。
收費(fèi)站模式---來(lái)去都要經(jīng)過(guò)LB負(fù)載均衡器。
NAT方式的實(shí)現(xiàn)原理和數(shù)據(jù)包的改變
lRS應(yīng)該使用私有地址,RS的網(wǎng)關(guān)必須指向DIP
(a). 當(dāng)用戶請(qǐng)求到達(dá)Director Server,此時(shí)請(qǐng)求的數(shù)據(jù)報(bào)文會(huì)先到內(nèi)核空間的PREROUTING鏈。 此時(shí)報(bào)文的源IP為CIP,目標(biāo)IP為VIP(b). PREROUTING檢查發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)IP是本機(jī),將數(shù)據(jù)包送至INPUT鏈(c). IPVS比對(duì)數(shù)據(jù)包請(qǐng)求的服務(wù)是否為集群服務(wù),若是,修改數(shù)據(jù)包的目標(biāo)IP地址為后端服務(wù)器IP,然后將數(shù)據(jù)包發(fā)至POSTROUTING鏈。 此時(shí)報(bào)文的源IP為CIP,目標(biāo)IP為RIP(d). POSTROUTING鏈通過(guò)選路,將數(shù)據(jù)包發(fā)送給Real Server(e). Real Server比對(duì)發(fā)現(xiàn)目標(biāo)為自己的IP,開(kāi)始構(gòu)建響應(yīng)報(bào)文發(fā)回給Director Server。 此時(shí)報(bào)文的源IP為RIP,目標(biāo)IP為CIP(f). Director Server在響應(yīng)客戶端前,此時(shí)會(huì)將源IP地址修改為自己的VIP地址,然后響應(yīng)給客戶端。 此時(shí)報(bào)文的源IP為VIP,目標(biāo)IP為CIP
LVS-NAT模型的特性
lDIP和RIP必須在同一個(gè)網(wǎng)段內(nèi)
l請(qǐng)求和響應(yīng)報(bào)文都需要經(jīng)過(guò)Director Server,高負(fù)載場(chǎng)景中,Director Server易成為性能瓶頸
l支持端口映射
lRS可以使用任意操作系統(tǒng)
l缺陷:對(duì)Director Server壓力會(huì)比較大,請(qǐng)求和響應(yīng)都需經(jīng)過(guò)director server
1.6.2 LVS集群的工作模式--隧道模式TUN
采用NAT技術(shù)時(shí),由于請(qǐng)求和響應(yīng)的報(bào)文都必須經(jīng)過(guò)調(diào)度器地址重寫(xiě),當(dāng)客戶請(qǐng)求越來(lái)越多時(shí),調(diào)度器的處理能力將成為瓶頸,為了解決這個(gè)問(wèn)題,調(diào)度器把請(qǐng)求的報(bào)文通過(guò)IP隧道(相當(dāng)于ipip或ipsec )轉(zhuǎn)發(fā)至真實(shí)服務(wù)器,而真實(shí)服務(wù)器將響應(yīng)處理后直接返回給客戶端用戶,這樣調(diào)度器就只處理請(qǐng)求的入站報(bào)文。由于一般網(wǎng)絡(luò)服務(wù)應(yīng)答數(shù)據(jù)比請(qǐng)求報(bào)文大很多,采用VS/TUN技術(shù)后,集群系統(tǒng)的最大吞吐量可以提高10倍。
VS/TUN工作流程,它的連接調(diào)度和管理與VS/NAT中的一樣,只是它的報(bào)文轉(zhuǎn)發(fā)方法不同。調(diào)度器根據(jù)各個(gè)服務(wù)器的負(fù)載情況,連接數(shù)多少,動(dòng)態(tài)地選擇一臺(tái)服務(wù)器,將原請(qǐng)求的報(bào)文封裝在另一個(gè)IP報(bào)文中,再將封裝后的IP報(bào)文轉(zhuǎn)發(fā)給選出的真實(shí)服務(wù)器;真實(shí)服務(wù)器收到報(bào)文后,先將收到的報(bào)文解封獲得原來(lái)目標(biāo)地址為VIP地址的報(bào)文,服務(wù)器發(fā)現(xiàn)VIP地址被配置在本地的IP隧道設(shè)備上(此處要人為配置),所以就處理這個(gè)請(qǐng)求,然后根據(jù)路由表將響應(yīng)報(bào)文直接返回給客戶。
TUN原理和數(shù)據(jù)包的改變
(a) 當(dāng)用戶請(qǐng)求到達(dá)Director Server,此時(shí)請(qǐng)求的數(shù)據(jù)報(bào)文會(huì)先到內(nèi)核空間的PREROUTING鏈。 此時(shí)報(bào)文的源IP為CIP,目標(biāo)IP為VIP 。(b) PREROUTING檢查發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)IP是本機(jī),將數(shù)據(jù)包送至INPUT鏈(c) IPVS比對(duì)數(shù)據(jù)包請(qǐng)求的服務(wù)是否為集群服務(wù),若是,在請(qǐng)求報(bào)文的首部再次封裝一層IP報(bào)文,封裝源IP為為DIP,目標(biāo)IP為RIP。然后發(fā)至POSTROUTING鏈。 此時(shí)源IP為DIP,目標(biāo)IP為RIP(d) POSTROUTING鏈根據(jù)最新封裝的IP報(bào)文,將數(shù)據(jù)包發(fā)至RS(因?yàn)樵谕鈱臃庋b多了一層IP首部,所以可以理解為此時(shí)通過(guò)隧道傳輸)。 此時(shí)源IP為DIP,目標(biāo)IP為RIP(e) RS接收到報(bào)文后發(fā)現(xiàn)是自己的IP地址,就將報(bào)文接收下來(lái),拆除掉最外層的IP后,會(huì)發(fā)現(xiàn)里面還有一層IP首部,而且目標(biāo)是自己的lo接口VIP,那么此時(shí)RS開(kāi)始處理此請(qǐng)求,處理完成之后,通過(guò)lo接口送給eth0網(wǎng)卡,然后向外傳遞。 此時(shí)的源IP地址為VIP,目標(biāo)IP為CIP(f) 響應(yīng)報(bào)文最終送達(dá)至客戶端
lRIP、VIP、DIP全是公網(wǎng)地址LVS-Tun模型特性
lRS的網(wǎng)關(guān)不會(huì)也不可能指向DIP
l所有的請(qǐng)求報(bào)文經(jīng)由Director Server,但響應(yīng)報(bào)文必須不能進(jìn)過(guò)Director Server
l不支持端口映射
lRS的系統(tǒng)必須支持隧道
1.6.3 LVS集群的工作模式--FULLNAT
LVS的DR和NAT模式要求RS和LVS在同一個(gè)vlan中,導(dǎo)致部署成本過(guò)高;TUNNEL模式雖然可以跨vlan,但RealServer上需要部署ipip隧道模塊等,網(wǎng)絡(luò)拓?fù)渖闲枰B通外網(wǎng),較復(fù)雜,不易運(yùn)維。
為了解決上述問(wèn)題,開(kāi)發(fā)出FULLNAT,該模式和NAT模式的區(qū)別是:數(shù)據(jù)包進(jìn)入時(shí),除了做DNAT,還做SNAT(用戶ip->內(nèi)網(wǎng)ip),從而實(shí)現(xiàn)LVS-RealServer間可以跨vlan通訊,RealServer只需要連接到內(nèi)網(wǎng)。
類比地鐵站多個(gè)閘機(jī)。
1.7 IPVS調(diào)度器實(shí)現(xiàn)了如下八種負(fù)載調(diào)度算法:
a)輪詢(Round Robin)RR
調(diào)度器通過(guò)"輪叫"調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。
b)加權(quán)輪叫(Weighted Round Robin)WRR
調(diào)度器通過(guò)"加權(quán)輪叫"調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來(lái)調(diào)度訪問(wèn)請(qǐng)求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問(wèn)流量。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
c)最少鏈接(Least Connections)LC
調(diào)度器通過(guò)"最少連接"調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用"最小連接"調(diào)度算法可以較好地均衡負(fù)載。
d)加權(quán)最少鏈接(Weighted Least Connections)Wlc
在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用"加權(quán)最少鏈接"調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
e)基于局部性的最少鏈接(Locality-Based Least Connections)Lblc
"基于局部性的最少鏈接"調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用"最少鏈接"的原則選出一個(gè)可用的服務(wù)器,將請(qǐng)求發(fā)送到該服務(wù)器。
f)帶復(fù)制的基于局部性最少鏈接(Locality-Based Least Connections with Replication)
"帶復(fù)制的基于局部性最少鏈接"調(diào)度算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。它與LBLC算法的不同之處是它要維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射。該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該目標(biāo)IP地址對(duì)應(yīng)的服務(wù)器組,按"最小連接"原則從服務(wù)器組中選出一臺(tái)服務(wù)器,若服務(wù)器沒(méi)有超載,將請(qǐng)求發(fā)送到該服務(wù)器,若服務(wù)器超載;則按"最小連接"原則從這個(gè)集群中選出一臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器。同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒(méi)有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度。
g)目標(biāo)地址散列(Destination Hashing)Dh
"目標(biāo)地址散列"調(diào)度算法根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。
h)源地址散列(Source Hashing)SH
"源地址散列"調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。
1.8 LVS+Keepalived方案實(shí)現(xiàn)
1.8.1 keepalived功能
1.添加VIP
2.添加LVS配置
3.高可用(VIP漂移)
4. web服務(wù)器健康檢查
1.8.2在負(fù)載器安裝Keepalived軟件
yum -y install keepalived
#檢查軟件是否安裝
[root@lb03 ~]# rpm -qa keepalivedkeepalived-1.3.5-1.el7.x86_64
1.8.3修改配置文件
lb03上keepalied配置文件
lb03 /etc/keepalived/keepalived.conf
lb04的Keepalied配置文件
lb04 /etc/keepalived/keepalived.conf
keepalivedpersistence_timeout參數(shù)意義LVS Persistence參數(shù)的作用
http://blog.csdn.net/nimasike/article/details/53911363
1.8.4啟動(dòng)keepalived服務(wù)
[root@lb03 ~]# systemctl restart keepalived.service # 檢查lvs狀態(tài)[root@lb03 ~]# ipvsadm -lnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 10.0.0.13:80 wrr persistent 50 -> 10.0.0.17:80 Route 1 0 0 -> 10.0.0.18:80 Route 1 0 0 # 檢查虛擬ip[root@lb03 ~]# ip a s eth02: eth0:
1.8.5在web服務(wù)器上進(jìn)行配置
(在web03/web04同時(shí)操作下面步驟)步驟1:在lo網(wǎng)卡綁定VIP地址(ip)步驟2:修改內(nèi)核參數(shù)抑制ARP響應(yīng)ip addr add 10.0.0.13/32 dev locat >>/etc/sysctl.conf<
注意:web服務(wù)器上的配置為臨時(shí)生效,可以將其寫(xiě)入rc.local文件,注意文件的執(zhí)行權(quán)限。
使用curl命令進(jìn)行測(cè)試
[root@lb04 ~]# curl 10.0.0.13web03
至此keepalived+lvs配置完畢
1.9常見(jiàn)LVS負(fù)載均衡高可用解決方案
開(kāi)發(fā)類似keepalived的腳本,早期的辦法,現(xiàn)在不推薦使用。
heartbeat+lvs+ldirectord腳本配置方案,復(fù)雜不易控制,不推薦使用
RedHat工具piranha,一個(gè)web界面配置LVS。
LVS-DR+keepalived方案,推薦最優(yōu)方案,簡(jiǎn)單、易用、高效。
1.9.1 lvs排錯(cuò)思路
DR(Direct Routing)直接路由模式
NAT(Network Address Translation)
TUN(Tunneling)隧道模式
FULLNAT(Full Network Address Translation)
-
Linux
+關(guān)注
關(guān)注
87文章
11310瀏覽量
209616 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9184瀏覽量
85489
原文標(biāo)題:高薪Linux必備之高并發(fā)場(chǎng)景 LVS 簡(jiǎn)快入門(mén)實(shí)戰(zhàn)(萬(wàn)字長(zhǎng)文)
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論