VRRP script
- VRRP的檢測腳本
1)在keepalived學習總結中已經說過,keepalived只是提供一個VIP,但高可用的是服務,因此keepalived一般會與lvs、nginx、haproxy、mysql…等服務器聯合使用,以實現服務的高可用,但是若keepalived與之聯合使用的服務異常時,此處keepalived提供的VIP也就沒有任何意義了,因此此時的VIP我們希望它可以自動檢測與keepalived連用的服務是否正常,若服務不正常,VIP實現自動飄移至backup節點,此時可以使用VRRP scripts實現。
2)keepalived調用外部的輔助腳本進行資源監控,並根據監控的結果狀態能實現優先動態調整。
3)vrrp_script:自定義資源監控腳本,vrrp實例根據腳本返回值進行下一步操作,腳本可被多個實例調用。track_script:調用vrrp_script定義的腳本去監控資源,定義在實例之內,調用事先定義的vrrp_script。
4)VRRP scripts的實現:分兩步:
- (1) 先定義一個腳本
vrrp_script script_name
vrrp_script <SCRIPT_NAME> {
script <STRING>|<QUOTED-STRING> #script後面可以直接接shell命令或一個可執行腳本
OPTIONS #對於上面script的執行狀態結果:(0:成功|true 非0:失敗|false)
}
- (2) 調用此腳本
track_script {
SCRIPT_NAME_1
SCRIPT_NAME_2
}
定義腳本
vrrp_script <SCRIPT_NAME> { #定義一個檢測腳本,在global_defs 之外配置
script <STRING>|<QUOTED-STRING> # shell命令或腳本路徑
interval <INTEGER> # 間隔時間,單位爲秒,默認1秒
timeout <INTEGER> # 超時時間
weight <INTEGER:-254..254> # 權重,當腳本成功或失敗對當前節點的優先級是增加還是減少,這個值會與定義的優先級做加法例:-80時則爲priority+(-80)
fall <INTEGER> #腳本幾次失敗轉換爲失敗
rise <INTEGER> # 腳本連續監測成果後,把服務器從失敗標記爲成功的次數
user USERNAME [GROUPNAME] # 執行監測的用戶或組
init_fail # 設置默認標記爲失敗狀態,監測成功之後再轉換爲成功狀態
}
#基於第三方仲裁設備實現VRRP script
-
基於第三方仲裁設備主要用於檢測lvs服務(lvs服務特點:無端口、無進程)
-
因此對於lvs進程,端口和進程就沒有辦法判斷lvs的異常還是正常。
-
使用方法:
①仲裁設備檢測keepalived的master節點是否正常,然後故障時做出什麼樣的操作。比如:仲裁設備某目錄創建一個文件?
②master節點或者backup節點去檢測仲裁設備文件是否存在然後對應做出什麼樣的操作。比如:若文件存在則VIP遷移。
注:主要看你使用的什麼樣的邏輯咯。
【實驗規劃:】
- keepalived+lvs
VIP:192.168.38.88
master:192.168.38.17
backup:192.168.38.27
仲裁設備和web server:192.168.38.37
【實驗現象:】
- 當仲裁設備檢測web 首頁是否能夠訪問,web首頁能訪問,master正常;反之,VIP需要飄移至backup。(當然這裏的前提是web server好的哈 <控制變量>)。
- 仲裁設備檢測web 不存在時,將在/etc/keepalived/check/目錄創建down文件。
- 仲裁設備/etc/keepalived/check/目錄將共享給master 和 backup節點。
【實驗過程:】
- ①將keepalived+lvs和web server實現
- ②仲裁設備搭建nfs服務,將/etc/keepalived/check/共享
- ③修改keepalived配置文件添加VRRP script部分內容,檢測/etc/keepalived/check/down文件是否存在
①keepalived+lvs和web server實現
[root@centos7-17 keepalived]# cat /etc/keepalived/conf/lvs-web.conf
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 77
priority 100
advert_int 1
unicast_src_ip 192.168.38.17
unicast_peer {
192.168.38.27
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.38.88 dev eth0 label eth0:0
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
virtual_server 192.168.38.88 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.38.47 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.38.37 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
web server端:綁定VIP
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore;echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce;echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# ip a a 192.168.38.88/24 dev eth0
測試:
[root@centos7-77 ~]# curl 192.168.38.88
web1 37
②仲裁設備搭建nfs服務,將/etc/keepalived/check/共享
此處實現,當然我是收到往共享目錄中創建down文件,並未實現什麼檢測,然後在自動生成down文件!
NFS共享/etc/keepalived/check/目錄和掛載過程 略~~
- 實現邏輯:/etc/keepalived/check/down文件存在表示master服務器故障、使用backup節點去檢測/etc/keepalived/check/down文件時是否存在,backup節點檢測到文件存在,需要提升自己的優先級。
backup配置文件:
[root@centos7-27 conf]# cat lvs-web.conf
################################# vrrp_script setting ##########################################
vrrp_script chk_down {
script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 7 || exit 0"
interval 1
weight +80
fall 3
rise 5
timeout 2
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 77
priority 80
advert_int 1
unicast_src_ip 192.168.38.27
unicast_peer {
192.168.38.17
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.38.88 dev eth0 label eth0:0
}
################################# 調用VRRP_scripts ##########################################
track_script {
chk_down
}
}
virtual_server 192.168.38.88 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.38.47 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.38.37 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
【測試現象:】
- 手動在仲裁設備創建/etc/keepalived/check/down文件
- backup節點:
提升優先級 --> 提升爲master節點 --> 設置VIP
高可用HAProxy
-
keepalived與HAProxy聯用時,可直接檢測HAProxy進程是否存在。
-
檢測haproxy進程:
ps aux | grep haproxy | grep -v grep
/usr/bin/killall -0 haproxy -
0) 發送0信號 對進程做錯誤檢查
################################# vrrp_script setting ##########################################
vrrp_script chk_haproxy {
script " /usr/bin/killall -0 haproxy"
interval 1
weight +80
fall 3
rise 5
timeout 2
}
vrrp_instance VI_2 {
################################# 調用VRRP_scripts ##########################################
track_script {
chk_down
}
}
- 也可以使用腳本方式實現
vrrp_script chk_nginx {
script "/etc/keepalived/chk_nginx.sh"
interval 1
weight -80
fall 3
rise 5
timeout 2
}
track_script {
chk_haproxy
}
# yum install psmisc -y
# cat /etc/keepalived/chk_nginx.sh
#!/bin/bash
/usr/bin/killall -0 nginx
# chmod a+x /etc/keepalived/chk_nginx.sh