一、基本術(shù)語:
Load Balancer(負(fù)載均衡器):
Load Balancer是整個(gè)集群系統(tǒng)的前端,負(fù)責(zé)把客戶請(qǐng)求轉(zhuǎn)發(fā)到Real Server上。
Backup是備份Load Balancer,當(dāng)Load Balancer不可用時(shí)接替它,成為實(shí)際的Load Balancer。
Load Balancer通過Ldirectord監(jiān)測(cè)各Real Server的健康狀況。在Real Server不可用時(shí)把它從群中剔除,恢復(fù)時(shí)重新加入。
Server Array(服務(wù)器群):
Server Array是一組運(yùn)行實(shí)際應(yīng)用服務(wù)的機(jī)器,比如WEB, Mail, FTP, DNS, Media等等。在實(shí)際應(yīng)用中,Load Balancer和Backup也可以兼任Real Server的角色。以下的測(cè)試就是一臺(tái)服務(wù)器既擔(dān)任了LVSserver,同時(shí)也是realserver節(jié)點(diǎn).
Shared Storage(共享存儲(chǔ)):
Shared Storage為所有Real Server提供共享存儲(chǔ)空間和一致的數(shù)據(jù)內(nèi)容。
Director: 前端負(fù)載均衡器即運(yùn)行LVS服務(wù)可以針對(duì)web、ftp、cache、mms甚至mysql等服務(wù)做load balances。
RealServer: 后端需要負(fù)載均衡的服務(wù)器,可以為各類系統(tǒng),Linux、Solaris、Aix、BSD、Windows都可,甚至Director本身也可以作為 RealServer使用.
LVS( Linux Virtual Server),Linux下的負(fù)載均衡器,支持LVS-NAT、 LVS-DR、LVS-TUNL三種不同的方式,nat用的不是很多,主要用的是DR、TUNL方式。DR方式適合所有的RealServer同一網(wǎng)段下,即接在同一個(gè)交換機(jī)上.
TUNL方式就對(duì)于RealServer的位置可以任意了,完全可以跨地域、空間,只要系統(tǒng)支持Tunnel就可以,方便以后擴(kuò)充的話直接Tunl方式即可
基礎(chǔ)知識(shí)介紹:
1、LVS基礎(chǔ)及介紹
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng)。本項(xiàng)目在1998年5月由章文嵩博士成立,是中國國內(nèi)最早出現(xiàn)的自由軟件項(xiàng)目之一。
目前有三種IP負(fù)載均衡技術(shù)(VS/NAT、VS/TUN和VS/DR); 十種調(diào)度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
【參考資料:】
1)官方中文參考資料: http://www.linuxvirtualserver.org/zh/index.html
[LVS項(xiàng)目介紹] [LVS集群的體系結(jié)構(gòu)] [LVS集群中的IP負(fù)載均衡技術(shù)]
[LVS集群的負(fù)載調(diào)度]
2)LinuxTone 相關(guān)LVS技術(shù)檔匯總: http://bbs.linuxtone.org/thread-1191-1-1.html
2、 LVS 三種IP負(fù)載均衡技術(shù)對(duì)比:
三種IP負(fù)載均衡技術(shù)的優(yōu)缺點(diǎn)歸納在下表中:
VS/NAT VS/TUN VS/DR
Server any Tunneling Non-arp device
server network private LAN/WAN LAN
server number low (10~20) High (100) High (100)
server gateway load balancer own router Own router
【注】以上三種方法所能支持最大服務(wù)器數(shù)目的估計(jì)是假設(shè)調(diào)度器使用100M網(wǎng)卡,調(diào)度器的硬件配置與后端服務(wù)器的硬件配置相同,而且是對(duì)一般Web服務(wù)。使用更高的硬件配置(如千兆網(wǎng)卡和更快的處理器)作為調(diào)度器,調(diào)度器所能調(diào)度的服務(wù)器數(shù)量會(huì)相應(yīng)增加。當(dāng)應(yīng)用不同時(shí),服務(wù)器的數(shù)目也會(huì)相應(yīng)地改變。所以,以上數(shù)據(jù)估計(jì)主要是為三種方法的伸縮性進(jìn)行量化比較。
3、LVS目前實(shí)現(xiàn)的幾種調(diào)度算法
IPVS在內(nèi)核中的負(fù)載均衡調(diào)度是以連接為粒度的。在HTTP協(xié)議(非持久)中,每個(gè)對(duì)象從WEB服務(wù)器上獲取都需要建立一個(gè)TCP連接,同一用戶的不同請(qǐng)求會(huì)被調(diào)度到不同的服務(wù)器上,所以這種細(xì)粒度的調(diào)度在一定程度上可以避免單個(gè)用戶訪問的突發(fā)性引起服務(wù)器間的負(fù)載不平衡。
在內(nèi)核中的連接調(diào)度算法上,IPVS已實(shí)現(xiàn)了以下十種調(diào)度算法:
* 輪叫調(diào)度(Round-Robin Scheduling)
* 加權(quán)輪叫調(diào)度(Weighted Round-Robin Scheduling)
* 最小連接調(diào)度(Least-Connection Scheduling)
* 加權(quán)最小連接調(diào)度(Weighted Least-Connection Scheduling)
* 基于局部性的最少鏈接(Locality-Based Least Connections Scheduling)
* 帶復(fù)制的基于局部性最少鏈接(Locality-Based Least Connections with Replication Scheduling)
* 目標(biāo)地址散列調(diào)度(Destination Hashing Scheduling)
* 源地址散列調(diào)度(Source Hashing Scheduling)
* 最短預(yù)期延時(shí)調(diào)度(Shortest Expected Delay Scheduling)
* 不排隊(duì)調(diào)度(Never Queue Scheduling)
對(duì)應(yīng): rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
Ldirecotrd配置選項(xiàng)及ipvsadm使用參數(shù).
ldirectord配置選項(xiàng)
ipvsadm使用的參數(shù)
ipvsadm -L的輸出
LVS轉(zhuǎn)發(fā)方法
gate
-g
Route
LVS-DR
ipip
-i
Tunnel
LVS-TUN
masq
-m
Masq
LVS-NAT
4、集群架構(gòu)時(shí)我們應(yīng)該采用什么樣的調(diào)度算法?
在一般的網(wǎng)絡(luò)服務(wù)(如HTTP和Mail Service等)調(diào)度中,我會(huì)使用加權(quán)最小連接調(diào)度wlc或者加權(quán)輪叫調(diào)度wrr算法。
基于局部性的最少鏈接LBLC和帶復(fù)制的基于局部性最少鏈接LBLCR主要適用于Web Cache集群。
目標(biāo)地址散列調(diào)度和源地址散列調(diào)度是用靜態(tài)映射方法,可能主要適合防火墻調(diào)度。
最短預(yù)期延時(shí)調(diào)度SED和不排隊(duì)調(diào)度NQ主要是對(duì)處理時(shí)間相對(duì)比較長的網(wǎng)絡(luò)服務(wù)。
其實(shí),它們的適用范圍不限于這些。我想最好參考內(nèi)核中的連接調(diào)度算法的實(shí)現(xiàn)原理,看看那種調(diào)度方法適合你的應(yīng)用。
5、LVS的ARP問題
2.4.x kernels:
Hidden Patch
arptable
iptables
2.6.x kernels: (關(guān)閉arp查詢響應(yīng)請(qǐng)求)
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
arping tools
二、基礎(chǔ)知識(shí)及一些要點(diǎn).
1、InActConn并不代表錯(cuò)誤連接,它是指不活躍連接(Inactive Connections),
我們將處于TCP ESTABLISH狀態(tài)以外的連接都稱為不活躍連接,例如處于SYN_RECV狀態(tài)的連接,處于TIME_WAIT狀態(tài)的連接等。
2、用四個(gè)參數(shù)來關(guān)閉arp查詢響應(yīng)請(qǐng)求:
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
3、ipvsadm -L -n –stats
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
連接數(shù) 輸入包 輸出包 輸入流量 輸出流量
4、注意事項(xiàng):
1)在LVS方案中,虛擬ip地址與普通網(wǎng)絡(luò)接口大大不同,這點(diǎn)需要特別注意。
虛擬ip地址的廣播地址是它本身,子網(wǎng)掩碼是255.255.255.255。 為什么要這樣呢?因?yàn)橛腥舾蓹C(jī)器要使用同一個(gè)ip地址,
用本身做廣播地址和把子網(wǎng)掩碼設(shè)成4個(gè)255就不會(huì)造成ip地址沖突了,否則lvs將不能正常轉(zhuǎn)發(fā)訪問請(qǐng)求。
2)假如兩臺(tái)VS之間使用的互備關(guān)系,那么當(dāng)一臺(tái)VS接管LVS服務(wù)時(shí),可能會(huì)網(wǎng)絡(luò)不通,這時(shí)因?yàn)槁酚善鞯腗AC緩存表里關(guān)于vip這個(gè)地址的MAC地 址還是被替換的VS的MAC,有兩種解決方法,一種是修改新VS的MAC地址,另一種是使用send_arp 命令(piranha軟件包里帶的一個(gè)小工具) 格式如下:
send_arp:
send_arp [-i dev] src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr
這個(gè)命令不一定非要在VS上執(zhí)行,只+要在同一VLAN即可。
/sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW
5.Virtual Server via Direct Routing(VS/DR)
VS/DR通過改寫請(qǐng)求報(bào)文的MAC地址,將請(qǐng)求發(fā)送到真實(shí)服務(wù)器,而真實(shí)服務(wù)器將響應(yīng)直接返回給客戶。同VS/TUN技術(shù)一樣,VS/DR技術(shù)可極大地提高集群系統(tǒng)的伸縮性。這種方法沒有IP隧道的開銷,對(duì)集群中的真實(shí)服務(wù)器也沒有必須支持IP隧道協(xié)議的要求,但是要求調(diào)度器與真實(shí)服務(wù)器都有一塊網(wǎng)卡連在同一物理網(wǎng)段上。
6. LVS 經(jīng)驗(yàn):
1). LVS調(diào)度的最小單位是“連接”。
2). 當(dāng)apache的KeepAlive被設(shè)置成Off時(shí),“連接”才能被較均衡的調(diào)度。
3). 在不指定-p參數(shù)時(shí),LVS才真正以“連接”為單位按“權(quán)值”調(diào)度流量。
4). 在指定了-p參數(shù)時(shí),則一個(gè)client在一定時(shí)間內(nèi),將會(huì)被調(diào)度到同一臺(tái)RS。
5). 可以通過”ipvsadm –set tcp tcpfin udp”來調(diào)整TCP和UDP的超時(shí),讓連接淘汰得快一些。
6). 在NAT模式時(shí),RS的PORT參數(shù)才有意義。
7). DR和TUN模式時(shí),InActConn 是沒有意義的(Thus the count in the InActConn column for LVS-DR, LVS-Tun is
inferred rather than real.)
/sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW
三、LVS 性能調(diào)優(yōu)
Least services in System or Compile kernel.
Performace Tuning base LVS:
LVS self tuning( ipvsadm Timeout (tcp tcpfin udp)).
ipvsadm -Ln –timeout
Timeout (tcp tcpfin udp): 900 120 300
ipvsadm –set tcp tcpfin udp
Improving TCP/IP performance
net.ipv4.tcp_tw_recyle=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_max_syn_backlog=8192
net.ipv4.tcp_keepalive_time=1800
net.ipv4.tcp_fin_timeout=30
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.netdev_max_backlog=3000
項(xiàng)目實(shí)施案例及經(jīng)驗(yàn)分享:
1、機(jī)房無法實(shí)時(shí)刷新MAC,LVS+Heartbeat方案無法正常隨機(jī)切換IP?
假如兩臺(tái)VS之間使用的互備關(guān)系,那么當(dāng)一臺(tái)VS接管LVS服務(wù)時(shí),可能會(huì)網(wǎng)絡(luò)不通,這時(shí)因?yàn)槁酚善鞯腗AC緩存表里無法及時(shí)刷新MAC.關(guān)于vip這個(gè)地址的MAC地址還是替換的VS的MAC,有兩種解決方法,一種是修改新VS的MAC地址,另一種是使用send_arp /arpiing命令.
以arping命令為例.
/sbin/arping -I eth0 -c 3 -s ${vip}${gateway_ip} > /dev/null 2>&1
Eg:
/sbin/arping -I eth0 -c 3 -s 192.168.1.6192.168.1.1
【注】07年部署某大型商業(yè)網(wǎng)站項(xiàng)目時(shí),263機(jī)房遇到此問題,最好讓機(jī)房調(diào)整路由
MAC緩存表的刷新頻率;同朋公司移動(dòng)機(jī)房實(shí)施相關(guān)項(xiàng)目時(shí)發(fā)現(xiàn)切換IP后還是無法
訪問VIP,最后利用上面的arping一個(gè)命令搞定.
【附】如果采用Piranha/keealived方案切換的時(shí)候會(huì)內(nèi)置自動(dòng)發(fā)送send_arp命令. UltraMonkey方案經(jīng)測(cè)試也會(huì)自動(dòng)發(fā)送此命令.如用heartbeat方案,需要寫一個(gè)send_arp或者arping相關(guān)的腳本當(dāng)作 heartbeat一個(gè)資源切換服務(wù)的時(shí)候自動(dòng)發(fā)送
相關(guān)命令腳本.
2、某臺(tái)機(jī)器down掉以后,IPVS列表中權(quán)值已經(jīng)置0了,為什么還輪詢到這臺(tái)機(jī)器上?
配置 ldirectord.conf
quiescent=no或 echo 1 >/proc/sys/net/ipv4/vs/expire_nodest_conn
【注】經(jīng)如上設(shè)置某臺(tái)Realserver服務(wù)down掉以后如何從IPVS列表自動(dòng)中刪除恢復(fù)時(shí)如何自動(dòng)添加.
3、為什么做壓力測(cè)試的時(shí)候,LVS不能負(fù)載均衡多部分連接只到某一臺(tái)機(jī)器上?
難道是LVS不能實(shí)現(xiàn)真正的負(fù)載均衡?
這和LVS腳本里指定-p參數(shù)有關(guān),如果指定了一個(gè)client在一定的時(shí)間內(nèi),將會(huì)被調(diào)度到同一臺(tái)RS上。所以你在從來源來做壓力測(cè)試的時(shí)候大部分連接會(huì)調(diào)度到同一臺(tái)機(jī)器上,這樣就出現(xiàn)了負(fù)載不均衡的狀況。很多人經(jīng)常問我這個(gè)問題,仍后我叫他們多從幾個(gè)點(diǎn)去同時(shí)向LVS服務(wù)器做壓力測(cè)試的時(shí)候就發(fā)現(xiàn)負(fù)載很均衡了。
作者:NetSeek http://www.linuxtone.org
聯(lián)系客服