Linux集羣(四)-LVS持久連接與高可用

FWM:FireWall Mark

MARK target 可用於給特定的報文打標記
--set-mark value 其中:value 爲十六進制數字
藉助於防火牆標記來分類報文,而後基於標記定義集羣服務;可將多個不同的應用使用同一個集羣服務進行調度

實現方法:

在VS主機打標記:
iptables -t mangle -A PREROUTING -d $vip -p $proto –m multiport --dports $port1,$port2,… -j MARK --set-mark NUMBER
在VS主機基於標記定義集羣服務:
ipvsadm -A -f 標記符 [options]
# iptables -t mangle -A PREROUTING -d 172.18.50.100 -p tcp –m multiport --dports 80,443 -j MARK --set-mark 10

# ipvsadm -A -f 10 -s wrr
# ipvsadm -a -f 10 -r 192.168.1.100 -g
# ipvsadm -a -f 10 -r 192.168.1.101 -g

持久連接

實現無論使用任何調度算法,在一段時間內(默認360s),能夠實現將來自同一個地址的請求始終發往同一個RS,從面實現session綁定

持久連接實現方式:

PPC:    每端口持久。每個端口對應定義爲一個集羣服務,每集羣服務單獨調度
    # ipvsadm -E -t 192.168.7.250:80 -s rr -p 60

PFWMC: 每防火牆標記持久。基於防火牆標記定義集羣服務;可實現將多個端口上的應用統一調度,即所謂的port Affinity
    # ipvsadm -A -f 10 -s wrr -p

PCC:   每客戶端持久。基於0端口(表示所有服務)定義集羣服務,即將客戶端對所有應用的請求都調度至後端主機,必須定義爲持久模式
    # ipvsadm -E -t 192.168.7.250:0 -s rr -p 60

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

# ipvsadm -E -t 192.168.7.250:80 -s rr -p 60
# 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.7.250:80 rr persistent 60
  -> 192.168.7.201:80             Route   1      0          0         
  -> 192.168.7.203:80             Route   1      1          0  

在客戶端上60秒之內都會調度到同一RS上

# for ((i=1;i<=10;i++));do curl 192.168.7.250;done
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2
RS2

LVS高可用

ldirectord

http://horms.net/projects/ldirectord/

用於監視和管理負載平衡虛擬服務器LVS集羣中的RealServer服務器。

ldirectord通過定期請求一個已知的URL並檢查響應是否包含預期的響應來監視RealServer服務器的健康狀況。如果RealServer發生故障,則將此RS刪除,一旦它恢復正常,它將被重新激活。

下載頁面:

OBS Repositories: http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/
ldirectord-3.9.6-0rc1.1.2.x86_64.rpm

安裝

# yum install ldirectord-3.9.6-0rc1.1.2.x86_64.rpm
有依賴包需要安裝,請掛載相應源
# rpm -ql ldirectord
/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          文件

相關文件

checktimeout=3                      #檢查超時(秒)
checkinterval=1                     #檢查間隔(秒)
autoreloa"d=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
real=172.16.0.8:80 gate 1
fallback=127.0.0.1:80 gate          #sorry server,集羣不可用時,指向一臺備用服務器
service=http
scheduler=wrr
checktype=negotiate
checkport=80
request="index.html"
receive=“Test Ldirectord"

配置

# cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/
# vim /etc/ha.d/ldirectord.cf

checktimeout=3
checkinterval=1
fallback=www.baidu.com:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=no

# Sample for an http virtual service
virtual=192.168.7.250:80                > VIP地址
        real=192.168.7.201:80 gate 1    > RealServer,gate表示DR模型,後面爲權重
        real=192.168.7.203:80 gate 1
        service=http                    > 集羣類型
        scheduler=wrr                   > 調度算法
        #persistent=600                 > 持久連接
        #netmask=255.255.255.255
        protocol=tcp                    > 協議,fwm(防火牆標記),udp,
        checktype=negotiate             > 健康度檢查方法,ping,
        checkport=80
        request="index.html"            > 檢測的頁面文件
        receive="RS"                    > 檢查的頁面字符

啓動ldirectord

會自動創建集羣規則,先把之前的規則清空
# ipvsadm -C
# systemctl start ldirectord.service
# 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.7.250:80 wrr
  -> 192.168.7.201:80             Route   1      0          0         
  -> 192.168.7.203:80             Route   1      0          0    

模擬RealServer故障

# vim /var/www/html/index.html 
R2

LVS很快就把故障節點刪除了
# 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.7.250:80 wrr
  -> 192.168.7.201:80             Route   1      0          2

修復後會自動加入集羣 
# 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.7.250:80 wrr
  -> 192.168.7.201:80             Route   1      0          26        
  -> 192.168.7.203:80             Route   1      0          4 

檢測Mysql的範例

#Sample configuration for a MySQL virtual service.
#virtual = 192.168.10.74:3306
#       real=sql01->sql03:3306 gate 10
#       fallback=127.0.0.1:3306
#       service=mysql
#       scheduler=wrr
#       #persistent=600
#       #netmask=255.255.255.255
#       protocol=tcp
#       checktype=negotiate
#       login="readuser"
#       passwd="genericpassword"
#       database="portal"
#       request="SELECT * FROM link"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章