0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux必備普及高并發(fā)場景LVS的實現(xiàn)過程

馬哥Linux運維 ? 來源:未知 ? 作者:李倩 ? 2018-03-31 09:12 ? 次閱讀

隨著移動互聯(lián)網(wǎng)的加速,應(yīng)用大規(guī)模同時使用的情況成為了常態(tài),如微博、知乎、今日頭條等大型應(yīng)用,作為Linux運維從業(yè)者,高并發(fā)場景的解決能力成為了高薪的關(guān)鍵。

今天我們特別邀請了資深的Linux運維老司機(jī)慘綠少年Linux來給大家普及高并發(fā)場景 LVS的實現(xiàn)過程,助你高薪之路順暢。

1.1負(fù)載均衡介紹

1.1.1負(fù)載均衡的妙用

負(fù)載均衡(Load Balance)集群提供了一種廉價、有效、透明的方法,來擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的負(fù)載、帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。

單臺計算機(jī)無法承受大規(guī)模的并發(fā)訪問或數(shù)據(jù)流量了,此時需要搭建負(fù)載均衡集群把流量分?jǐn)偟蕉嗯_節(jié)點設(shè)備上分別處理,即減少用戶等待響應(yīng)的時間又提升了用戶體驗;

7*24小時的服務(wù)保證,任意一個或多個有限后端節(jié)點設(shè)備宕機(jī),不能影響整個業(yè)務(wù)的運行。

1.1.2為什么要用lvs

工作在網(wǎng)絡(luò)模型的7層,可以針對http應(yīng)用做一些分流的策略,比如針對域名、目錄結(jié)構(gòu),Nginx單憑這點可利用的場合就遠(yuǎn)多于LVS了。

最新版本的Nginx也支持4層TCP負(fù)載,曾經(jīng)這是LVS比Nginx好的地方。

Nginx對網(wǎng)絡(luò)穩(wěn)定性的依賴非常小,理論上能ping通就就能進(jìn)行負(fù)載功能,這個也是它的優(yōu)勢之一,相反LVS對網(wǎng)絡(luò)穩(wěn)定性依賴比較大。

Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日志打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網(wǎng)絡(luò)依賴比較大。

那為什么要用lvs呢?

簡單一句話,當(dāng)并發(fā)超過了Nginx上限,就可以使用LVS了。

日1000-2000W PV或并發(fā)請求1萬以下都可以考慮用Nginx。

大型門戶網(wǎng)站,電商網(wǎng)站需要用到LVS。

1.2 LVS介紹

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務(wù)器,是一個虛擬的服務(wù)器集群系統(tǒng),可以在UNIX/LINUX平臺下實現(xiàn)負(fù)載均衡集群功能。該項目在1998年5月由章文嵩博士組織成立,是中國國內(nèi)最早出現(xiàn)的自由軟件項目之一。

1.2.1相關(guān)參考資料

LVS官網(wǎng):http://www.linuxvirtualserver.org/index.html

相關(guān)中文資料

LVS項目介紹 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)核時,IPVS就已經(jīng)以內(nèi)核補(bǔ)丁的形式出現(xiàn)。

從2.4.23版本開始,IPVS軟件就合并到Linux內(nèi)核的常用版本的內(nèi)核補(bǔ)丁的集合。

從2.4.24以后IPVS已經(jīng)成為Linux官方標(biāo)準(zhǔn)內(nèi)核的一部分。

LVS無需安裝

安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive

ipvsadm是通過命令行管理,而keepalive讀取配置文件管理

后面我們會用Shell腳本實現(xiàn)keepalive的功能

1.3 LVS集群搭建

1.3.1集群環(huán)境說明

主機(jī)說明

[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)境說明

[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鏈接超時時間(--set)

步驟4:添加虛擬服務(wù)(-A),-t指定虛擬服務(wù)的IP端口,-s指定調(diào)度算法調(diào)度算法見man ipvsadm,rr wrr權(quán)重輪詢-p指定超時時間

步驟5:將虛擬服務(wù)關(guān)聯(lián)到真實服務(wù)上(-a)-r指定真實服務(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ù)說明:(更多參照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)行訪問測試

瀏覽器訪問:

命令行測試:

[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ù)語說明:

DS:Director Server。指的是前端負(fù)載均衡器節(jié)點。RS:Real Server。后端真實的工作服務(wù)器。VIP:向外部直接面向用戶請求,作為用戶請求的目標(biāo)的IP地址。DIP:Director Server IP,主要用于和內(nèi)部主機(jī)通訊的IP地址。RIP:Real Server IP,后端服務(wù)器的IP地址。CIP:Client IP,訪問客戶端的IP地址。

1.4.1 LVS集群的工作模式--DR直接路由模式

DR模式是通過改寫請求報文的目標(biāo)MAC地址,將請求發(fā)給真實服務(wù)器的,而真實服務(wù)器將響應(yīng)后的處理結(jié)果直接返回給客戶端用戶。

DR技術(shù)可極大地提高集群系統(tǒng)的伸縮性。但要求調(diào)度器LB與真實服務(wù)器RS都有一塊物理網(wǎng)卡連在同一物理網(wǎng)段上,即必須在同一局域網(wǎng)環(huán)境。

DR直接路由模式說明:

a)通過在調(diào)度器LB上修改數(shù)據(jù)包的目的MAC地址實現(xiàn)轉(zhuǎn)發(fā)。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP。b)請求的報文經(jīng)過調(diào)度器,而RS響應(yīng)處理后的報文無需經(jīng)過調(diào)度器LB,因此,并發(fā)訪問量大時使用效率很高,比Nginx代理模式強(qiáng)于此處。c)因DR模式是通過MAC地址的改寫機(jī)制實現(xiàn)轉(zhuǎn)發(fā)的,因此,所有RS節(jié)點和調(diào)度器LB只能在同一個局域網(wǎng)中。需要注意RS節(jié)點的VIP的綁定(lo:vip/32)和ARP抑制問題。d)強(qiáng)調(diào)下:RS節(jié)點的默認(rèn)網(wǎng)關(guān)不需要是調(diào)度器LB的DIP,而應(yīng)該直接是IDC機(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地址的改寫,因此,調(diào)度器LB無法改變請求報文的目的端口。LVS DR模式的辦公室在二層數(shù)據(jù)鏈路層(MAC),NAT模式則工作在三層網(wǎng)絡(luò)層(IP)和四層傳輸層(端口)。f)當(dāng)前,調(diào)度器LB支持幾乎所有UNIX、Linux系統(tǒng),但不支持windows系統(tǒng)。真實服務(wù)器RS節(jié)點可以是windows系統(tǒng)。g)總之,DR模式效率很高,但是配置也較麻煩。因此,訪問量不是特別大的公司可以用haproxy/Nginx取代之。這符合運維的原則:簡單、易用、高效。日1000-2000W PV或并發(fā)請求1萬以下都可以考慮用haproxy/Nginx(LVS的NAT模式)h)直接對外的訪問業(yè)務(wù),例如web服務(wù)做RS節(jié)點,RS最好用公網(wǎng)IP地址。如果不直接對外的業(yè)務(wù),例如:MySQL,存儲系統(tǒng)RS節(jié)點,最好只用內(nèi)部IP地址。

DR的實現(xiàn)原理和數(shù)據(jù)包的改變

(a) 當(dāng)用戶請求到達(dá)Director Server,此時請求的數(shù)據(jù)報文會先到內(nèi)核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標(biāo)IP為VIP(b) PREROUTING檢查發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)IP是本機(jī),將數(shù)據(jù)包送至INPUT鏈(c) IPVS比對數(shù)據(jù)包請求的服務(wù)是否為集群服務(wù),若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標(biāo)MAC地址修改RIP的MAC地址,然后將數(shù)據(jù)包發(fā)至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標(biāo)MAC地址為RIP的MAC地址(d) 由于DS和RS在同一個網(wǎng)絡(luò)中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標(biāo)MAC地址為RIP的MAC地址,那么此時數(shù)據(jù)包將會發(fā)至Real Server。(e) RS發(fā)現(xiàn)請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之后,將響應(yīng)報文通過lo接口傳送給eth0網(wǎng)卡然后向外發(fā)出。 此時的源IP地址為VIP,目標(biāo)IP為CIP(f) 響應(yīng)報文最終送達(dá)至客戶端

1.5在web端的操作有什么含義?

1.5.1 RealServer為什么要在lo接口上配置VIP?

既然要讓RS能夠處理目標(biāo)地址為vip的IP包,首先必須要讓RS能接收到這個包。

在lo上配置vip能夠完成接收包并將結(jié)果返回client。

1.5.2在eth0網(wǎng)卡上配置VIP可以嗎?

不可以,將VIP設(shè)置在eth0網(wǎng)卡上,會影響RS的arp請求,造成整體LVS集群arp緩存表紊亂,以至于整個負(fù)載均衡集群都不能正常工作。

1.5.3為什么要抑制ARP響應(yīng)?

①arp協(xié)議說明

ARP協(xié)議,全稱"Address Resolution Protocol",中文名是地址解析協(xié)議,使用ARP協(xié)議可實現(xiàn)通過IP地址獲得對應(yīng)主機(jī)的物理地址(MAC地址)。

ARP協(xié)議要求通信的主機(jī)雙方必須在同一個物理網(wǎng)段(即局域網(wǎng)環(huán)境)!

為了提高IP轉(zhuǎn)換MAC的效率,系統(tǒng)會將解析結(jié)果保存下來,這個結(jié)果叫做ARP緩存。

Windows查看ARP緩存命令 arp -aLinux查看ARP緩存命令 arp -nLinux解析IP對應(yīng)的MAC地址 arping -c 1 -I eth0 10.0.0.6

ARP緩存表是把雙刃劍

a)主機(jī)有了arp緩存表,可以加快ARP的解析速度,減少局域網(wǎng)內(nèi)廣播風(fēng)暴。因為arp是發(fā)廣播解析的,頻繁的解析也是消耗帶寬的,尤其是機(jī)器多的時候。

b)正是有了arp緩存表,給惡意黑客帶來了攻擊服務(wù)器主機(jī)的風(fēng)險,這個就是arp欺騙攻擊。

c)切換路由器,負(fù)載均衡器等設(shè)備時,可能會導(dǎo)致短時網(wǎng)絡(luò)中斷。因為所有的客戶端ARP緩存表沒有更新

②服務(wù)器切換ARP問題

當(dāng)集群中一臺提供服務(wù)的lb01機(jī)器宕機(jī)后,然后VIP會轉(zhuǎn)移到備機(jī)lb02上,但是客戶端的ARP緩存表的地址解析還是宕機(jī)的lb01的MAC地址。從而導(dǎo)致,即使在lb02上添加VIP,也會發(fā)生客戶端無法訪問的情況。

解決辦法是:當(dāng)lb01宕機(jī),VIP地址遷移到lb02時,需要通過arping命令通知所有網(wǎng)絡(luò)內(nèi)機(jī)器更新本地的ARP緩存表,從而使得客戶機(jī)訪問時重新廣播獲取MAC地址。

這個是自己開發(fā)服務(wù)器高可用腳本及所有高可用軟件必須考慮到的問題。

ARP廣播進(jìn)行新的地址解析

arping -I eth0 -c 1 -U VIParping -I eth0 -c 1 -U 10.0.0.13

測試命令

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 動態(tài) 10.0.0.15 00-0c-29-de-7c-97 動態(tài) 10.0.0.16 00-0c-29-2e-47-20 動態(tài) 10.0.0.17 00-0c-29-4a-ac-4a 動態(tài) 10.0.0.18 00-0c-29-ea-ca-55 動態(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

對網(wǎng)絡(luò)接口上,本地IP地址的發(fā)出的,ARP回應(yīng),作出相應(yīng)級別的限制:

確定不同程度的限制,宣布對來自本地源IP地址發(fā)出Arp請求的接口

arp_ignore定義

對目標(biāo)地定義對目標(biāo)地址為本地IP的ARP詢問不同的應(yīng)答模式0

抑制RS端arp前的廣播情況

抑制RS端arp后廣播情況

1.6 LVS集群的工作模式

DR(Direct Routing)直接路由模式
NAT(Network Address Translation)
TUN(Tunneling)隧道模式
FULLNAT(Full Network Address Translation)

1.6.1 LVS集群的工作模式--NAT

通過網(wǎng)絡(luò)地址轉(zhuǎn)換,調(diào)度器LB重寫請求報文的目標(biāo)地址,根據(jù)預(yù)設(shè)的調(diào)度算法,將請求分派給后端的真實服務(wù)器,真實服務(wù)器的響應(yīng)報文處理之后,返回時必須要通過調(diào)度器,經(jīng)過調(diào)度器時報文的源地址被重寫,再返回給客戶,完成整個負(fù)載調(diào)度過程。

收費站模式---來去都要經(jīng)過LB負(fù)載均衡器。

NAT方式的實現(xiàn)原理和數(shù)據(jù)包的改變

lRS應(yīng)該使用私有地址,RS的網(wǎng)關(guān)必須指向DIP

(a). 當(dāng)用戶請求到達(dá)Director Server,此時請求的數(shù)據(jù)報文會先到內(nèi)核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標(biāo)IP為VIP(b). PREROUTING檢查發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)IP是本機(jī),將數(shù)據(jù)包送至INPUT鏈(c). IPVS比對數(shù)據(jù)包請求的服務(wù)是否為集群服務(wù),若是,修改數(shù)據(jù)包的目標(biāo)IP地址為后端服務(wù)器IP,然后將數(shù)據(jù)包發(fā)至POSTROUTING鏈。 此時報文的源IP為CIP,目標(biāo)IP為RIP(d). POSTROUTING鏈通過選路,將數(shù)據(jù)包發(fā)送給Real Server(e). Real Server比對發(fā)現(xiàn)目標(biāo)為自己的IP,開始構(gòu)建響應(yīng)報文發(fā)回給Director Server。 此時報文的源IP為RIP,目標(biāo)IP為CIP(f). Director Server在響應(yīng)客戶端前,此時會將源IP地址修改為自己的VIP地址,然后響應(yīng)給客戶端。 此時報文的源IP為VIP,目標(biāo)IP為CIP

LVS-NAT模型的特性

lDIP和RIP必須在同一個網(wǎng)段內(nèi)

l請求和響應(yīng)報文都需要經(jīng)過Director Server,高負(fù)載場景中,Director Server易成為性能瓶頸

l支持端口映射

lRS可以使用任意操作系統(tǒng)

l缺陷:對Director Server壓力會比較大,請求和響應(yīng)都需經(jīng)過director server

1.6.2 LVS集群的工作模式--隧道模式TUN

采用NAT技術(shù)時,由于請求和響應(yīng)的報文都必須經(jīng)過調(diào)度器地址重寫,當(dāng)客戶請求越來越多時,調(diào)度器的處理能力將成為瓶頸,為了解決這個問題,調(diào)度器把請求的報文通過IP隧道(相當(dāng)于ipip或ipsec )轉(zhuǎn)發(fā)至真實服務(wù)器,而真實服務(wù)器將響應(yīng)處理后直接返回給客戶端用戶,這樣調(diào)度器就只處理請求的入站報文。由于一般網(wǎng)絡(luò)服務(wù)應(yīng)答數(shù)據(jù)比請求報文大很多,采用VS/TUN技術(shù)后,集群系統(tǒng)的最大吞吐量可以提高10倍。

VS/TUN工作流程,它的連接調(diào)度和管理與VS/NAT中的一樣,只是它的報文轉(zhuǎn)發(fā)方法不同。調(diào)度器根據(jù)各個服務(wù)器的負(fù)載情況,連接數(shù)多少,動態(tài)地選擇一臺服務(wù)器,將原請求的報文封裝在另一個IP報文中,再將封裝后的IP報文轉(zhuǎn)發(fā)給選出的真實服務(wù)器;真實服務(wù)器收到報文后,先將收到的報文解封獲得原來目標(biāo)地址為VIP地址的報文,服務(wù)器發(fā)現(xiàn)VIP地址被配置在本地的IP隧道設(shè)備上(此處要人為配置),所以就處理這個請求,然后根據(jù)路由表將響應(yīng)報文直接返回給客戶。

TUN原理和數(shù)據(jù)包的改變

(a) 當(dāng)用戶請求到達(dá)Director Server,此時請求的數(shù)據(jù)報文會先到內(nèi)核空間的PREROUTING鏈。 此時報文的源IP為CIP,目標(biāo)IP為VIP 。(b) PREROUTING檢查發(fā)現(xiàn)數(shù)據(jù)包的目標(biāo)IP是本機(jī),將數(shù)據(jù)包送至INPUT鏈(c) IPVS比對數(shù)據(jù)包請求的服務(wù)是否為集群服務(wù),若是,在請求報文的首部再次封裝一層IP報文,封裝源IP為為DIP,目標(biāo)IP為RIP。然后發(fā)至POSTROUTING鏈。 此時源IP為DIP,目標(biāo)IP為RIP(d) POSTROUTING鏈根據(jù)最新封裝的IP報文,將數(shù)據(jù)包發(fā)至RS(因為在外層封裝多了一層IP首部,所以可以理解為此時通過隧道傳輸)。 此時源IP為DIP,目標(biāo)IP為RIP(e) RS接收到報文后發(fā)現(xiàn)是自己的IP地址,就將報文接收下來,拆除掉最外層的IP后,會發(fā)現(xiàn)里面還有一層IP首部,而且目標(biāo)是自己的lo接口VIP,那么此時RS開始處理此請求,處理完成之后,通過lo接口送給eth0網(wǎng)卡,然后向外傳遞。 此時的源IP地址為VIP,目標(biāo)IP為CIP(f) 響應(yīng)報文最終送達(dá)至客戶端

lRIP、VIP、DIP全是公網(wǎng)地址LVS-Tun模型特性

lRS的網(wǎng)關(guān)不會也不可能指向DIP

l所有的請求報文經(jīng)由Director Server,但響應(yīng)報文必須不能進(jìn)過Director Server

l不支持端口映射

lRS的系統(tǒng)必須支持隧道

1.6.3 LVS集群的工作模式--FULLNAT

LVS的DR和NAT模式要求RS和LVS在同一個vlan中,導(dǎo)致部署成本過高;TUNNEL模式雖然可以跨vlan,但RealServer上需要部署ipip隧道模塊等,網(wǎng)絡(luò)拓?fù)渖闲枰B通外網(wǎng),較復(fù)雜,不易運維。

為了解決上述問題,開發(fā)出FULLNAT,該模式和NAT模式的區(qū)別是:數(shù)據(jù)包進(jìn)入時,除了做DNAT,還做SNAT(用戶ip->內(nèi)網(wǎng)ip),從而實現(xiàn)LVS-RealServer間可以跨vlan通訊,RealServer只需要連接到內(nèi)網(wǎng)。

類比地鐵站多個閘機(jī)。

1.7 IPVS調(diào)度器實現(xiàn)了如下八種負(fù)載調(diào)度算法:

a)輪詢(Round Robin)RR

調(diào)度器通過"輪叫"調(diào)度算法將外部請求按順序輪流分配到集群中的真實服務(wù)器上,它均等地對待每一臺服務(wù)器,而不管服務(wù)器上實際的連接數(shù)和系統(tǒng)負(fù)載。

b)加權(quán)輪叫(Weighted Round Robin)WRR

調(diào)度器通過"加權(quán)輪叫"調(diào)度算法根據(jù)真實服務(wù)器的不同處理能力來調(diào)度訪問請求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問流量。調(diào)度器可以自動問詢真實服務(wù)器的負(fù)載情況,并動態(tài)地調(diào)整其權(quán)值。

c)最少鏈接(Least Connections)LC

調(diào)度器通過"最少連接"調(diào)度算法動態(tài)地將網(wǎng)絡(luò)請求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實服務(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ù)器將承受較大比例的活動連接負(fù)載。調(diào)度器可以自動問詢真實服務(wù)器的負(fù)載情況,并動態(tài)地調(diào)整其權(quán)值。

e)基于局部性的最少鏈接(Locality-Based Least Connections)Lblc

"基于局部性的最少鏈接"調(diào)度算法是針對目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。該算法根據(jù)請求的目標(biāo)IP地址找出該目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器是可用的且沒有超載,將請求發(fā)送到該服務(wù)器;若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用"最少鏈接"的原則選出一個可用的服務(wù)器,將請求發(fā)送到該服務(wù)器。

f)帶復(fù)制的基于局部性最少鏈接(Locality-Based Least Connections with Replication)

"帶復(fù)制的基于局部性最少鏈接"調(diào)度算法也是針對目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。它與LBLC算法的不同之處是它要維護(hù)從一個目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個目標(biāo)IP地址到一臺服務(wù)器的映射。該算法根據(jù)請求的目標(biāo)IP地址找出該目標(biāo)IP地址對應(yīng)的服務(wù)器組,按"最小連接"原則從服務(wù)器組中選出一臺服務(wù)器,若服務(wù)器沒有超載,將請求發(fā)送到該服務(wù)器,若服務(wù)器超載;則按"最小連接"原則從這個集群中選出一臺服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請求發(fā)送到該服務(wù)器。同時,當(dāng)該服務(wù)器組有一段時間沒有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度。

g)目標(biāo)地址散列(Destination Hashing)Dh

"目標(biāo)地址散列"調(diào)度算法根據(jù)請求的目標(biāo)IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請求發(fā)送到該服務(wù)器,否則返回空。

h)源地址散列(Source Hashing)SH

"源地址散列"調(diào)度算法根據(jù)請求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請求發(fā)送到該服務(wù)器,否則返回空。

1.8 LVS+Keepalived方案實現(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啟動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: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:de:7c:97 brd ff:ff:ff:ff:ff:ff inet 10.0.0.15/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 10.0.0.13/24 scope global secondary eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fede:7c97/64 scope link valid_lft forever preferred_lft forever

1.8.5在web服務(wù)器上進(jìn)行配置

(在web03/web04同時操作下面步驟)步驟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ù)器上的配置為臨時生效,可以將其寫入rc.local文件,注意文件的執(zhí)行權(quán)限。

使用curl命令進(jìn)行測試

[root@lb04 ~]# curl 10.0.0.13web03

至此keepalived+lvs配置完畢

1.9常見LVS負(fù)載均衡高可用解決方案

開發(fā)類似keepalived的腳本,早期的辦法,現(xiàn)在不推薦使用。

heartbeat+lvs+ldirectord腳本配置方案,復(fù)雜不易控制,不推薦使用

RedHat工具piranha,一個web界面配置LVS。

LVS-DR+keepalived方案,推薦最優(yōu)方案,簡單、易用、高效。

1.9.1 lvs排錯思路

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207910
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8701

    瀏覽量

    84546

原文標(biāo)題:高薪Linux必備之高并發(fā)場景 LVS 簡快入門實戰(zhàn)(萬字長文)

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    后端開發(fā)必備Linux命令匯總

    后端開發(fā)必備Linux命令匯總
    發(fā)表于 11-21 14:05 ?339次閱讀

    Linux Shell多進(jìn)程并發(fā)以及并發(fā)數(shù)控制

    linux后臺并發(fā)執(zhí)行,365個后臺任務(wù),系統(tǒng)可承受不住哦!既然不能一次性把365個任務(wù)放到linux后臺執(zhí)行,那么,能不能實現(xiàn)自動地每次將N個任務(wù)放到后臺
    發(fā)表于 08-28 15:53

    從服務(wù)端視角看并發(fā)難題

    `所謂服務(wù)器大流量并發(fā)指的是:在同時或極短時間內(nèi),有大量的請求到達(dá)服務(wù)端,每個請求都需要服務(wù)端耗費資源進(jìn)行處理,并做出相應(yīng)的反饋。 從服務(wù)端視角看并發(fā)服務(wù)端處理請求需要耗費服務(wù)端的
    發(fā)表于 11-02 15:11

    PHP開發(fā)中,如何處理負(fù)載、并發(fā)?

    ,這個是它的缺點。對后端服務(wù)器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。不支持Session的直接保持,但能通過ip_hash來解決。LVS:使用Linux內(nèi)核集群實現(xiàn)一個高性能、
    發(fā)表于 07-03 10:33

    如何去實現(xiàn)一種基于SpringMVC的電商并發(fā)秒殺系統(tǒng)設(shè)計

    參考博客Java并發(fā)秒殺系統(tǒng)API目錄業(yè)務(wù)場景要解決的問題Redis的使用業(yè)務(wù)場景首頁倒計時秒殺活動,搶購商品要解決的問題
    發(fā)表于 01-03 07:50

    ATC'22頂會論文RunD:高密并發(fā)的輕量級 Serverless 安全容器運行時 | 龍蜥技術(shù)

    和 FireCracker 都提供了實現(xiàn)這種安全容器的實踐經(jīng)驗。(圖1/目前主流的安全容器模型,以及對應(yīng)的軟件棧架構(gòu))在 Serverless 場景下,函數(shù)的輕量級和短期運行的特性使得高密度容器部署和
    發(fā)表于 09-05 15:18

    Linux設(shè)備驅(qū)動的并發(fā)控制

    Linux 設(shè)備驅(qū)動中必須解決的一個問題是多個進(jìn)程對共享資源的并發(fā)訪問,并發(fā)的訪問會導(dǎo)致競態(tài)。
    發(fā)表于 05-15 10:24 ?632次閱讀

    解密并發(fā)業(yè)務(wù)場景下典型的秒殺系統(tǒng)的架構(gòu)

    很多小伙伴反饋說,并發(fā)專題學(xué)了那么久,但是,在真正做項目時,仍然不知道如何下手處理并發(fā)業(yè)務(wù)場景!甚至很多小伙伴仍然停留在只是簡單的提供接
    的頭像 發(fā)表于 11-17 10:32 ?2154次閱讀
    解密<b class='flag-5'>高</b><b class='flag-5'>并發(fā)</b>業(yè)務(wù)<b class='flag-5'>場景</b>下典型的秒殺系統(tǒng)的架構(gòu)

    【源碼版】基于SpringMVC的電商并發(fā)秒殺系統(tǒng)設(shè)計思路

    參考博客Java并發(fā)秒殺系統(tǒng)API目錄業(yè)務(wù)場景要解決的問題Redis的使用業(yè)務(wù)場景首頁倒計時秒殺活動,搶購商品要解決的問題
    發(fā)表于 01-12 10:23 ?0次下載
    【源碼版】基于SpringMVC的電商<b class='flag-5'>高</b><b class='flag-5'>并發(fā)</b>秒殺系統(tǒng)設(shè)計思路

    通過秒殺商品來模擬并發(fā)場景

    并發(fā)場景在現(xiàn)場的日常工作中很常見,特別是在互聯(lián)網(wǎng)公司中,這篇文章就來通過秒殺商品來模擬并發(fā)場景
    的頭像 發(fā)表于 02-07 10:47 ?381次閱讀

    LVS是什么?LVS的四種模式與十種調(diào)度算法介紹

    LVS是基于4層的負(fù)載均衡技術(shù),它是Linux內(nèi)核的一個模塊。
    的頭像 發(fā)表于 02-17 09:18 ?4692次閱讀

    搭建Keepalived+Lvs+Nginx可用集群負(fù)載均衡

    Server)實現(xiàn)可用負(fù)載均衡 附:LVS的負(fù)載均衡算法 八、搭建Keepalived+Lvs+Nginx可用集群負(fù)載均衡 一、Ngi
    的頭像 發(fā)表于 06-25 15:39 ?2587次閱讀
    搭建Keepalived+<b class='flag-5'>Lvs</b>+Nginx<b class='flag-5'>高</b>可用集群負(fù)載均衡

    工業(yè)物聯(lián)網(wǎng)平臺如何應(yīng)對并發(fā)應(yīng)用場景

    面對的巨大挑戰(zhàn)。對此,數(shù)之能提供并發(fā)、官翻機(jī)接入的工業(yè)物聯(lián)網(wǎng)平臺,可以適應(yīng)并發(fā)場景應(yīng)用需求。
    的頭像 發(fā)表于 09-06 14:21 ?524次閱讀

    并發(fā)內(nèi)存池項目實現(xiàn)

    本項目實現(xiàn)了一個并發(fā)內(nèi)存池,參考了Google的開源項目tcmalloc實現(xiàn)的簡易版;其功能就是實現(xiàn)高效的多線程內(nèi)存管理。由功能可知,
    的頭像 發(fā)表于 11-09 11:16 ?566次閱讀
    <b class='flag-5'>高</b><b class='flag-5'>并發(fā)</b>內(nèi)存池項目<b class='flag-5'>實現(xiàn)</b>

    基于LVS+Keepalived實現(xiàn)可用負(fù)載均衡

    LVS 是一種預(yù)裝在 Linux 系統(tǒng)中,基于四層、具有強(qiáng)大性能的反向代理服務(wù)器。ipvsadm 是 LVS 的命令行管理工具。
    的頭像 發(fā)表于 04-09 12:30 ?773次閱讀
    基于<b class='flag-5'>LVS</b>+Keepalived<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>高</b>可用負(fù)載均衡