【面試虐菜】—— LVS負載均衡


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)

 

  NAT的工作原理是報文頭(目標地址、源地址和端口等)被正確改寫后,客戶相信它們連接一個IP地址,而不同IP地址的服務器組也認為它們是與客戶直接相連的。
  可以用NAT方法將不同IP地址的並行網絡服務變成在一個IP地址上的一個虛擬服務。
  客戶通過Virtual IP Address(虛擬服務的IP地址)訪問網絡服務時,請求報文到達調度器,調度器根據連接調度算法從一組真實服務器中選出一台服務器,將報文的目標地址Virtual IP Address改寫成選定服務器的地址,報文的目標端口改寫成選定服務器的相應端口,最后將修改后的報文發送給選出的服務器。同時,調度器在連接Hash表中記錄這個連接,當這個連接的下一個報文到達時,從連接Hash表中可以得到原選定服務器的地址和端口,進行同樣的改寫操作,並將報文傳給原選定的服務器。當來自真實服務器的響應報文經過調度器時,調度器將報文的源地址和源端口改為Virtual IP Address和相應的端口,再把報文發給用戶。
  在連接上引入一個狀態機,不同的報文會使得連接處於不同的狀態,不同的狀態有不同的超時值。在TCP連接中,根據標准的TCP有限狀態機進行狀態遷移;在UDP中,我們只設置一個UDP狀態。不同狀態的超時值是可以設置的,在缺省情況下,SYN狀態的超時為1分鍾,ESTABLISHED狀態的超時為15分鍾,FIN狀態的超時為1分鍾;UDP狀態的超時為5分鍾。當連接終止或超時,調度器將這個連接從連接Hash表中刪除。
 

2 通過IP隧道實現虛擬服務器(VS/TUN)

 

  大多數Internet服務都有這樣的特點:請求報文較短而響應報文往往包含大量的數據。如果能將請求和響應分開處理,即在負載調度器中只負責調度請求而響應直接返回給客戶,將極大地提高整個集群系統的吞吐量。
  調度器根據各個服務器的負載情況,動態地選擇一台服務器,將請求報文封裝在另一個IP報文中,再將封裝后的IP報文轉發給選出的服務器;服務器收到報文后,先將報文解封獲得原來目標地址為VIP的報文,服務器發現VIP地址被配置在本地的IP隧道設備上,所以就處理這個請求,然后根據路由表將響應報文直接返回給客戶。
  響應報文根據服務器的路由表直接返回給客戶,而不經過負載調度器,所以負載調度器只處於從客戶到服務器的半連接中

 

3 通過直接路由實現虛擬服務器(VS/DR)

 

  VS/DR利用大多數Internet服務的非對稱特點,負載調度器中只負責調度請求,而服務器直接將響應返回給客戶,可以極大地提高整個集群系統的吞吐量
  在VS/DR中,調度器根據各個服務器的負載情況,動態地選擇一台服務器,不修改也不封裝IP報文,而是將數據幀的MAC地址改為選出服務器的MAC地址,再將修改后的數據幀在與服務器組的局域網上發送。因為數據幀的MAC地址是選出的服務器,所以服務器肯定可以收到這個數據幀,從中可以獲得該IP報文。當服務器發現報文的目標地址VIP是在本地的網絡設備上,服務器處理這個報文,然后根據路由表將響應報文直接返回給客戶。
 
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

 


 

NAT 
    當服務器數目變多時,調度器成為瓶頸
IP Tuneling 
    術對服務器有要求,即所有的服務器必須支持“IP Tunneling”者“IPEncapsulation ”協議
DR 
    跟VS/TUN相比,這種方法沒有IP隧道的開銷,但是要求負載調度器與實際服務器都有一塊網卡連在同一物理網段上,服務器網絡設備(或者設備別名)不作ARP響應,或者能將報文重定向(Redirect)到本地的Socket端口上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM