持續連接 session保存機制(會話機制) LVS的高可用 ...
持續連接
1)持久連接(lvs persistence)模板:
實現無論使用任何調度演算法,在一段時間內(預設360s),能夠實現將來自同一個地址的請求始終發往同一個RS
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
-p # :定義持久時長
2)持久連接實現方式:
每埠持久(PPC):每個埠對應定義為一個集群服務,每個集群服務單獨調度,同一服務持久
每防火牆標記持久(PFWMC ):基於防火牆標記定義集群服務,可實現將多個埠上的應用統一調度,即所謂的port Affinity,同一防火牆標記持久
每客戶端持久(PCC ):基於0埠(表示所有服務)定義集群服務,即將客戶端對所有應用的請求都調度至後端主機,必須定義為持久模式,所有服務持久將vip的埠定義為0,則表示所有請求都將發送後臺伺服器。
3)具體實現
在VS上進行如下操作
[root@centos7 ~]#ipvsadm -E -f 12 -s rr -p 300
[root@centos7 ~]#ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 12 rr persistent 300
-> 192.168.74.129:0 Route 1 0 0
-> 192.168.74.133:0 Route 1 0 0
session保存機制(會話機制)
session綁定(session sticky)
始終將同一個請求者的請求發送到同一臺RS(第一次請求由演算法調度)
缺陷:沒有容錯能力,若此RS宕機,則會話丟失,並且將同一請求發送到同一RS有損均衡效果。
session複製(session cluster)
在RS之間同步session,因此每個RS都保持集群中的所有session
缺陷:增加了RS的負擔,對大規模的集群不適用
session伺服器(session server),redis:
用單獨一組伺服器來管理session
LVS的高可用
1.Director 不可用,整個系統將不可用,SPoF Single Point of Failure
解決方案:高可用
keepalived heartbeat/corosync
2.某RS不可用時,Director 依然會調度請求至此RS
解決方案:由Director 對各RS健康狀態進行檢查,失敗時禁用,成功時啟用
keepalived heartbeat/corosync, ldirectord
檢測方式:
(a) 網路層檢測,icmp
(b) 傳輸層檢測,埠探測
(c) 應用層檢測,請求某關鍵資源
RS 全不用時:back server, sorry server
ldirectord
ldirectord :監控和控制LVS 守護進程,可管理LVS 規則
包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
文件:
/etc/ha.d/ldirectord.cf 主配置文件
/usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版
/usr/lib/systemd/system/ldirectord.service 服務
/usr/sbin/ldirectord 主程式
/var/log/ldirectord.log 日誌
/var/run/ldirectord.ldirectord.pid pid 文件
ldirectord 配置文件示例
checktimeout=3 如果3秒沒有反應就認為是有故障了
checkinterval=1 表示一秒檢查一次後端的伺服器
autoreload=yes 自動載入配置文件,不用重啟就可以生效
logfile=“/var/log/ldirectord.log“ 日誌文件
quiescent=no down 時yes權重為0 ,no為刪除
virtual=5 指定VS的FWM或IP:port
real=172.16.0.7:80 gate 2 gate表示dr模式,2表示權重為2
real=172.16.0.8:80 gate 1 權重為1
fallback=127.0.0.1:80 gate #sorry server 定義後面的VS全部宕機了,由誰來提供服務
service=http 服務類型
scheduler=wrr 調度演算法
checktype=negotiate 定義檢查的類型為協商模式
checkport=80 檢查的埠
request="index.html"
receive=“Test Ldirectord" 表示檢查的時候看到什麼字樣就可以說是健康的,是index.html中的,註意大小寫敏感
3.由VS對各RS進行健康狀態檢查的實現
1)編寫腳本來實現
#!/bin/bash
while true;do
curl 192.168.74.133 &> /dev/null && ipvsadm -a -f 12 -r 192.168.74.133 &>/dev/null || ipvsadm -d -f 12 -r 192.168.74.133 &>/dev/null
sleep 1
done
2)通過ldirectord來實現
1、
yum install ldirectord-3.9.5-5.1.x86_64.rpm
rpm -ql ldirectord
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/ ###把模板拷貝到配置文件的目錄當做配置文件
2、
ipvsadm -C ##清空之前的集群服務,在配置文件里可以定義集群服務,並對RS進行實時監控
ipvsadm -Ln
3、
vim /etc/ha.d/ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=yes
quiescent=no
# Sample for an http virtual service
virtual=192.168.74.88:80
real=192.168.74.133:80 gate
real=192.168.74.129:80 gate
fallback=127.0.0.1:80 ##表示兩台VS都有故障了就由本機來代替,這樣本機也得裝一個httpd服務
service=http
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
receive="welcom" ##表示收到index.html里有welcom字樣就認為機器是好的
在本機也安裝一個httpd服務
vim /var/www/html/index.html ##這樣兩台RS都蕩機了就有本機提供服務顯示sorry server字樣
sorry server
4、測試
分別宕機一臺和兩台RS
[root@centos7 resource.d]#ipvsadm -Ln ##這是兩台都宕機的顯示,有本機提供服務
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.74.88:80 rr
-> 127.0.0.1:80 Route 1 0 0
此時在客戶端
[root@redhat7 ~]#curl 192.168.74.88
sorry server