企業(yè)架構(gòu)LB-服務(wù)器的負(fù)載均衡之LVS實(shí)現(xiàn)
學(xué)習(xí)目標(biāo)和內(nèi)容
1、能夠了解LVS的基本工作方式
2、能夠安裝配置LVS實(shí)現(xiàn)負(fù)載均衡
3、能夠了解LVS-NAT的配置方式
4、能夠了解LVS-DR的配置方式
#一、LVS介紹和安裝
==LVS==(Linux Virtual Server)即Linux虛擬服務(wù)器,是由章文嵩博士主導(dǎo)的開源負(fù)載均衡項(xiàng)目,目前LVS已經(jīng)被集成到Linux內(nèi)核模塊中。該項(xiàng)目==在Linux內(nèi)核中實(shí)現(xiàn)了基于IP的數(shù)據(jù)請(qǐng)求負(fù)載均衡調(diào)度方案==。
LVS的IPVS模塊在Linux內(nèi)核2.4之后以上都被默認(rèn)支持了,只需要安裝ipvsadm管理配置軟件即可。
作用和優(yōu)勢:
①工作在網(wǎng)絡(luò)層,可以實(shí)現(xiàn)高性能,高可用的服務(wù)器集群技術(shù)。 ②廉價(jià),可把許多低性能的服務(wù)器組合在一起形成一個(gè)超級(jí)服務(wù)器。 ③易用,配置非常簡單,且有多種負(fù)載均衡的方法。 ④穩(wěn)定可靠,即使在集群的服務(wù)器中某臺(tái)服務(wù)器無法正常工作,也不影響整體效果。 ⑤可擴(kuò)展性非常好。
安裝ipvsadm 只在負(fù)載均衡調(diào)度服務(wù)器上安裝即可
shell > yum -y install ipvsadm
LVS的常見工作方式:
①NAT(地址轉(zhuǎn)換) ②DR(直接路由)
LVS調(diào)度算法: 1.Fixed Scheduling Method 靜態(tài)調(diào)度方法
①RR 輪詢 調(diào)度器通過"輪叫"調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。
②WRR 加權(quán)輪詢 調(diào)度器通過"加權(quán)輪叫"調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來調(diào)度訪問請(qǐng)求。 這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問流量。調(diào)度器 可以自動(dòng)問詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
③DH 目標(biāo)地址hash 算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,但它是一種靜態(tài)映射算法,通過一個(gè)散列(Hash)函數(shù)將一個(gè)目標(biāo)IP地址映射到一臺(tái)服務(wù)器。 目標(biāo)地址散列調(diào)度算法先根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。
④SH 源地址hash 算法正好與目標(biāo)地址散列調(diào)度算法相反,它根據(jù)請(qǐng)求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是 可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。 它采用的散列函數(shù)與目標(biāo)地址散列調(diào)度算法的相同。除了將請(qǐng)求的目標(biāo)IP地址換成請(qǐng)求的源IP地址外,它的算法流程與目標(biāo)地址散列調(diào)度算法的基本相似。在實(shí)際應(yīng)用中,源地址散列調(diào)度和目標(biāo)地址散列調(diào)度可以結(jié)合使用在防火墻集群中,它們可以保證整個(gè)系統(tǒng)的唯一出入口。
2.Dynamic Scheduling Method 動(dòng)態(tài)調(diào)度方法
①LC 最少連接 調(diào)度器通過"最少連接"調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。 如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用"最小連接"調(diào)度算法可以較好地均衡負(fù)載。
②WLC 加權(quán)最少連接 在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用"加權(quán)最少鏈接"調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載。調(diào)度器可以自動(dòng)問詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
③SED 最少期望延遲 基于wlc算法,舉例說明:ABC三臺(tái)機(jī)器分別權(quán)重123,連接數(shù)也分別是123,name如果使用WLC算法的話一個(gè)新請(qǐng)求 進(jìn)入時(shí)他可能會(huì)分給ABC中任意一個(gè),使用SED算法后會(huì)進(jìn)行這樣一個(gè)運(yùn)算 A:(1+1)/2 B:(1+2)/2 C:(1+3)/3 根據(jù)運(yùn)算結(jié)果,把連接交給C
④NQ 從不排隊(duì)調(diào)度方法 無需列隊(duì),如果有臺(tái)realserver的連接數(shù)=0 就直接分配過去,不需要進(jìn)行sed運(yùn)算.
⑤LBLC 基于本地的最少連接 "基于局部性的最少鏈接" 調(diào)度算法是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。 該算法根據(jù)請(qǐng)求的目標(biāo)IP地址找出該 目標(biāo)IP地址最近使用的服務(wù)器,若該服務(wù)器 是可用的且沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器; 若服務(wù)器不存在,或者該服務(wù)器超載且有服務(wù)器處于一半的工作負(fù)載,則用"最少鏈接"的原則選出一個(gè)可用的服務(wù)器,將請(qǐng)求發(fā)送到該服務(wù)器。
⑥LBLCR 帶復(fù)制的基于本地的最少連接 "帶復(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ù)器沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器;若服務(wù)器超載,則按"最小連接"原則從這個(gè)集群中選出一 臺(tái)服務(wù)器 ,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器。同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒有被修改, 將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度。
#二、LVS實(shí)現(xiàn)負(fù)載均衡
1、LVS-NAT實(shí)現(xiàn)
需要知道的幾個(gè)名詞概念:
服務(wù)類型 所充當(dāng)?shù)?strong>角色
DS 負(fù)載均衡調(diào)度服務(wù)器
RS 真實(shí)服務(wù)器
IP的類型和作用
CIP 客戶端IP
DIP 負(fù)載均衡調(diào)度服務(wù)器IP
VIP 負(fù)載均衡調(diào)度服務(wù)器的虛擬IP 對(duì)外提供服務(wù)的IP 用戶訪問的IP
RIP 真實(shí)服務(wù)器IP
不管采用什么網(wǎng)絡(luò)工作方式
用戶訪問的服務(wù)器IP永遠(yuǎn)是通過VIP,域名必須綁定解析到VIP上
###1.1、模式介紹
1、用戶請(qǐng)求VIP(也可以說是CIP請(qǐng)求VIP) 2、Director Server 收到用戶的請(qǐng)求后,發(fā)現(xiàn)源地址為CIP請(qǐng)求的目標(biāo)地址為VIP,那么Director Server會(huì)認(rèn)為用戶請(qǐng)求的是一個(gè)集群服務(wù),那么Director Server 會(huì)根據(jù)此前設(shè)定好的調(diào)度算法將用戶請(qǐng)求負(fù)載給某臺(tái)Real Server。 假如說此時(shí)Director Server 根據(jù)調(diào)度的結(jié)果會(huì)將請(qǐng)求分?jǐn)偟絉ealServer1上去,那么Director Server 會(huì)將用戶的請(qǐng)求報(bào)文中的目標(biāo)地址,從原來的VIP改為RealServer1的IP,然后再轉(zhuǎn)發(fā)給RealServer1 3、此時(shí)RealServer1收到一個(gè)源地址為CIP目標(biāo)地址為自己的請(qǐng)求,那么RealServer1處理好請(qǐng)求后會(huì)將一個(gè)源地址為自己目標(biāo)地址為CIP的數(shù)據(jù)包通過Director Server 發(fā)出去, 4、當(dāng)Driector Server收到一個(gè)源地址為RealServer1 的IP 目標(biāo)地址為CIP的數(shù)據(jù)包,此時(shí)Driector Server 會(huì)將源地址修改為VIP,然后再將數(shù)據(jù)包發(fā)送給用戶
###1.2、案例實(shí)現(xiàn)
server | type | IP |
---|---|---|
客戶端 | ||
server04 | 負(fù)載均衡調(diào)度服務(wù)器 DS | 192.168.24.52(對(duì)外訪問的VIP) 192.168.17.103(DIP) |
server01 | 真實(shí)服務(wù)器 web服務(wù)器 RS | 192.168.17.102(RIP) |
server03 | 真實(shí)服務(wù)器 web服務(wù)器 RS | 192.168.17.101(RIP) |
給server04增加一塊網(wǎng)卡,命名為eth1 橋接模式,自動(dòng)獲取IP即可,例子中IP獲取為192.168.1.5
在centos系統(tǒng)中建立網(wǎng)卡配置文件
啟動(dòng)網(wǎng)卡
注意如果獲取不到IP信息,查看橋接模式的對(duì)應(yīng)網(wǎng)卡,是否選擇正確
①RS上web服務(wù)正常運(yùn)行,這個(gè)之前案例已經(jīng)實(shí)現(xiàn),可以沿用
#啟動(dòng)web服務(wù),能夠正常訪問 #添加默認(rèn)路由網(wǎng)關(guān) #如果有默認(rèn)路由網(wǎng)關(guān)刪除掉即可 shell > route del default shell > route add default gw 192.168.17.103
②在DS上通過ipvsadm配置調(diào)度規(guī)則
#定義一個(gè)集群服務(wù) #定義IP為VIP shell > ipvsadm -A -t 192.168.24.52:80 -s rr #添加RealServer并指定工作模式為NAT shell > ipvsadm -a -t 192.168.24.52:80 -r 192.168.17.102 -m shell > ipvsadm -a -t 192.168.24.52:80 -r 192.168.17.101 -m #查看ipvs定義的規(guī)則列表 shell > ipvsadm -L -n #啟動(dòng)Linux的路由轉(zhuǎn)發(fā)功能 shell > echo 1 > /proc/sys/net/ipv4/ip_forward
常用參數(shù)說明
-A 增加一個(gè)虛擬服務(wù)
-t 配置虛擬機(jī)服務(wù)的地址
-s 負(fù)載均衡調(diào)度算法
-a 增加一個(gè)真實(shí)服務(wù)器
-r 真實(shí)服務(wù)器的地址
-m NAT工作模式
-C 清楚所有規(guī)則
-g DR工作模式
-w 權(quán)重
③訪問查看效果
④修改測試調(diào)度算法
通過-s重新指定負(fù)載均衡調(diào)度算法
shell > ipvsadm -E -t 192.168.24.52:80 -s dh
解決session生成和驗(yàn)證一致性問題
擴(kuò)展:使用shell腳本編寫lvs啟動(dòng)工具
lvs_nat_ds.sh 調(diào)度服務(wù)器使用腳本 注意修改對(duì)應(yīng)的VIP和RIP
lvs_nat_rs.sh 真實(shí)服務(wù)器使用腳本 注意修改對(duì)應(yīng)的網(wǎng)關(guān)到RS服務(wù)器的RIP
分別上到各服務(wù)器,進(jìn)行執(zhí)行即可。
2、LVS-DR實(shí)現(xiàn)
###2.1、模式介紹
1、首先用戶用CIP請(qǐng)求VIP
2、根據(jù)上圖可以看到,不管是Director Server還是Real Server上都需要配置VIP,那么當(dāng)用戶請(qǐng)求到達(dá)我們的集群網(wǎng)絡(luò)的前端路由器的時(shí)候,請(qǐng)求數(shù)據(jù)包的源地址為CIP目標(biāo)地址為VIP,此時(shí)路由器會(huì)發(fā)廣播問誰是VIP,那么我們集群中所有的節(jié)點(diǎn)都配置有VIP,此時(shí)誰先響應(yīng)路由器那么路由器就會(huì)將用戶請(qǐng)求發(fā)給誰,這樣一來我們的集群系統(tǒng)是不是沒有意義了,那我們可以在網(wǎng)關(guān)路由器上配置靜態(tài)路由指定VIP就是Director Server,或者使用一種機(jī)制不讓Real Server 接收來自網(wǎng)絡(luò)中的ARP地址解析請(qǐng)求,這樣一來用戶的請(qǐng)求數(shù)據(jù)包都會(huì)經(jīng)過Director Servrer
3、當(dāng)Director Server收到用戶的請(qǐng)求后根據(jù)此前設(shè)定好的調(diào)度算法結(jié)果來確定將請(qǐng)求負(fù)載到某臺(tái)Real Server上去,假如說此時(shí)根據(jù)調(diào)度算法的結(jié)果,會(huì)將請(qǐng)求負(fù)載到RealServer 1上面去,此時(shí)Director Server 會(huì)將數(shù)據(jù)幀中的目標(biāo)MAC地址修改為Real Server1的MAC地址,然后再將數(shù)據(jù)幀發(fā)送出去
4、當(dāng)Real Server1 收到一個(gè)源地址為CIP目標(biāo)地址為VIP的數(shù)據(jù)包時(shí),Real Server1發(fā)現(xiàn)目標(biāo)地址為VIP,而VIP是自己,于是接受數(shù)據(jù)包并給予處理,當(dāng)Real Server1處理完請(qǐng)求后,會(huì)將一個(gè)源地址為VIP目標(biāo)地址給CIP的數(shù)據(jù)包發(fā)出去,此時(shí)的響應(yīng)請(qǐng)求就不會(huì)再經(jīng)過Director Server了,而是直接響應(yīng)給用戶。
###2.2、案例實(shí)現(xiàn)
server | type | IP |
---|---|---|
客戶端 | ||
server04 | 負(fù)載均衡調(diào)度服務(wù)器 DS | 192.168.17.103(DIP) 192.168.17.205(VIP) |
server01 | 真實(shí)服務(wù)器 web服務(wù)器 RS | 192.168.17.102(RIP) 192.168.17.205(VIP) |
server03 | 真實(shí)服務(wù)器 web服務(wù)器 RS | 192.168.17.101(RIP) 192.168.17.205(VIP) |
①在RS上配置
#設(shè)置arp的通告模式 通過VIP請(qǐng)求到DS服務(wù)器 shell > echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore shell > echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce shell > echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore shell > echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #綁定VIP到網(wǎng)卡 shell > ifconfig lo:0 192.168.17.205 broadcast 192.168.17.205 netmask 255.255.255.255 up #添加主機(jī)路由 shell > route add -host 192.168.17.205 dev lo:0
②在DS上配置
#配置DS上的VIP shell > ifconfig eth0:0 192.168.17.205 broadcast 192.168.17.205 netmask 255.255.255.255 up #添加主機(jī)路由 shell > route add -host 192.168.17.205 dev eth0:0 #配置轉(zhuǎn)發(fā)規(guī)則 shell > ipvsadm -C shell > ipvsadm -A -t 192.168.17.205:80 -s rr shell > ipvsadm -a -t 192.168.17.205:80 -r 192.168.17.102 -g shell > ipvsadm -a -t 192.168.17.205:80 -r 192.168.17.101 -g
作業(yè):通過lvs或者h(yuǎn)aproxy實(shí)現(xiàn)mysql的連接轉(zhuǎn)發(fā)
①mysql需要建立可以允許遠(yuǎn)程登錄的用戶
②lvs配置對(duì)應(yīng)的轉(zhuǎn)發(fā)規(guī)則即可 注意端口是3306文章來源:http://www.zghlxwxcb.cn/news/detail-833761.html
③haproxy需要修改mode工作模式為tcp模式文章來源地址http://www.zghlxwxcb.cn/news/detail-833761.html
到了這里,關(guān)于企業(yè)架構(gòu)LB-服務(wù)器的負(fù)載均衡之LVS實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!