Load Balancer(負載均衡器):
Load Balancer是整個集群系統的前端,負責把客戶請求轉發到Real Server上。Load Balancer通過Ldirectord監測各Real Server的健康狀況。在Real Server不可用時把它從群中剔除,恢復時重新加入。
Backup是備份Load Balancer,當Load Balancer不可用時接替它,成為實際的Load Balancer。
Server Array(服務器群):
Server Array是一組運行實際應用服務的機器,比如WEB, Mail, FTP, DNS, Media等等。在實際應用中,Load Balancer和Backup也可以兼任Real Server的角色。以下的測試就是一台服務器既擔任了LVSserver,同時也是realserver節點.
Shared Storage(共享存儲):
Shared Storage為所有Real Server提供共享存儲空間和一致的數據內容。
Director: 前端負載均衡器即運行LVS服務可以針對web、ftp、cache、mms甚至mysql等服務做load balances。
RealServer: 后端需要負載均衡的服務器,可以為各類系統,Linux、Solaris、Aix、BSD、Windows都可,甚至Director本身也可以作為 RealServer使用.
LVS( Linux Virtual Server),Linux下的負載均衡器,支持LVS-NAT、 LVS-DR、LVS-TUNL三種不同的方式
nat用的不是很多,主要用的是DR、TUNL方式。
DR方式適合所有的RealServer同一網段下,即接在同一個交換機上.
TUNL方式就對於RealServer的位置可以任意了,完全可以跨地域、空間,只要系統支持Tunnel就可以,方便以后擴充的話直接Tunl方式即可
基礎知識介紹
1、LVS基礎及介紹
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩(目前就職於阿里)博士成立,是中國國內最早出現的自由軟件項目之一。
目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);
十種調度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
【參考資料:】
1)官方中文參考資料: http://www.linuxvirtualserver.org/zh/index.html
2)LinuxTone 相關LVS技術檔匯總: http://bbs.linuxtone.org/thread-1191-1-1.html
2、 LVS 三種IP負載均衡技術對比
三種IP負載均衡技術的優缺點歸納在下表中:
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 |
【注】 以上三種方法所能支持最大服務器數目的估計是假設調度器使用100M網卡,調度器的硬件配置與后端服務器的硬件配置相同,而且是對一般Web服務。使用更 高的硬件配置(如千兆網卡和更快的處理器)作為調度器,調度器所能調度的服務器數量會相應增加。當應用不同時,服務器的數目也會相應地改變。所以,以上數 據估計主要是為三種方法的伸縮性進行量化比較。
3、LVS目前實現的幾種調度算法
IPVS在內核中的負載均衡調度是以連接為粒度的。在HTTP協議(非持久)中,每個對象從WEB服務器上獲取都需要建立一個TCP連接,同一用戶的不同請求會被調度到不同的服務器上,所以這種細粒度的調度在一定程度上可以避免單個用戶訪問的突發性引起服務器間的負載不平衡。
在內核中的連接調度算法上,IPVS已實現了以下十種調度算法:
* 輪叫調度(Round-Robin Scheduling)
* 加權輪叫調度(Weighted Round-Robin Scheduling)
* 最小連接調度(Least-Connection Scheduling)
* 加權最小連接調度(Weighted Least-Connection Scheduling)
* 基於局部性的最少鏈接(Locality-Based Least Connections Scheduling)
* 帶復制的基於局部性最少鏈接(Locality-Based Least Connections with Replication Scheduling)
* 目標地址散列調度(Destination Hashing Scheduling)
* 源地址散列調度(Source Hashing Scheduling)
* 最短預期延時調度(Shortest Expected Delay Scheduling)
* 不排隊調度(Never Queue Scheduling)
對應: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
Ldirecotrd配置選項及ipvsadm使用參數.
ldirectord配置選項 |
ipvsadm使用的參數 |
ipvsadm -L的輸出 |
LVS轉發方法 |
gate |
-g |
Route |
LVS-DR |
ipip |
-i |
Tunnel |
LVS-TUN |
masq |
-m |
Masq |
LVS-NAT |
4、集群架構時我們應該采用什么樣的調度算法?
在一般的網絡服務(如HTTP和Mail Service等)調度中,我會使用加權最小連接調度wlc或者加權輪叫調度wrr算法。
基於局部性的最少鏈接LBLC和帶復制的基於局部性最少鏈接LBLCR主要適用於Web Cache集群。
目標地址散列調度和源地址散列調度是用靜態映射方法,可能主要適合防火牆調度。
最短預期延時調度SED和不排隊調度NQ主要是對處理時間相對比較長的網絡服務。
其實,它們的適用范圍不限於這些。我想最好參考內核中的連接調度算法的實現原理,看看那種調度方法適合你的應用。
5、LVS的ARP問題
2.4.x kernels:
Hidden Patch
arptable
iptables
2.6.x kernels: (關閉arp查詢響應請求)
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
二、基礎知識及一些要點
1、InActConn並不代表錯誤連接,它是指不活躍連接(Inactive Connections),
我們將處於TCP ESTABLISH狀態以外的連接都稱為不活躍連接,例如處於SYN_RECV狀態的連接,處於TIME_WAIT狀態的連接等。
2、用四個參數來關閉arp查詢響應請求:
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
連接數 輸入包 輸出包 輸入流量 輸出流量
4、注意事項:
1)在LVS方案中,虛擬ip地址與普通網絡接口大大不同,這點需要特別注意。
虛擬ip地址的廣播地址是它本身,子網掩碼是255.255.255.255。 為什么要這樣呢?因為有若干機器要使用同一個ip地址,
用本身做廣播地址和把子網掩碼設成4個255就不會造成ip地址沖突了,否則lvs將不能正常轉發訪問請求。
2)假如兩台VS之間使用的互備關系,那么當一台VS接管LVS服務時,可能會網絡不通,這時因為路由器的MAC緩存表里關於vip這個地址的MAC地 址還是被替換的VS的MAC,有兩種解決方法,一種是修改新VS的MAC地址,另一種是使用send_arp 命令(piranha軟件包里帶的一個小工具) 格式如下:
send_arp:
send_arp [-i dev] src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr
這個命令不一定非要在VS上執行,只+要在同一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通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地提高集群系統的伸縮性。這種方法沒有IP隧道的開銷,對集群中的真實服務器也沒有必須支持IP隧道協議的要求,但是要求調度器與真實服務器都有一塊網卡連在同一物理網段上。
6. LVS 經驗:
1). LVS調度的最小單位是“連接”。
2). 當apache的KeepAlive被設置成Off時,“連接”才能被較均衡的調度。
3). 在不指定-p參數時,LVS才真正以“連接”為單位按“權值”調度流量。
4). 在指定了-p參數時,則一個client在一定時間內,將會被調度到同一台RS。
5). 可以通過”ipvsadm ?set tcp tcpfin udp”來調整TCP和UDP的超時,讓連接淘汰得快一些。
6). 在NAT模式時,RS的PORT參數才有意義。
7). DR和TUN模式時,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 性能調優
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
1 通過NAT實現虛擬服務器(VS/NAT)
2 通過IP隧道實現虛擬服務器(VS/TUN)
3 通過直接路由實現虛擬服務器(VS/DR)
|
VS/NAT
|
VS/TUN
|
VS/DR
|
Server
|
any
|
Tuneling
|
Non-arp device
|
server number
|
low10-20
|
high100
|
high100
|
server gateway
|
loadbalancer
|
own router
|
own router
|
server network
|
private
|
lan/wan
|
lan
|