nginx使用keepalived做高可用

環(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容