一,概述:
實驗環境都是Ubuntu 14,核心已經有lvs模組
負載機器:10.10.2.176 (該機器需要安裝ipvsadm),需要在該機上建立一個virtual server,其ip是10.10.2.177
真實伺服器1:10.10.2.190
真實伺服器2:10.10.2.191
真實伺服器3:10.10.2.192
當請求通過virtual server時,會直接轉寄到真實機器上進行處理
二,步驟
1,在10.10.2.176機器上,安裝ipvsadm:
sudo apt-get install ipvsadm
2,在10.10.2.176機器上,編寫如下指令碼,進行配置,指令碼為wsdc_lvs.sh:
#!/bin/bash# FOR SERVER PORTAL #vip=10.10.2.177rs1=10.10.2.190rs2=10.10.2.191rs3=10.10.2.192/sbin/ifconfig eth0:0 $vip netmask 255.255.255.0 broadcast $vip/sbin/route add -host $vip dev eth0:0echo "1">/proc/sys/net/ipv4/ip_forward/sbin/ipvsadm -C#/sbin/ipvsadm -A -t $vip:80 -s rr#/sbin/ipvsadm -A -t $vip:8080 -s rr/sbin/ipvsadm -A -t $vip:8111 -s rr/sbin/ipvsadm -a -t $vip:8111 -r $rs1:8111 -g/sbin/ipvsadm -a -t $vip:8111 -r $rs2:8111 -g/sbin/ipvsadm -a -t $vip:8111 -r $rs3:8111 -gipvsadm
3,在10.10.2.176機器上回合組態指令碼
sudo chmod a+x wsdc_lvs.shsudo ./wsdc_lvs.sh
4,在三台真實伺服器上,編寫如下指令碼:
#!/bin/bashvip=10.10.2.177/sbin/ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip/sbin/route add -host $vip dev lo:0echo "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/sbin/sysctl -p
sudo chmod a+x wsdc_lvs.shsudo ./wsdc_lvs.sh
三,測試
自己編寫基於自訂協議的程式,進行測試即可。
四、附錄
附錄 lvs參數簡介
部分參數如下:man ipvsadm可以全部看到。
-A, --add-service Add a virtual service
-E, --edit-service Edit a virtual service
-D, --delete-service Delete a virtual service
-C, --clear Clear the virtual server table.
-R, --restore
-S, --save
-a, --add-server Add a real server to a virtual service
-e, --edit-server Edit a real server in a virtual service
-d, --delete-server Remove a real server from a virtual service
-L, -l, --list List the virtual server table if no argument is specified
-t, --tcp-service Use TCP service.
-u, --udp-service Use UDP service
-s 指定服務採用的演算法,常用的演算法參數如下:
rr 輪叫(Round Robin)
調度器通過"輪叫"調度演算法將外部請求按順序輪流分配到叢集中的真實伺服器上,它均等地對待每一台服務 器,而不管伺服器上實際的串連數和系統負載。
wrr 加權輪叫(Weighted Round Robin)
調度器通過"加權輪叫"調度演算法根據真實伺服器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的伺服器處理更多的訪問流量。調度器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。
lc 最少連結(Least Connections)
調度器通過"最少串連"調度演算法動態地將網路請求調度到已建立的連結數最少的伺服器上。如果叢集系統的真實伺服器具有相近的系統效能,採用"最小串連"調度演算法可以較好地均衡負載。
wlc 加權最少連結(Weighted Least Connections)
在叢集系統中的伺服器效能差異較大的情況下,調度器採用"加權最少連結"調度演算法最佳化負載平衡效能,具有較高權值的伺服器將承受較大比例的活動串連負載。調度器可以自動問詢真實伺服器的負載情況,並動態地調整其權值。
lblc 基於局部性的最少連結(Locality-Based Least Connections)
"基於局部性的最少連結" 調度演算法是針對目標IP地址的負載平衡,目前主要用於Cache叢集系統。該演算法根據請求的目標IP地址找出該目標IP地址最近使用的伺服器,若該伺服器是可用的且沒有超載,將請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處於一半的工作負載,則用"最少連結"的原則選出一個可用的伺服器,將請求發送到該伺服器。
lblcr 帶複製的基於局部性最少連結(Locality-Based Least Connections with Replication)
"帶複製的基於局部性最少連結"調度演算法也是針對目標IP地址的負載平衡,目前主要用於Cache叢集系統。它與LBLC演算法的不同之處是它要維護從一個目標IP地址到一組伺服器的映射,而LBLC演算法維護從一個目標IP地址到一台伺服器的映射。該演算法根據請求的目標IP地址找出該目標IP地址對應的伺服器組,按"最小串連"原則從伺服器組中選出一台伺服器,若伺服器沒有超載,將請求發送到該伺服器,若伺服器超載;則按"最小串連"原則從這個叢集中選出一台伺服器,將該伺服器加入到伺服器組中,將請求發送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,以降低複製的程度。
dh 目標地址散列(Destination Hashing)
"目標地址散列"調度演算法根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則返回空。
sh 源地址散列(Source Hashing)
"源地址散列"調度演算法根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則返回空。
-a 表示往一個服務內增加一個real server
-r 指定real server的IP地址
-w 表示權重
-g 表示使用DR方式,-m表示NAT方式,-i表示tunneling方式。