負載均衡-四層負載均衡:LVSmysql
以前也寫過相關的文章,可是寫的太爛了。。。本身都不也敢直視。。。linux
如今有空決定從新全面學習了下LVS.總結出本博客。好了,其餘的很少說了,咱們開始吧。算法
1、負載均衡sql
負載均衡包括以下:後端
一、硬件負載均衡:centos
F5,BIG IP服務器
Citrix,Netscaler網絡
A10session
二、軟件負載均衡:負載均衡
四層:
LVS
七層:反向代理
Nginx
代理的協議有:http smtp pop3 imap
HAProxy
代理的協議有:http,tcp(mysql,smtp)
2、LVS的介紹
一、簡介:
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。
-----------百度百科。
LVS是一個四層的負載均衡軟件,工做在內核空間。性能很是強大,而所支持的特性不多。工做在INPUT鏈上,因此lvs與iptables在INPUT鏈不能同時使用。
二、組成:
有兩部分:
ipvsadm lvs規則管理
ipvs 是內核程序
ipvs在linux 2.6內核全部版本中已存在。只須要安裝ipvsadm就能夠了。
安裝命令:yum -y install ipvsadm
3、LVS的三種模型
NAT:地址轉換
DR:直接路由
TUN:隧道
三種模型的特性:
一、NAT
後端的集羣節點也就是real server 必須與LVS所在的服務器在同一個IP網絡中;
後端的real server所使用的ip一般是私有地址,僅用於各集羣節點間的通訊;
LVS服務器位於client和real server之間,並負責處理進出的全部通訊;
real server必須將網關指向DIP;
支持端口映射;
real server可使用任意OS;
較大規模應該場景中,director易成爲系統瓶頸;
二、DR
集羣節點real server 跟LVS必須在同一個物理網絡中;
real server 可使用公網地址,實現便捷的遠程管理和監控;
LVS僅負責處理入站請求,響應報文則由real server直接發往客戶端;
real server不能將網關指向DIP;
不支持端口映射;
在這個模型下vip和real server所對應的端口要同樣才行。
三、TUN
集羣節點能夠跨越Internet;
real server必須是公網地址;
LVS僅負責處理入站請求,響應報文則由real server直接發往客戶端;
real server網關不能指向LVS;
只有支持隧道功能的OS才能用於real server;
不支持端口映射;
LVS默認使用的模型爲DR模型
4、LVS的調度算法
一、靜態調度算法
rr: 輪叫,輪詢
wrr: 加權輪叫
sh: sourch hash,源地址hash session 綁定到同一主機上
dh: destination hash 目的地址hash session 經過目的地址來綁定到同一主機上。
二、動態調度算法
lc: least-connect 最少鏈接 active * 256 + inactive 誰的小,挑誰
wlc: 加權最少鏈接,( active * 256 + inactive ) / weight
sed: 最少指望延遲 (active + 1 ) * 256 / weight
nq: never queue 永不排隊,改進的sed
LBLC: 基於本地的最少鏈接
LBLCR: 基於本地的帶複製功能的最少鏈接
LVS默認的調度算法是wlc
5、LVS的ipvadm命令的使用
安裝:
在redhat/centos 6系統中:yum install ipvsadm -y
ipvsadm命令的使用:
一、管理集羣服務
添加或修改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]
-A: 添加
-E:修改
-t: tcp
-u: udp
-f: FirewallMark FWM 防火牆標記。service-address: Mark Number
service-address:VIP:PORT 使用VIP和端口號
-s: 調度算法
-p: 後跟超時時間,在支持連接時使用,默認300s 單位是:秒
-M: 指定子網掩碼,默認是255.255.255.255
刪除:
ipvsadm -D -t|u|f service-address
-D:刪除
-t: tcp
-u: udp
-f: FirewallMark FWM 防火牆標記。service-address: Mark Number
service-address:VIP:PORT 使用VIP和端口號
保存規則:
ipvsadm -S > /path/to/somefile
重載規則:
ipvadm -R < /path/to/somefile
清除規則:
ipvsadm -C
示例以下:
ipvadm -A -t 192.168.1.10:80 -s rr
#添加一個規則,指定的-t tcp協議,使用192.168.1.10 爲VIP 端口爲80 -s指定爲rr 也就是輪詢。
二、管理集羣服務中後端的real server
添加或修改:
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-a: 添加
-e: 修改
-t: tcp
-u: udp
-f: FirewallMark FWM 防火牆標記。service-address: Mark Number
service-address: 此前添加的的service-address: VIP:PORT
-r: 指定後端real server
server-address: RIP:PORT
-g: DR模型
-i: TUN模型
-m: NAT模型
-w: 指定權重
刪除:
ipvsadm -d -t|u|f service-address -r server-address
-d:刪除
示例以下:
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.9:80 -g -w 3
ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.8:80 -g -w 5
#定義了兩個後端server 並指定爲DR模型和各個服務器的權重
三、查看規則
ipvsadm -L -n
ipvsadm -L -n -c 查看當前鏈接信息
6、LVS的持久鏈接
不管使用什麼算法,LVS持久都能實如今必定時間內,未來自同一個客戶端請求派發至此前選定的後端服務器即RS。Real Server。
LVS 持久鏈接模板(內存緩衝區):每個客戶端分配給它的RS的映射關係;
ipvsadm -A|E ... -p timeout:
timeout: 持久鏈接時長,默認300秒;單位是秒;
應用場景如:在基於SSL,須要用到持久鏈接;後端服務器有session應用時,比較用戶登陸,這時多個後端服務器session共享問題沒法解決時,須要持久鏈接到同一個後端服務器。
三種持久鏈接:
一、PPC:未來自於同一個客戶端對同一個集羣服務的請求,始終定向至此前選定的RS; 持久端口鏈接
ipvsadm -A -t 192.168.1.10:23 -s rr -p 600
ipvsadm -a -t 192.168.1.10:23 -r 192.168.1.9:23 -g -w 2
ipvsadm -a -t 192.168.1.10:23 -r 192.168.1.8:23 -g -w 5
#注:此時的權重沒有做用了。
二、PCC:未來自於同一個客戶端對全部端口的請求,始終定向至此前選定的RS; 持久客戶端鏈接
把全部端口通通定義爲集羣服務,一概向RS轉發;
ipvsadm -C
ipvsadm -A -t 192.168.1.10:0 -s rr -p 600
ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.9 -g -w 2
ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.8 -g -w 5
此時後端服務器的全部端口均可以轉發了,並綁定到同一個後端服務器上。
三、PNMPP:持久防火牆標記鏈接
把多個端口持久鏈接到後端同一臺服務器上,此前兩種方法都沒法作到。
防火牆標記,能夠作到把多個端口定義爲同一個標記數(1-99) 把標記號進行轉發到後端便可。
方法以下:
如把80和23端口標記爲8
在PREROUTING鏈上標記:
操做以下:
iptables規則:
iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 80 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 23 -j MARK --set-mark 8
#使用的-d 後面是VIP地址
添加LVS規則:
ipvsadm -A -f 8 -s rr -p 600
ipvsadm -a -f 8 -r 192.168.1.9 -g -w 2
ipvsadm -a -f 8 -r 192.168.1.8 -g -w 5
此時應當實現了以前的把多個端口定位到此前所選定的後端同一臺服務器上。
以上就是LVS的基於概念和ipvsadm命令基本使用詳情。若有批漏請各位指出,多謝關注。
下一篇會有三個腳原本實現LVS在負載均衡端和Real Server的設置,其中有一個腳原本提供後端Real Server健康狀態檢測,並自動添加恢復後的Real Server服務器。