VRRP script

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章