0. 背景
局域網(wǎng)內(nèi)兩臺(tái)主機(jī)
192.168.1.16 主節(jié)點(diǎn)
192.168.1.43 備節(jié)點(diǎn)
分別在 9439 端口提供相同的服務(wù)澈段,現(xiàn)在使用 keepalived
配置 HA讼积。
1. 安裝keepalived
分別在兩臺(tái)主機(jī)安裝 keepalived
及相關(guān)依賴包
yum install -y net-tools psmisc
yum install -y net-snmp
yum install -y ipvsadm keepalived
2. 配置 keepalived
(1)配置主節(jié)點(diǎn)192.168.1.16
新建文件配置文件/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
}
vrrp_script check_docker_losa {
# 自身狀態(tài)檢測(cè)
script "sh /etc/keepalived/chk_losa.sh"
interval 3
weight 5
}
vrrp_instance VI_1 {
# 初始化狀態(tài)
state MASTER
# 虛擬 ip 綁定的網(wǎng)卡
interface ens192
# 此 ID 要與 Backup 配置一致
virtual_router_id 80
# 默認(rèn)啟動(dòng)優(yōu)先級(jí)沐祷,要比 Backup 大點(diǎn),但要控制量纵寝,保證自身狀態(tài)監(jiān)測(cè)生效
priority 100
advert_int 1
virtual_ipaddress {
# 虛擬 ip 地址
192.168.1.2
}
track_script {
check_docker_losa
}
}
另外在編寫一個(gè)狀態(tài)檢測(cè)腳本/etc/keepalived/chk_losa.sh
论寨,檢測(cè) docker 中的服務(wù)是否正常
#!/bin/bash
RMQ_CONTAINER=$(docker ps -a|awk '/losa-front-nginx/ {print $1}')
if [[ -n "$RMQ_CONTAINER" ]]; then
exit 0
fi
exit 1
(2)配置備節(jié)點(diǎn)192.168.1.43
新建文件配置文件/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
}
vrrp_script check_docker_losa {
# 自身狀態(tài)檢測(cè)
script "sh /etc/keepalived/chk_losa.sh"
interval 3
weight 5
}
vrrp_instance VI_1 {
# 初始化狀態(tài)
state BACKUP
# 虛擬 ip 綁定的網(wǎng)卡
interface ens192
# 此 ID 要與 MASTER 配置一致
virtual_router_id 80
# 默認(rèn)啟動(dòng)優(yōu)先級(jí)
priority 90
advert_int 1
virtual_ipaddress {
# 虛擬 ip 地址
192.168.1.2
}
track_script {
check_docker_losa
}
}
狀態(tài)檢測(cè)腳本類似(1)中主節(jié)點(diǎn)配置
3. 啟動(dòng) keepalived
(1)在主節(jié)點(diǎn)上(192.168.1.16
)
# 啟動(dòng) keepalived 服務(wù)
systemctl start keepalived
# 查看啟動(dòng)日志
tail -f /var/log/messages
Oct 29 05:23:18 localhost Keepalived_vrrp[129640]: VRRP_Instance(VI_1) Transition to MASTER STATE
Oct 29 05:23:19 localhost Keepalived_vrrp[129640]: VRRP_Instance(VI_1) Changing effective priority from 100 to 105
Oct 29 05:23:19 localhost Keepalived_vrrp[129640]: VRRP_Instance(VI_1) Entering MASTER STATE
Oct 29 05:23:19 localhost Keepalived_vrrp[129640]: VRRP_Instance(VI_1) setting protocol VIPs.
Oct 29 05:23:19 localhost Keepalived_vrrp[129640]: Sending gratuitous ARP on ens192 for 192.168.1.2
...
此時(shí)可通過192.168.1.2
訪問主節(jié)點(diǎn)上的服務(wù)
(2)在備節(jié)點(diǎn)上(192.168.1.43
)
# 啟動(dòng) keepalived 服務(wù)
systemctl start keepalived
# 查看啟動(dòng)日志
tail -f /var/log/messages
Oct 29 17:32:09 localhost Keepalived_vrrp[15599]: VRRP_Instance(VI_1) Entering BACKUP STATE
...
4. 驗(yàn)證雙活效果
(1) 停止主節(jié)點(diǎn)上的服務(wù),或者使用systemctl stop keepalived
停止主節(jié)點(diǎn)上的 keepalived 服務(wù)
(2)這時(shí)應(yīng)觀察到備節(jié)點(diǎn)192.168.1.43
上的日志:
Oct 29 17:33:05 localhost Keepalived_vrrp[15599]: VRRP_Instance(VI_1) Transition to MASTER STATE
Oct 29 17:33:06 localhost Keepalived_vrrp[15599]: VRRP_Instance(VI_1) Entering MASTER STATE
Oct 29 17:33:06 localhost Keepalived_vrrp[15599]: VRRP_Instance(VI_1) setting protocol VIPs.
Oct 29 17:33:06 localhost Keepalived_vrrp[15599]: Sending gratuitous ARP on enp3s0 for 192.168.1.2
...
說明IP192.168.1.2
已經(jīng)成功漂移到了備節(jié)點(diǎn)上爽茴,驗(yàn)證訪問192.168.1.2
依然能夠正常提供服務(wù)政基,此時(shí)是備節(jié)點(diǎn)提供服務(wù)。
(3)恢復(fù)主節(jié)點(diǎn)上的服務(wù)闹啦,或者使用systemctl start keepalived
恢復(fù) keepalived 服務(wù)
這時(shí)觀察到備節(jié)點(diǎn)上的日志:
Oct 29 17:38:42 localhost Keepalived_vrrp[15599]: VRRP_Instance(VI_1) Entering BACKUP STATE
Oct 29 17:38:42 localhost Keepalived_vrrp[15599]: VRRP_Instance(VI_1) removing protocol VIPs.
...
說明192.168.1.2
又漂移回了主節(jié)點(diǎn)上沮明,主節(jié)點(diǎn)繼續(xù)提供服務(wù)。