LVS負載均衡詳解
工作模式介紹:
工作模式是配置在:real server 上
1.Virtualserver via NAT(VS-NAT) -m
優點:集羣中的物理服務器可以使用任何支持TCP/IP操作系統,物理服務器可以分配Internet的保留私有地址,只有負載均衡器需要一個合法的IP地址。
缺點:擴展性有限。當服務器節點(普通PC服務器)數據增長到20個或更多時,負載均衡器將成爲整個系統的瓶頸,因爲所有的請求包和應答包都需要經過負載均衡器再生。假使TCP包的平均長度是536字節的話,平均包再生延遲時間大約爲60us(在Pentium處理器上計算的,採用更快的處理器將使得這個延遲時間變短),負載均衡器的最大容許能力爲8.93M/s,假定每臺物理服務器的平臺容許能力爲400K/s來計算,負責均衡器能爲22臺物理服務器計算。
解決辦法:即使是是負載均衡器成爲整個系統的瓶頸,如果是這樣也有兩種方法來解決它。一種是混合處理,另一種是採用Virtual Server via IP tunneling或VirtualServer via direct routing。如果採用混合處理的方法,將需要許多同屬單一的RR DNS域。你採用Virtual Server via IP tunneling或VirtualServer via direct routing以獲得更好的可擴展性。也可以嵌套使用負載均衡器,在最前端的是VS-Tunneling或VS-Drouting的負載均衡器,然後後面採用VS-NAT的負載均衡器。
2.Virtualserver via IP tunneling(VS-TUN) -i
我們發現,許多Internet服務(例如WEB服務器)的請求包很短小,而應答包通常很大。
優點:負載均衡器只負責將請求包分發給物理服務器,而物理服務器將應答包直接發給用戶。所以,負載均衡器能處理很巨大的請求量,這種方式,一臺負載均衡能爲超過100臺的物理服務器服務,負載均衡器不再是系統的瓶頸。使用VS-TUN方式,如果你的負載均衡器擁有100M的全雙工網卡的話,就能使得整個Virtual Server能達到1G的吞吐量。
缺點:但是,這種方式需要所有的服務器支持"IP Tunneling"(IPEncapsulation)協議,我僅在Linux系統上實現了這個,如果你能讓其它操作系統支持,還在探索之中。
3.VirtualServer via Direct Routing(VS-DR) 常用 -g
優點:和VS-TUN一樣,負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現方式不需要隧道結構,因此可以使用大多數操作系統做爲物理服務器,其中包括:Linux、Solaris 、FreeBSD、windows、IRIX 6.5;HPUX11等。
不足:要求負載均衡器的網卡必須與物理網卡在一個物理段上。
三種IP負載均衡技術的優缺點比較:
雜項 VS/NAT VS/TUN VS/DR
服務器操作系統 任意 支持隧道 多數(支持Non-arp )
服務器網絡 私有網絡 局域網/廣域網 局域網
服務器數目(100M網絡) 10-20 100 多(100)
服務器網關 負載均衡器 自己的路由 自己的路由
效率 一般 高 最高
管理集羣服務中的RS
添加:-a -t|u|f service-address -rserver-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定義好的某集羣服務
-t:TCP協議的集羣
-u: UDP協議的集羣
-f:FWM: 防火牆標記
-r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT實現端口映射;
[-g|i|m]:LVS類型
-g:DR
-i:TUN
-m:NAT
[-wweight]: 定義服務器權重
修改:-e
刪除:-d -t|u|fservice-address -r server-address
配置DR模型
#ipvsadm -a -t 192.168.10.120:80 -r 192.168.10.243 -g -w [權重數]
# Route add –host 192.168.10.120 dev lo:0
#ipvsadm -a -t 172.168.10.120:80 -r 192.168.10.244 –g
# Route add –host 192.168.10.120 dev lo:0
查看
-L|l
-n:數字格式顯示主機地址和端口
--stats:統計數據
--rate:速率
--timeout:顯示tcp、tcpfin和udp的會話超時時長
-c:顯示當前的ipvs連接狀況
刪除所有集羣服務
-C:清空ipvs規則
保存規則
-S
#ipvsadm -S > /path/to/somefile
載入此前的規則:
-R
#ipvsadm -R < /path/form/somefile
調度算法介紹:
調度算法是配置在:Director上的
類型 | 算法 | 說明 |
靜態方法 | RR | round-robin, 輪詢; |
WRR | weighted round-robin, 加權輪詢;Overhead=conn/weight | |
SH | Source ip Hashing,源地址哈希;把來自同一個地址請求,統統定向至此前選定的RS; | |
DH | Destination ip Hashing, 目標地址哈希;把訪問同一個目標地址的請求,統統定向至此前選定的某RS; | |
動態方法 | LC | least connection:最小連接,Overhead=Active*256+Inactive |
WLC | weighted least connection:加權最小連接,Overhead=(Active*256+Inactive)/weight;默認的調度算法 (權重越大連接數越多) | |
SED | Shorted Expection Delay:最短期望延遲,Overhead=(Active+1)*256/weight | |
NQ | Never Queue:永不排序 | |
LBLC | Local-Based Least Connection,基於本地的最小連接:動態方式的DH算法 | |
LBLCR | Replicated LBLC:帶複製的LBLCR |
實例命令:
配置Director 上的調速算法和添加Director主機
添加集羣服務,這裏使用rr(輪詢)調度算法 默認是WLC算法
ipvsadm -A -t 192.168.10.120:80 -s rr
1.1DR模式
圖中1.1,客戶端發送的請求會由路由器和交換機轉發後直接達到director。再由director調度給指定的real server ,最後由real server直接響應給客戶端而不經過director,在此架構中director和real server的網絡架構是此類型的重點。所以,配置DR類型一定要注意以下兩點:
(1) 各RS要直接響應Client,因此,各RS均得配置VIP;但僅能夠讓Director上的VIP能夠與本地路由直接通信;
(2) Director不會拆除或修改請求報文的IP首部,而是通過封閉新的幀首部(源MAC爲Director的MAC,目標MAC爲挑選出的RS的MAC)完成調度。
要完成上述的要求,着實很難,因爲RS和DR都有VIP,而請求進入時必須最先發送給DR,所以,在DR類型中,首先通過ARP廣播確認DR主機,其他RS主機不響應,這就確定了哪一個是DR主機。
默認方法:wlc
ipvsadm:
管理集羣服務Director:
添加:-A -t|u|fservice-address [-s scheduler]
-t:TCP協議的集羣
-u:UDP協議的集羣
-s: 使用的調度算法:
有這樣幾個選項 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
默認的調度算法是: wlc
service-address: IP:PORT
-f:FWM: 防火牆標記
service-address:Mark Number
修改:-E
刪除:-D -t|u|fservice-address
#ipvsadm -A -t 172.16.10.120:80 -s rr
但是在linux主機中,IP地址不屬於網卡而是屬於內核,就是說無論一個linux主機有多少個IP地址,它在接入的各個網絡中都會公佈它擁有的所有地址,這就給ARP廣播的響應制造了困難,所以就需要修改內核參數來保證router發出ARP廣播時,DR會響應RS不予響應,這裏所說的內核參數分別爲:
#arp_announce:定義arp通知級別;
0:默認級別,在各個網絡中通告本機所含有的所有地址
1:儘量不在各個網絡中通告本機中含有的不屬於該網絡的地址
2:不在各個網絡中通告本機中含有的不屬於該網絡的地址
#arp_ignore:定義arp忽略arp請求或arp通告的級別;
0:(默認值): 迴應任何網絡接口上對任何本地IP地址的arp查詢請求
1:只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求
2:只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內
3:不迴應該網絡界面的arp請求,而只對設置的唯一和連接地址做出迴應
4-7:保留未使用
8:不迴應所有(本地地址)的arp查詢
命令如下:real server 上使用
sysctl -w net.ipv4.conf.eth0.arp_announce=2
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.eth0.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
按照此圖,配置DR服務步驟:
# Ifconfigeth0 192.168.10.245 up
# Ifconfig eth0:0 192.168.10.120netmask255.255.255.255 broadcast 192.168.10.120 up
# Routeadd –host 192.168.10.120 deveth0:0
2、配置RealServer
# Ifconfigeth0 192.168.10.243 up
# Ifconfiglo:0 192.168.10.120 netmask 255.255.255.255broadcast 192.168.10.120 up
# Route add –host 192.168.10.120 dev lo:0
sysctl -w net.ipv4.conf.eth0.arp_announce=2
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.eth0.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
# Ifconfigeth0 192.168.10.244 up
# Ifconfiglo:0 192.168.10.120 netmask 255.255.255.255broadcast 192.168.10.120 up
# Routeadd –host 192.168.10.120 dev lo:0
sysctl -w net.ipv4.conf.eth0.arp_announce=2
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.eth0.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
3、配置調度模式和調度計算機服務類型:
在Director上執行如下命令:
# Ipvsadm –A – t 192.168.10.120:80 –s rr
-A:添加
-t:tcp協議
-s:選擇調度模式(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, 默認wlc)
# Ipvsadm –a – t 192.168.10.120:80 –r 172.16.50.21 –g –w1
-a: 添加
-t:tcp協議
-r:real server 服務器IP
-g:選擇工作模式(-g:DR ; -i:TUN ; -m:NAT)
-w:加權重
# Ipvsadm –a – t 192.168.10.120:80 –r 172.16.50.31 –g –w2
這樣就完成了同網段內DR類型的負載均衡配置。