四层负载均衡——LVS
LVS
? 參考:http://zh.linuxvirtualserver.org/ 幾個(gè)術(shù)語: Director:也可以稱為調(diào)度器,LVS前端設(shè)備;realserver:也稱為真實(shí)內(nèi)部服務(wù)器,是真正在提供服務(wù)的;
VIP:對(duì)外公布的IP,即客戶請(qǐng)求進(jìn)來的IP地址;
DIP:調(diào)度器和realserver之間通信的地址;
LVS的三種工作方式
LVS實(shí)現(xiàn)服務(wù)器集群負(fù)載均衡有三種方式,NAT,DR和TUN,下面簡(jiǎn)單談?wù)勥@三種方式的區(qū)別: ?LVS-NAT:
這個(gè)方法的思路是實(shí)施網(wǎng)絡(luò)層(IP層)數(shù)據(jù)欺騙,它把客戶端發(fā)送到redirector數(shù)據(jù)IP包的目標(biāo)地址進(jìn)行了替換。
1、網(wǎng)絡(luò)環(huán)境 一臺(tái)director + N臺(tái)realserver,director和realserver在同一個(gè)私有網(wǎng)段,director是realserver的默認(rèn)網(wǎng)關(guān)。只有director擁有公共IP,可以暴露在廣域網(wǎng)上。 2、客戶端請(qǐng)求 客戶端請(qǐng)求先到公用IP(director),請(qǐng)求報(bào)文中的IP包目標(biāo)地址被替換成了一個(gè)director據(jù)負(fù)載均衡策略選擇的一個(gè)realserver的IP。
3、realserver響應(yīng)
realserver處理完請(qǐng)求生成了返回?cái)?shù)據(jù)包,返回?cái)?shù)據(jù)IP包的源地址是realserver的IP地址,目標(biāo)地址是客戶服務(wù)端IP地址。由于realserver的默認(rèn)網(wǎng)關(guān)是redirector,因此盡管返回IP數(shù)據(jù)包的目標(biāo)地址是客戶端的ip地址,返回?cái)?shù)據(jù)包仍然首先被發(fā)回到redirector上。redirector再次實(shí)施欺騙,把返回的IP 數(shù)據(jù)包的源地址改成自己的IP。然后再轉(zhuǎn)發(fā)到交換機(jī)上返回給客戶端。 整個(gè)過程redirector的任務(wù)是實(shí)施了2次IP層欺騙修改,一次是修改了請(qǐng)求數(shù)據(jù)包得目標(biāo)地址,這次修改的目的是為了實(shí)現(xiàn)數(shù)據(jù)的負(fù)載均衡的分發(fā)。另一次是修改了響應(yīng)數(shù)據(jù)包的源地址,目的是為了隱藏realserver,使用戶感覺不到realserver的存在。
3、限制:整個(gè)集群的吞吐量受到redirector的帶寬限制(主要是出口帶寬)。
LVS-DR:
這個(gè)方法的思路是實(shí)施數(shù)據(jù)鏈路層數(shù)據(jù)欺騙,修改網(wǎng)絡(luò)幀數(shù)據(jù)的Mac地址。
1、網(wǎng)絡(luò)環(huán)境
一臺(tái)director + N臺(tái)realserver,director和realserver都擁有公共IP,都暴露在廣域網(wǎng)上,此外realserver還有一個(gè)和director ip地址一樣的ip別名。 也就是說realserver有2個(gè)ip,一個(gè)真實(shí)的ip地址,一個(gè)和direcotr地址一樣的IP別名(即公用IP),公用IP就是開放給客戶端訪問的IP地址。
realserver還需要做一個(gè)配置,使它們忽略所有的針對(duì)公用IP的ARP廣播,當(dāng)系統(tǒng)arp廣播詢問哪個(gè)mac地址擁有公用IP時(shí),就只有調(diào)度服務(wù)器會(huì)響應(yīng),外界發(fā)送的數(shù)據(jù)就不會(huì)發(fā)給實(shí)際服務(wù)器。
2、客戶端請(qǐng)求
客戶端請(qǐng)求先到公用IP(director),由于網(wǎng)絡(luò)環(huán)境已配置為只有director響應(yīng)過ARP廣播,因此請(qǐng)求報(bào)文的mac地址會(huì)被改為realserver的mac地址。 也就是說redirector實(shí)施鏈路層欺騙,將幀數(shù)據(jù)的目標(biāo)mac地址替換成根據(jù)負(fù)載均衡策略決定的某一realserver的mac地址。
3、realserver響應(yīng)
realserver收到mac幀,然后將mac幀組裝成ip包,發(fā)現(xiàn)ip包中的目標(biāo)地址和自己的ip別名相同,沒有問題,繼續(xù)處理,(這就是要求ip別名相同的原因,如果不同,操作系統(tǒng)可能會(huì)直接忽略)生成響應(yīng)數(shù)據(jù),發(fā)送回去。這時(shí)候由于redirector不是默認(rèn)網(wǎng)關(guān),因此這些數(shù)據(jù)會(huì)直接發(fā)到廣域網(wǎng)上,廣域網(wǎng)會(huì)把數(shù)據(jù)送到客戶端。
4、優(yōu)點(diǎn):返回?cái)?shù)據(jù)包無需經(jīng)過redirector,沒有redirector帶寬瓶頸。原則上集群的帶寬是所有實(shí)際服務(wù)器帶寬之和,當(dāng)然他們不可能超過連接的廣域網(wǎng)交換機(jī)的帶寬。
5、限制:需要購(gòu)買多個(gè)公共IP,director和realserver必須在同一個(gè) WAN網(wǎng)段,也就是要在同一個(gè)交換機(jī)上。 為什么一定要在同一網(wǎng)段呢?很簡(jiǎn)單,如果realserver在另外一個(gè)網(wǎng)段,redirector把整個(gè)數(shù)據(jù)包和mac幀修改完之后再發(fā)送到交換機(jī)上,交換機(jī)發(fā)現(xiàn)自己的wan內(nèi)找不到這個(gè)mac地址,無法進(jìn)行轉(zhuǎn)發(fā)。
LVS-TUN:
這個(gè)方法是為了突破LVS-DR同一網(wǎng)段內(nèi)的限制所提出來的。它不做任何欺騙,而是光明正大的交流,在網(wǎng)絡(luò)層進(jìn)行了二次包裝。
1、網(wǎng)絡(luò)環(huán)境 一臺(tái)director + N臺(tái)realserver,director?和realserver都擁有公共IP,都暴露在廣域網(wǎng)上。公共ip互不相同,沒有別名限制,也無需在同一網(wǎng)段。
2、客戶端請(qǐng)求
客戶端發(fā)送數(shù)據(jù)到redirector,redirector把IP包作為有效負(fù)載放到一個(gè)新的IP包中去,并根據(jù)調(diào)度策略確定一個(gè)特定realserver的ip作為新的IP包得目的地址。這些新的IP包完全符合網(wǎng)絡(luò)協(xié)議,也沒有任何欺騙的勾當(dāng),因此這些ip包光明正大得穿過wan網(wǎng)段,達(dá)到指定的realserver。
3、realserver響應(yīng)
realserver拿到數(shù)據(jù)后,它需要做一個(gè)事情,把ip包的有效載荷提取出來,然后把這些載荷再作為ip包組成TCP,再向上組成最后的請(qǐng)求數(shù)據(jù)。根據(jù)請(qǐng)求數(shù)據(jù),realserver生成返回?cái)?shù)據(jù)后,光明正大返回給客戶端。
4、優(yōu)點(diǎn):和LVS-DR一樣,沒有redirector出口帶寬瓶頸。
5、缺點(diǎn):需要額外的打包和解包,有一定的開銷。
LVS配置
ipvsadm安裝
yum -y install ipvsadm?
LVS-NAT的配置
1、realserver配置要求:配置內(nèi)部私網(wǎng)地址,默認(rèn)網(wǎng)關(guān)指向調(diào)度服務(wù)器
?
2、Directer配置要求 基本配置:
調(diào)度服務(wù)器需要2塊網(wǎng)卡(一塊網(wǎng)卡對(duì)外,一塊網(wǎng)卡對(duì)內(nèi)。1塊也可以,配置子接口,對(duì)外的VIP和DIP都配置在同一網(wǎng)卡上,不過這樣會(huì)更加的降低調(diào)度器的性能,建議還是雙網(wǎng)卡)
關(guān)閉selinux和iptables,并打開包轉(zhuǎn)發(fā)功能:
setenforce 0 service iptables stopecho "1" > /proc/sys/net/ipv4/ip_forward
(為了避免不必要的麻煩,在每臺(tái)服務(wù)器上都關(guān)閉這2個(gè)服務(wù))
?
ipvsadm -A –t $VIP:$Port -s rr解釋:-A表示添加一個(gè)集群服務(wù)(可以添加多個(gè),比如添加一個(gè)web的80和一個(gè)https的443);
-t表示是tcp協(xié)議;
-s表示調(diào)度算法是輪詢(一共有10種調(diào)度算法,可以按照自己實(shí)際需要選擇)
?
ipvsadm -a –t $VIP:$Port -r $DIP:$Port -m解釋:-a表示添加一個(gè)realserver,后面跟上之前定義的集群服務(wù)的地址端口,-r表示增加具體realserver的地址,-m表示模式為NAT模式
LVS-DR的配置
1、Realserver配置要求 基本配置
首先先配置限制arp,不然等配置好地址后就產(chǎn)生地址沖突了,通過修改內(nèi)核參數(shù)來實(shí)現(xiàn)。
在linux中 ,默認(rèn)在接口上通告所有接口上IP的arp廣播,在接口上應(yīng)答所有接口上IP的arp請(qǐng)求
arp_announce 限制arp通告
限制等級(jí)
0:在接口上通告所有接口上IP的arp廣播
1:對(duì)于其它設(shè)備的arp請(qǐng)求,在接口上盡量限制廣播通告應(yīng)答(不夠嚴(yán)格)
2:只通告本接口上IP的arp廣播
arp_ignore 限制arp應(yīng)答
限制等級(jí)
0:對(duì)于其它設(shè)備 的arp請(qǐng)求,應(yīng)答所有其它接口的上IP的arp應(yīng)答
1:對(duì)于其它設(shè)備的arp請(qǐng)求,只應(yīng)答本接口上IP的arp應(yīng)答
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf//lo/arp_announceecho "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/all/arp_announce?
在realserver上的lo口配置VIP,這樣配置就限制了VIP不會(huì)在物理交換機(jī)上產(chǎn)生MAC地址表,從而避免IP沖突
ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255ifconfig eth0 $DIP up?
注意此VIP的接口的廣播地址仍然為VIP,限制其廣播,子網(wǎng)掩碼是32位,下面調(diào)度器上的配置也注意此項(xiàng)
配置特殊路由,使目標(biāo)為VIP的包的以源地址為VIP的lo口出去
route add –host $VIP dev lo:1?
Directer配置要求
配置VIP和DIP,VIP配置在物理網(wǎng)卡的子接口上
ifconfig eth0 $DIP broadcast $VIP netmask 255.255.255.0 upifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up?
配置特殊路由,目標(biāo)是VIP的包從配置了VIP的物理子接口上出去
route add –host $VIP dev eth0:1?
集群配置
ipvsadm -A –t $VIP:$Port-s rr解釋:-A表示添加一個(gè)集群服務(wù)(這里和NAT中的配置一樣)
?
ipvsadm -a –t $VIP:$Port -r $DIP:$Port-g解釋:其它和NAT也差不多,在最后的模式改為-g,即DR模式
LVS調(diào)度算法
-s 指定服務(wù)采用的算法,常用的算法參數(shù)如下:
rr 輪叫(Round Robin)
調(diào)度器通過”輪叫”調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù) 器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。
wrr 加權(quán)輪叫(Weighted Round Robin)
調(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)值。
lc 最少鏈接(Least Connections)
調(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)最少鏈接(Weighted Least Connections)
在集群系統(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)值。
lblc 基于局部性的最少鏈接(Locality-Based Least Connections)
“基于局部性的最少鏈接”調(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ù)制的基于局部性最少鏈接(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ù)器沒有超載,將請(qǐng)求發(fā)送到該服務(wù)器,若服務(wù)器超載;則按”最小連接”原則從這個(gè)集群中選出一臺(tái)服務(wù)器,將該服務(wù)器加入到服務(wù)器組中,將請(qǐng)求發(fā)送到該服務(wù)器。同時(shí),當(dāng)該服務(wù)器組有一段時(shí)間沒有被修改,將最忙的服務(wù)器從服務(wù)器組中刪除,以降低復(fù)制的程度。
dh 目標(biāo)地址散列(Destination Hashing)
“目標(biāo)地址散列”調(diào)度算法根據(jù)請(qǐng)求的目標(biāo)IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。
sh 源地址散列(Source Hashing)
“源地址散列”調(diào)度算法根據(jù)請(qǐng)求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。
?
?
總結(jié)
以上是生活随笔為你收集整理的四层负载均衡——LVS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈希表的实现(取余法)
- 下一篇: DedeCms织梦发布文章时输入Tag标