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)來度量系統的可維護性。於是可用性被定義爲:
描述 |
通俗叫法 |
可用性級別 |
年度停機時間 |
基本可用性 |
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設備等。類型如下:
- Primitive:主資源,在某一時刻只能運行在某個節點上,如VIP。
- group:組,資源容器,使得多個資源同時停/啓等,一般只包含primitive資源。
- clone:克隆,可以在多個節點運行的資源,例如stonith設備管理進程、集羣文件系統的分佈式鎖(dlm)作爲資源,應運行在所有節點上。
- master/slave:特殊的clone資源,運行在兩個節點上,一主一從,如:分佈式複製塊設備drbd(2.6.33之後整合進內核了)。
資源傾向
資源粘性:資源對節點傾向程度,資源是否傾向於當前節點。score,正值傾向於當前節點(還要和位置約束結合)。
資源約束(Constraint):資源和資源之間的關係
- 排列約束 (colocation):資源間的依賴/互斥性,定義資源是否運行在同一節點上。score,正值表示要運行在同一節點上,負值則不可。
- 位置約束(location):每個節點都有一個score值,正值則傾向於本節點,負值傾向於其他節點,所有節點score比較,傾向於最大值的節點。
- 順序約束(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 的參數。