LVS的三種工做模式
LVS-NAT:
LVS-NAT方式的思路很簡單,它利用調度服務器實施網絡層數據欺騙,它把客戶端發送到調度服務器的數據IP包的目標地址進行了替換。
LVS-DR:
這個方法的思路是實施數據鏈路層數據欺騙,修改網絡幀數據的Mac地址。
LVS-TUN:
這個方法是爲了突破LVS-DR同一網段內的限制所提出來的。它不作任何欺騙,而是光明正大的交流,在網絡層進行了二次包裝前端
各類模式的優缺點mysql
VS/NAT的優缺點
<1>優勢:
對後端的操做系統沒有要求;
只須要一個IP地址配置在調度器上,服務器組能夠用私有IP地址;
支持端口映射;
<2>缺點:
請求和響應都須要經過LB,伸縮能力有限(通常後面能鏈接10臺左右服務器)
須要服務器和LB在同一個局域網中;
須要將服務器的默認網關設置爲LB; linux
VS/TUN的優缺點
<1>優勢:
不須要調度應答報文,負載能力強;
服務器和調度器能夠不在同一個VLAN中;
支持廣域負載均衡;
<2>缺點:
全部的服務器必須支持「IP Tunneling」協議,需安裝內核模塊,安裝複雜;
創建IP隧道的開銷大;
服務器須要聯通外網,風險較大;
不支持端口映射; 算法
VS/DR的優缺點
<1>優勢:
與TUN相比,沒有IP隧道的開銷,性能較高;
<2>缺點:
要求LB和服務器都有一塊網卡連在同一個物理網段中;
不支持端口映射; sql
使用場景
VS/NAT:小併發的實驗性應用、mysql集羣;
VS/TUN:廣域網負載;
VS/DR:大衆方式;
vim
LVS的調度算法有十種,其中靜態算法4種,動態算法6種。後端
靜態算法:不考慮後端服務器的鏈接狀況和負載狀況,只根據算法進行調度。bash
1.RR(輪叫調度 round robin)服務器
調度器經過」輪叫」調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。網絡
2.WRR(加權輪叫調度 Weight RR)
調度器經過「加權輪叫」調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
3.DH 目標地址散列調度(Destination Hash)
根據請求的目標IP地址,做爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
4.SH 源地址散列調度(Source Hash)
源地址散列」調度算法根據請求的源IP地址,做爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
動態算法:前端的調度器會根據後端真實服務器的實際鏈接狀況來分配請求
1.LC 最少連接
調度器經過」最少鏈接」調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用」最小鏈接」調度算法能夠較好地均衡負載。
2.WLC 加權最少連接
在集羣系統中的服務器性能差別較大的狀況下,調度器採用「加權最少連接」調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
3.SED 最短延遲調度(Shortest Expected Delay)
在WLC上改進,由於非活躍連接對服務器形成的負載並不高,所以此算法再也不考慮非活動狀態,使用Overhead =(活躍連接數+1)/權重。得出數值最小的接受下一個前端發來的請求。
4..NQ 永不排隊/最少隊列調度(Never Queue Scheduling NQ)
無需隊列,若是有 realserver=0的服務器,則直接把前端的請求發給他,而不通過sed算法。這樣就保證了不會有服務器是空間的。假如一臺服務器有不少非活動連接,假如這些連接是dns經過udp創建起來的,那實質上他實際上是沒什麼負載的,可是在NQ下面則是不會將請求發往該服務器,這樣有可能會形成資源的浪費。而假如這些連接是經過http創建起來的,就要考慮非活動連接對服務器帶來的壓力。
5.. LBLC:基於局部性的最少連接(locality-Based Least Connections)
目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,則將請求發往該服務器,若服務器不存在或超載,則按照最少連接原則選出一臺鏈接數最少的服務器,並將請求發往給它。
6. LBLCR:帶複製的基於局部性最少鏈接(Locality-Based Least Connections with Replication)
目前主要用於Cache集羣系統。與LBLC不一樣的是,LBLCR是將目標地址與服務器組創建關係,根據最小連接原則選出服務器,假如沒有超載,則把請求發往給該服務器。假如超載,則再在服務器集羣中根據最小連接原則選出服務器,並將請求發往給該服務器。
LVS/DR模式配置方式
關閉selinux
setenforce 0
防火牆開放端口
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
配置調度服務器
加載ip_vs模塊
modprobe ip_vs
查看相關信息
cat /proc/net/ip_vs
安裝ipvsadm
yum -y install ipvsadm
在負載均衡服務器上轉發編輯腳本
#!/bin/bash
#
ifconfig ens33:0 172.16.1.189 broadcast 172.16.1.189 netmask 255.255.255.255 up #添加虛擬地址的接口
route add -host 172.16.1.189 dev ens33:0 #給ens33:0添加路由
ipvsadm -C #清除內核虛擬服務器表中的全部記錄
ipvsadm -A -t 172.16.1.189:80 -s wlc #建立虛擬服務器
ipvsadm -a -t 172.16.1.189:80 -r 172.16.1.11:80 -g #添加服務器節點
ipvsadm -a -t 172.16.1.189:80 -r 172.16.1.12:80 -g #添加服務器節點
ipvsadm -a -t 172.16.1.189:80 -r 172.16.1.13:80 -g #添加服務器節點
ipvsadm -Ln #查看節點狀態,加個「-n」將以數字形式顯示地址、端口信息
//選項註釋:
"-A"表示添加虛擬服務器,
"-a"表示添加真實服務器
"-t"用來指定VIP地址及TCP端口
"-r"用來指定RIP地址及TCP端口
"-s"用來指定負載調度算法——rr(輪詢)、wrr(加權輪詢)、lc(最少鏈接)、wlc(加權最少鏈接)
"-m"表示使用NAT羣集模式("-g"是DR模式,"-i"是TUN模式)
查看網卡是否已建立虛擬接口
ifconfig
在節點機器上編輯轉發腳本
#!/bin/bash
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
ifconfig lo:0 172.16.1.189 broadcast 172.16.1.189 netmask 255.255.255.255 up #在lo上配置虛擬接口
route add -host 172.16.1.189 dev lo:0 #配置虛擬接口的路由
sysctl -p &>/dev/null
查看網卡是否已經建立虛擬接口
Ifconfig
測試
在除了LVS集羣的機器上訪問,切記不可在LVS環境本地進行測試,會訪問不到。例如這裏的一臺調度器和三臺後端服務器都不能做爲測試環境。
for n in `seq 10000`;do curl 172.16.1.189:/test/;sleep 1;done
得出下圖證實負載已經正常運行
LVS/NAT模式配置方式
搭建環境
爲了防止selinux和iptables對實驗的影響,咱們在實驗以前先將全部selinux策略臨時調爲0,將iptables服務關閉
因爲調度器上須要轉發請求,因此須要在內核中開啓轉發功能:
在調度器上,執行以下步驟
vim /etc/sysctl.conf #修改這一行,將0改成1,表示開啓轉發功能
net.ipv4.ip_forward = 1
sysctl -p #讀取配置文件,顯示如下內容證實修改爲功
net.ipv4.ip_forward = 1
添加調度器
在調度器上,執行如下步驟
yum -y install ipvsadm #安裝ipvaadm工具
添加節點
在調度器上,執行如下步驟
ipvsadm -A -t 192.168.1.89:80 -s rr #設置調度器,調度算法爲rr(輪詢)
ipvsadm -a -t 192.168.1.89:80 -r 172.16.1.7:80 -m
ipvsadm -a -t 192.168.1.89:80 -r 172.16.1.8:80 -m
ipvsadm -a -t 192.168.1.89:80 -r 172.16.1.9:80 -m
查看狀態
ipvsadm -Ln
P Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.89:80 rr
-> 172.16.1.7:80 Masq 1 0 2
-> 172.16.1.8:80 Masq 1 0 2
-> 172.16.1.9:80 Masq 1 0 3
測試
curl 192.168.1.89