環(huán)境說(shuō)明
VIP: 10.1.xxx.73
| IP | 服務(wù) |
|---|---|
| 10.1.xx.68 | keepalived(master),nginx-01 |
| 10.1.xx.69 | keepalived(backup),nginx-02 |
1. 安裝
yum install keepalived -y
2. 安裝 MASTER節(jié)點(diǎn)
2.1 配置文件
修改配置文件 /etc/keepalived/keepalived.conf
# ConfigurationFile for keepalived
vrrp_script chk_http_nginx {
script "/etc/keepalived/check_nginx_status.sh"
interval 2
}
vrrp_instance nginx {
state MASTER
interface ens192
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass liubei
}
track_script {
chk_http_nginx
}
virtual_ipaddress {
10.1.xxx.73 dev ens192 scope global
}
}
- 上文注釋如下
# ConfigurationFile for keepalived
#健康檢查模塊,將被vrrp_instance引用
vrrp_script chk_http_nginx {
script "/etc/keepalived/check_nginx_status.sh" ## 檢查nginx存活腳本(后邊會(huì)配置)
interval 2 # 健康檢查間隔
}
vrrp_instance nginx {
state MASTER #主機(jī)是master
interface ens192 #綁定虛擬Ip的網(wǎng)卡
virtual_router_id 51 #虛擬路由ID,集群中所有節(jié)點(diǎn)一致即可
priority 100 #權(quán)重,主節(jié)點(diǎn)設(shè)置大一些
advert_int 1 #主從通信間隔
nopreempt #非競(jìng)爭(zhēng)(允許低權(quán)重從節(jié)點(diǎn)做主,避免從節(jié)點(diǎn)持續(xù)競(jìng)爭(zhēng))。master上不生效,可不寫(xiě)。
authentication {
auth_type PASS # 節(jié)點(diǎn)間認(rèn)證方式
auth_pass liubei #所有節(jié)點(diǎn)一致即可
}
track_script {
chk_http_nginx #引用上邊健康檢查模塊
}
virtual_ipaddress {
10.1.xxx.73 dev ens192 scope global #global表示允許所有地址連接;site 僅允許ipv6 和本機(jī)連接;link 僅允許本機(jī)連接;host 僅允許內(nèi)部連接
}
}
2.2 創(chuàng)建檢查腳本
創(chuàng)建配置文件中引用的健康檢查腳本/etc/keepalived/check_nginx_status.sh。
說(shuō)明:curl 本機(jī)nginx 80端口,如果報(bào)錯(cuò)關(guān)閉keepalive。該腳本根據(jù)實(shí)際情況更改。
#!/bin/bash
/usr/bin/curl http://localhost &>/dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi
測(cè)試時(shí)如果不能調(diào)用,添加執(zhí)行權(quán)限。
2.3 啟動(dòng)
systemctl start keepalived
查看結(jié)果
10.1.xxx.73/32 已綁定到 ens192網(wǎng)卡
[root@web-01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:xx:a7:92:15 brd ff:ff:ff:ff:ff:ff
inet 10.1.xxx.68/24 brd 10.1.30.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet 10.1.xxx.73/32 scope global ens192
valid_lft forever preferred_lft forever
inet6 fe80::a7bc:8df1:4b85:3f3/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::39a2:fd70:b54a:7e5c/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::aff7:274:2d01:8423/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3. 安裝BACKUP節(jié)點(diǎn)
3.1 配置文件
修改配置文件 /etc/keepalived/keepalived.conf
# ConfigurationFile for keepalived
vrrp_script chk_http_nginx {
script "/etc/keepalived/check_nginx_status.sh"
interval 2
weight 2
}
vrrp_instance nginx {
state BACKUP
interface ens192
virtual_router_id 51
priority 80
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass liubei
}
track_script {
chk_http_nginx
}
virtual_ipaddress {
10.1.xxx.73 dev ens192 scope global
}
}
說(shuō)明見(jiàn)master節(jié)點(diǎn)配置的注釋。區(qū)別:
- priority 80,權(quán)重調(diào)低一些。
- state BACKUP,狀態(tài)改為備節(jié)點(diǎn)。
3.2 創(chuàng)建檢查腳本
創(chuàng)建配置文件中引用的健康檢查腳本/etc/keepalived/check_nginx_status.sh。
說(shuō)明:curl 本機(jī)nginx 80端口,如果報(bào)錯(cuò)關(guān)閉keepalive。該腳本根據(jù)實(shí)際情況更改。
#!/bin/bash
/usr/bin/curl http://localhost &>/dev/null
if [ $? -ne 0 ]
then
/etc/init.d/keepalived stop
fi
測(cè)試時(shí)如果不能調(diào)用,添加執(zhí)行權(quán)限
3.3 啟動(dòng)
systemctl start keepalived
4. 測(cè)試
關(guān)閉keepalived測(cè)試
1)關(guān)閉master上keepalived
- 主節(jié)點(diǎn)失去 VIP
- 備節(jié)點(diǎn)獲得 VIP
2)啟動(dòng)master上keepalived
- 備節(jié)點(diǎn)失去VIP
- 主節(jié)點(diǎn)重新獲得VIP
nginx宕機(jī)測(cè)試
1)關(guān)閉master上nginx服務(wù)
- 主節(jié)點(diǎn)keepalived被健康檢查腳本關(guān)閉,主節(jié)點(diǎn)失去 VIP
- 備節(jié)點(diǎn)獲得 VIP
2)啟動(dòng)master上nginx服務(wù),重啟keepalived
- 備節(jié)點(diǎn)失去VIP
- 主節(jié)點(diǎn)重新獲得VIP
