5.1 keepalived高可用

VRRP協議


  • VRRP概念

隨着Internet的發展,人們對網絡的可靠性的要求越來越高。對於局域網用戶來說,能夠時刻與外部網絡保持聯繫是非常重要的。通常情況下,內部網絡中的所有主機都設置一條相同的缺省路由,指向出口網關,實現主機與外部網絡的通信。當出口網關發生故障時,主機與外部網絡的通信就會中斷。

VRRP是一種容錯協議,它通過把幾臺路由設備聯合組成一臺虛擬的路由設備,並通過一定的機制來保證當主機的下一跳設備出現故障時,可以及時將業務切換到其它設備,從而保持通訊的連續性和可靠性。

使用VRRP的優勢在於:既不需要改變組網情況,也不需要在主機上配置任何動態路由或者路由發現協議,就可以獲得更高可靠性的缺省路由。

  • VRRP原理

VRRP將局域網的一組路由器構成一個備份組,相當於一臺虛擬路由器。局域網內的主機只需要知道這個虛擬路由器的IP地址,並不需知道具體某臺設備的IP地址,將網絡內主機的缺省網關設置爲該虛擬路由器的IP地址,主機就可以利用該虛擬網關與外部網絡進行通信。

VRRP將該虛擬路由器動態關聯到承擔傳輸業務的物理路由器上,當該物理路由器出現故障時,再次選擇新路由器來接替業務傳輸工作,整個過程對用戶完全透明,實現了內部網絡和外部網絡不間斷通信。

主機利用該虛擬網關與外部網絡通信。路由器工作機制如下:

根據優先級的大小挑選Master設備。Master的選舉有兩種方法:

    比較優先級的大小,優先級高者當選爲Master。
               當兩臺優先級相同的路由器同時競爭Master時,比較接口IP地址大小。接口地址大者當選爲Master。

其它路由器作爲備份路由器,隨時監聽Master的狀態。

當主路由器正常工作時,它會每隔一段時間(Advertisement_Interval)發送一個VRRP組播報文,以通知組內的備份路由器,主路由器  處於正常工作狀態。

當組內的備份路由器一段時間(Master_Down_Interval)內沒有接收到來自主路由器的報文,則將自己轉爲主路由器。一個VRRP組裏  有多臺備份路由器時,短時間內可能產生多個Master,此時,路由器將會將收到的VRRP報文中的優先級與本地優先級做比較。從而選取優先級高的設備做Master。

VRRP是一個“選舉”協議,它能夠動態地將一個虛擬路由器的責任指定至同一個VRRP組中的其它路由器上,從而消除了靜態路由配置的單點故障。

高可用集羣 HA Cluster


  • 高可用概念

高可用集羣(High Availability Cluster,簡稱HA Cluster),是指以減少服務中斷時間爲目的的服務器集羣技術。它通過保護用戶的業務程序對外不間斷提供的服務,把因軟件、硬件、人爲造成的故障對業務的影響降低到最小程度。

通常用平均無故障時間(MTTF)來度量系統的可靠性,用平均故障維修時間(MTTR)來度量系統的可維護性。於是可用性被定義爲:
HA=MTTF/(MTTF+MTTR)*100%

描述

通俗叫法

可用性級別

年度停機時間

基本可用性

2個9

99%

87.6小時

較高可用性

3個9

99.9%

8.8小時

具有故障自動恢復能力的可用性

4個9

99.99%

53分鐘

極高可用性

5個9

99.999%

5分鐘

高可用集羣主要實現自動偵測(Auto-Detect)故障、自動切換/故障轉移(FailOver)和自動恢復(FailBack)。

簡單來說就是,用高可用集羣軟件實現故障檢查和故障轉移(故障/備份主機切換)的自動化,當然像負載均衡、DNS分發也可提供高可性。

  • FailOver 故障轉移

自動切換階段某一主機如果確認對方故障,則正常主機除繼續進行原來的任務,還將依據各種容錯備援模式接管預先設定的備援作業程序,並進行後續的程序及服務。

集羣資源

集羣資源是集羣中使用的規則、服務和設備等,如VIP、httpd服務、STONITH設備等。類型如下:

  1. Primitive:主資源,在某一時刻只能運行在某個節點上,如VIP。
  2. group:組,資源容器,使得多個資源同時停/啓等,一般只包含primitive資源。
  3. clone:克隆,可以在多個節點運行的資源,例如stonith設備管理進程、集羣文件系統的分佈式鎖(dlm)作爲資源,應運行在所有節點上。
  4. master/slave:特殊的clone資源,運行在兩個節點上,一主一從,如:分佈式複製塊設備drbd(2.6.33之後整合進內核了)。

資源傾向

資源粘性:資源對節點傾向程度,資源是否傾向於當前節點。score,正值傾向於當前節點(還要和位置約束結合)。

資源約束(Constraint):資源和資源之間的關係

  1. 排列約束 (colocation):資源間的依賴/互斥性,定義資源是否運行在同一節點上。score,正值表示要運行在同一節點上,負值則不可。
  2. 位置約束(location):每個節點都有一個score值,正值則傾向於本節點,負值傾向於其他節點,所有節點score比較,傾向於最大值的節點。
  3. 順序約束(order):定義資源執行動作的次序,例如vip應先配置,httpd服務後配置。特殊的score值,-inf 負無窮,inf 正無窮。
  • 高可用集羣模型

Active/Passive:主備模型

 一個活動主節點,另一個不活動作爲備用節點,當主節點故障,轉移到備節點,這時備節點就成爲了主節點。備節點完全冗餘,造成一定浪費。

Active/Active:雙主模型

兩個節點都是活動的,兩個節點運行兩個不同的服務,也互爲備用節點。也可以提供同一個服務,比如ipvs,前端基於DNS輪詢。這種模型可以使用比較均衡的主機配置,不會造成浪費。

N+1

 N個活動主節點N個服務,一個備用節點。這需要額外的備用節點必須能夠代替任何主節點,當任何主節點故障時,備節點能夠負責它的角色對外提供相應的服務。

N+M

N個活動主節點,M個備用節點。像上面的N+1模型,一個備用節點可能無法提供足夠的備用冗餘能力,備用節點的數量M是成本和可靠性要求之間的折衷。

N-to-N

 N個主節點N個備用節點。這是A/A雙主和N + M模型的組合,N節點都有服務,如果一個壞了,剩下的每個節點都可以作爲替代提供服務。

keepalived


 keepalived的誕生最初是爲LVS ipvs(director)提供高可用性的,後來發展一個多功能、通用的輕量級高可用組件,可以爲ipvs、nginx、haproxy等諸多服務提供高可用功能,主要應用在負載均衡調度器上,同時也可以檢查後端各realserver的健康狀態。

  • keepalived基礎

keepalived主要是模塊是VRRP Stack和Cheackers

    VRRP主要實現VIP(及MAC)的高可用
    Cheackers主要實現各服務如ipvs、nginx等的高可用及realserver健康狀態檢查

其中ipvs和realserver健康狀態檢查通過配置文件配置就可以實現,而其他服務高可用則需要通過自己編寫腳本,然後配置keepalived調用來實現。

Keepalived運行有3個守護進程。父進程主要負責讀取配置文件初始化、監控2個子進程等

然後兩個子進程,一個負責VRRP,另一個負責Cheackers健康檢查。其中父進程監控模塊爲 WacthDog,工作實現:每個子進程打開一個接受 unix 域套接字,父進程連接到那些unix域套接字並向子進程發送週期性(5s)hello包。

  • keepalived配置

單主模型

修改配置文件 /etc/keepalived/leepalived.conf

[root@CentOS74 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {     #全局通用配置
   notification_email {
   root@localhost
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1   #郵件服務器IP
   smtp_connect_timeout 30 #郵件發送超時
   router_id 74_HOST       #本機ID標識
   vrrp_skip_check_adv_addr
   vrrp_strict             #自動生成iptables規則
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.1.1.18   #默認爲224.0.0.18,建議修改
}

vrrp_instance VI_1 {       #定義VRRP實例
    state MASTER          #定義主從
    interface ens33       #使用的網卡名稱
    virtual_router_id 7   #0到255之間,識別同一個虛擬路由
    priority 100          #0到255之間
    advert_int 1          #通報間隔
    authentication {      #認證方式
        auth_type PASS
        auth_pass linux
    }
    virtual_ipaddress {   #虛擬IP
        192.168.30.7
    }
}

首先在低優先級的從節點上開啓 keepalived 服務,並查看日誌

Jul 26 18:08:40 CentOS75.Miariam Keepalived_vrrp[1952]: Registering gratuitous ARP shared channel
Jul 26 18:08:40 CentOS75.Miariam Keepalived_vrrp[1952]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 26 18:08:40 CentOS75.Miariam Keepalived_healthcheckers[1951]: Initializing ipvs
Jul 26 18:08:40 CentOS75.Miariam Keepalived_healthcheckers[1951]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 26 18:08:40 CentOS75.Miariam Keepalived_vrrp[1952]: VRRP_Instance(VI_1) removing protocol VIPs.
Jul 26 18:08:40 CentOS75.Miariam Keepalived_vrrp[1952]: VRRP_Instance(VI_1) removing protocol iptable drop rule
Jul 26 18:08:40 CentOS75.Miariam Keepalived_vrrp[1952]: Using LinkWatch kernel netlink reflector...
Jul 26 18:08:40 CentOS75.Miariam Keepalived_vrrp[1952]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jul 26 18:08:40 CentOS75.Miariam Keepalived_vrrp[1952]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Jul 26 18:08:44 CentOS75.Miariam Keepalived_vrrp[1952]: VRRP_Instance(VI_1) Transition to MASTER STATE

從節點在一段時間內通過 VRRP 組播沒有發現優先級比自己高的節點或者主節點的話,自己將主動提升爲主節點。但是當主節點或者優先級比自己高的節點上線,根據搶佔模式,他將降級爲從節點

Jul 26 18:26:12 CentOS75.Miariam Keepalived_vrrp[2072]: VRRP_Instance(VI_1) Received advert with higher priority 100, ours 90
Jul 26 18:26:12 CentOS75.Miariam Keepalived_vrrp[2072]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jul 26 18:26:12 CentOS75.Miariam Keepalived_vrrp[2072]: VRRP_Instance(VI_1) removing protocol VIPs.
Jul 26 18:26:12 CentOS75.Miariam Keepalived_vrrp[2072]: VRRP_Instance(VI_1) removing protocol iptable drop rule

 查看主節點的 keepalived 日誌

Jul 26 18:25:56 CentOS74.Miriam Keepalived_vrrp[11334]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 26 18:26:12 CentOS74.Miriam Keepalived_vrrp[11334]: (VI_1): Cannot start in MASTER state if not address owner
Jul 26 18:26:12 CentOS74.Miriam Keepalived_vrrp[11334]: VRRP_Instance(VI_1) removing protocol VIPs.
Jul 26 18:26:12 CentOS74.Miriam Keepalived_vrrp[11334]: VRRP_Instance(VI_1) removing protocol iptable drop rule
Jul 26 18:26:12 CentOS74.Miriam Keepalived_vrrp[11334]: Using LinkWatch kernel netlink reflector...
Jul 26 18:26:12 CentOS74.Miriam Keepalived_vrrp[11334]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jul 26 18:26:12 CentOS74.Miriam Keepalived_vrrp[11334]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Jul 26 18:26:12 CentOS74.Miriam Keepalived_vrrp[11334]: VRRP_Instance(VI_1) forcing a new MASTER election
Jul 26 18:26:13 CentOS74.Miriam Keepalived_vrrp[11334]: VRRP_Instance(VI_1) Transition to MASTER STATE

 使用 ip 命令查看指定網卡,觀察虛擬地址

[root@CentOS74 ~]# ip addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a1:ad:b8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.74/24 brd 192.168.30.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.30.7/32 scope global ens33   #成功添加網卡別名
       valid_lft forever preferred_lft forever
    inet6 fe80::a815:1b4e:5d89:c847/64 scope link 
       valid_lft forever preferred_lft forever

雙主模型

雙主模型無非是將兩個節點相互作爲主備

[root@CentOS174 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
   root@localhost
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id 74_HOST
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.1.1.18
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 7
    priority 95
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass linux
    }
    virtual_ipaddress {
        192.168.30.7/24
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 74
    priority 100 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass linux
    }
    virtual_ipaddress {
        192.168.30.8/24
    }
}

vrrp_instance 其他配置項:

virtual_ipaddress {    #定義虛擬IP的屬性
        src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> [or <IPADDR>] dev <STRING> scope <SCOPE> table <TABLE>
}

track_interface {    #配置要監控的網絡接口,一旦接口出現故障,則轉爲FAULT狀態
        eth0
        eth1
        ...
}

nopreempt    #定義工作模式爲非搶佔模式

preempt_delay 300    #搶佔式模式下,節點上線後觸發新選舉操作的延遲時長

使用 ip 命令查看虛擬 IP 的分配情況

[root@CentOS74 ~]# ip addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a1:ad:b8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.74/24 brd 192.168.30.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.30.7/24 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::a815:1b4e:5d89:c847/64 scope link 
       valid_lft forever preferred_lft forever

[root@CentOS174 ~]# ip addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:3d:70:fc brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.174/24 brd 192.168.30.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.30.8/24 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::bb94:dae0:fd12:4086/64 scope link 
       valid_lft forever preferred_lft forever

通知腳本

通知腳本能夠在指定的情況下,使用通知腳本通知管理者當前服務器狀態

    notify_master <STRING>|<QUOTED-STRING>  當前節點成爲主節點時觸發的腳本
    notify_backup <STRING>|<QUOTED-STRING>  當前節點轉爲備節點時觸發的腳本
    notify_fault <STRING>|<QUOTED-STRING>  當前節點轉爲“失敗”狀態時觸發的腳本

使用通知腳本,並在配置文件中定義

#!/bin/bash
#
contact='root@localhost'

notify() {
	local mailsubject="$(hostname) to be $1, vip floating"
	local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
	echo "$mailbody" | mail -s "$mailsubject" $contact
}

case $1 in
master)
	notify master
	;;
backup)
	notify backup
	;;
fault)
	notify fault
	;;
*)
	echo "Usage: $(basename $0) {master|backup|fault}"
	exit 1
	;;
esac
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault  "/etc/keepalived/notify.sh fault"
  • keepalived高可用LVS

使用 keepalived 高可用 LVS,需要修改配置文件定義 ipvs 規則

virtual_server 192.168.200.100 443 {  #VS配置段
    delay_loop 6  #服務輪詢的時間間隔
    lb_algo rr    #定義調度方法
    lb_kind NAT   #集羣的類型
    persistence_timeout 50  #持久連接時長
    protocol TCP  #服務協議,僅支持TCP

    real_server 192.168.201.100 443 {
        weight 1   #輪詢權重
        SSL_GET {  #七層檢測,也支持使用HTTP_GET
            url {
              path /  #URL路徑
              digest ff20ad2481f97b1754ef3e12ecd3a9cc  #檢測校驗碼
              #status_code <INT>  #判斷上述檢測機制爲健康狀態的響應碼
            }
            connect_timeout 3     #連接請求的超時時長
            nb_get_retry 3        #重試次數
            delay_before_retry 3  #重試之前的延遲時長
            bindto <IP ADDRESS>   #發出健康狀態檢測請求時使用的源地址
            bind_port <PORT>      #發出健康狀態檢測請求時使用的源端口
            connect_ip <IP ADDRESS> #向當前RS的哪個IP地址發起健康狀態檢測請求
            connect_port <PORT>     #向當前RS的哪個PORT發起健康狀態檢測請求
        }
        TCP_CHECK {
            connect_ip <IP ADDRESS>     #向當前RS的哪個IP地址發起健康狀態檢測請求
			connect_port <PORT>         #向當前RS的哪個PORT發起健康狀態檢測請求
			bindto <IP ADDRESS>         #發出健康狀態檢測請求時使用的源地址;
			bind_port <PORT>            #發出健康狀態檢測請求時使用的源端口;
			connect_timeout <INTEGER>   #連接請求的超時時長;
		}
    }
}

根據上圖中的拓撲配置集羣,並通過 VIP 訪問後端 RS 主機

啓動 keepalived 服務後,將會根據配置文件自動生成 ipvs 規則

[root@CentOS74 ~]# 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.30.7:80 rr
  -> 192.168.30.69:80             Route   2      0          1         
  -> 192.168.30.75:80             Route   1      0          1         

在客戶端上使用 curl 工具訪問 VIP

[root@CentOS174 ~]# for ((i=1;i<=5;i++));do curl http://192.168.30.7 ;done
This is host 75
This is host 69
This is host 75
This is host 69
This is host 75

停止調度器中的主節點上 keepalived 服務的,模擬主節點宕機。在一點時間過後,從節點接收不到主節點的 VRRP 報文,則會主動將自己的角色提升爲主節點。再次使用 curl 訪問 VIP

[root@CentOS174 ~]# for ((i=1;i<=5;i++));do curl http://192.168.30.7 ;done
This is host 75
This is host 69
This is host 75
This is host 69
This is host 75

這時候已經是由從節點來提供調度工作

高級配置

  • sorry server

當後端主機宕機時,keepalived 會根據配置文件中定義的檢測機制,在確認目標主機上服務故障後將該主機從 ipvs 規則中移除

[root@CentOS174 ~]# 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.30.7:80 rr
  -> 192.168.30.69:80             Route   2      0          0         
[root@CentOS74 ~]# for ((i=1;i<=5;i++));do curl http://192.168.30.7 ;done
This is host 69
This is host 69
This is host 69
This is host 69
This is host 69

當後端主機服務全部故障時,可以在 keepalived 的 virtual_server 配置段中設置中添加 sorry_server 選項爲用戶提供自定義錯誤界面

sorry_server <IP ADDRESS> <PORT>

訪問 VIP,查看 sorry server 工作狀態

[root@CentOS174 ~]# 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.30.7:80 rr
  -> 127.0.0.1:80                 Route   1      0          5         
[root@CentOS74 ~]# for ((i=1;i<=5;i++));do curl http://192.168.30.7 ;done
sorry server 174
sorry server 174
sorry server 174
sorry server 174
sorry server 174
  • 狀態轉換腳本

定義狀態轉換通知腳本,在服務狀態發生變化時,使用腳本中定義的方式通知管理者

notify_up|down <STRING>|<QUOTED-STRING>
  • keepalived高可用Nginx

keepalived 服務並沒有內建對 Nginx 健康狀態檢查的功能,但是我們可以通過 vrrp_script 選項自定義腳本,對類似 Nginx 或其他需要檢測的服務進行健康狀態檢測

! Configuration File for keepalived

global_defs {
   notification_email {
   root@localhost
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id 74_HOST
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.1.1.18
}

vrrp_script nginx_health {  #定義自定義腳本,注意先定義,後引用
    script "killall -0 nginx && exit 0 || exit 1"  #也可以指定腳本文件路徑
    interval 1   #執行間隔
    weight -10   #當腳本執行失敗,優先級偏移量
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 7
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass linux
    }
    virtual_ipaddress {
        192.168.30.7
    }
    track_interface {	 #在vrrp_instance配置段中引用自定義腳本
	ens33
    }
    notify_master "/etc/keepalived/notify.sh master"  #在notify腳本中,當該節點的狀態轉變爲BACKUP時
    notify_backup "/etc/keepalived/notify.sh backup"  #腳本會執行對檢測服務的啓動操作
    notify_fault  "/etc/keepalived/notify.sh fault"
    track_script {
        nginx_health
    }
}
  • 在前端方向代理服務器上停止 Nginx 服務,測試 notify 腳本的自我修復功能
#!/bin/bash
#
contact='root@localhost'

notify() {
	local mailsubject="$(hostname) to be $1, vip floating"
	local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
	echo "$mailbody" | mail -s "$mailsubject" $contact
}

case $1 in
master)
	notify master
	;;
backup)
	notify backup
	systemctl start nginx.service  #當使用backup參數時,嘗試啓動nginx
	;;
fault)
	notify fault
	;;
*)
	echo "Usage: $(basename $0) {master|backup|fault}"
	exit 1
	;;
esac

 抓包發現,主節點的優先級臨時降到了90,又會升至100優先級,說明這期間 Nginx 服務停止後又恢復了

20:52:26.383737 IP 192.168.30.74 > 224.1.1.18: VRRPv2, Advertisement, vrid 7, prio 100, authtype simple, intvl 1s, length 20
20:52:27.384825 IP 192.168.30.74 > 224.1.1.18: VRRPv2, Advertisement, vrid 7, prio 90, authtype simple, intvl 1s, length 20
20:52:29.389889 IP 192.168.30.74 > 224.1.1.18: VRRPv2, Advertisement, vrid 7, prio 100, authtype simple, intvl 1s, length 20
  • 禁用 notify 腳本中的自我修復功能,查看故障轉移的情況
[root@CentOS174 ~]# ip addr show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:3d:70:fc brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.174/24 brd 192.168.30.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.30.7/32 scope global ens33   #VIP成功發生了轉移
       valid_lft forever preferred_lft forever
    inet6 fe80::bb94:dae0:fd12:4086/64 scope link 
       valid_lft forever preferred_lft forever
  • 添加一個自定義腳本,實現主動的主節點臨時遷移
vrrp_script chk_down {
    script "/bin/bash [[ -f /etc/keepalived/down ]] && exit 1 || exit 0"  #檢查指定名稱的文件是否存在,存在則降權
    interval 1
    weight -50  #優先級減50以保證該節點的優先級最低
}

注意:當執行 vrrp_script 時,將會以 keepalived 的子進程運行,在新版本中不在支持條件判斷,需要使用 /bin/bash 定義環境,聲明腳本爲 bash 的參數。

 

 

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