keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

實驗環境

兩臺CentOS-7.5虛擬機
web1:10.0.11.203
web2:10.0.11.204
VIP :10.0.11.210
web類型:nginx
客戶端:自用筆記本(win10)
nginx狀態檢測腳本:ck_nginx.sh

實驗一、使用keepalived簡單實現web集羣的高可用功能

1、準備兩臺web服務器

1)web1網卡情況
[root@CentOS ~]#
[root@CentOS ~]# ip a
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

2)web2網卡情況
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# ip a
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

3)安裝nginx

web1端:
[root@CentOS ~]#
[root@CentOS ~]# yum install nginx
[root@CentOS ~]# rpm -qa nginx
nginx-1.16.1-1.el7.x86_64
[root@CentOS ~]#
[root@CentOS ~]#
[root@CentOS ~]# > /usr/share/nginx/html/index.html #清空默認網頁
[root@CentOS ~]# echo web1 > /usr/share/nginx/html/index.html #讓網頁顯示web1
[root@CentOS ~]# cat /usr/share/nginx/html/index.html
web1
[root@CentOS ~]#
[root@CentOS ~]# systemctl start nginx #啓動nginx
[root@CentOS ~]# systemctl enable nginx #設置nginx開機自啓動
C:\Users\Administrator>curl 10.0.11.203
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

web2端:
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# yum install nginx
[root@CentOS-2 ~]# rpm -qa nginx
nginx-1.16.1-1.el7.x86_64
[root@CentOS-2 ~]#
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# > /usr/share/nginx/html/index.html
[root@CentOS-2 ~]# echo web2 > /usr/share/nginx/html/index.html
[root@CentOS-2 ~]# cat /usr/share/nginx/html/index.html
web2
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# systemctl start nginx
[root@CentOS-2 ~]# systemctl enable nginx
C:\Users\Administrator>curl 10.0.11.204
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

4)安裝keepalived
說明:兩臺web服務器都需要安裝keepalived服務

web1端:
[root@CentOS ~]#
[root@CentOS ~]# yum install keepalived
[root@CentOS ~]# rpm -qa keepalived
keepalived-1.3.5-16.el7.x86_64
[root@CentOS ~]#

web2端:
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# yum install keepalived
[root@CentOS-2 ~]# rpm -qa keepalived
keepalived-1.3.5-16.el7.x86_64
[root@CentOS-2 ~]#

5)配置兩臺keepalived並啓動

web1端:
[root@CentOS ~]#
[root@CentOS ~]# > /etc/keepalived/keepalived.conf #清空原來的配置
[root@CentOS ~]# vim /etc/keepalived/keepalived.conf #編輯配置文件,自定義keepalived配置文件
[root@CentOS ~]# cat /etc/keepalived/keepalived.conf
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用
[root@CentOS ~]#
[root@CentOS ~]# systemctl start keepalived #啓動
[root@CentOS ~]# systemctl enable keepalived #設置開機啓動

web2端:
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# > /etc/keepalived/keepalived.conf
[root@CentOS-2 ~]# vim /etc/keepalived/keepalived.conf
[root@CentOS-2 ~]# cat /etc/keepalived/keepalived.conf
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# systemctl start keepalived #啓動
[root@CentOS-2 ~]# systemctl enable keepalived #設置開機啓動

3、測試訪問
方法:用客戶端通過VIP測試訪問web

C:\Users\Administrator>curl 10.0.11.210 #個人筆記本通過VIP測試訪問web
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

拔掉web1服務器的網線,用客戶端通過VIP測試訪問web:
C:\Users\Administrator>curl 10.0.11.210
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

再次將web1服務器的網線接好,用客戶端通過VIP測試訪問web:
C:\Users\Administrator>curl 10.0.11.210
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

4、實驗一結論:
1)利用keepalived成功實現了web服務器集羣的高可用
2)雖然可以實現在服務器發生異常高故障的情況下web的高可用,但是遺憾的是此時無法實現針對web服務異常故障所引發的主備高可用切換;因爲keepalived無法感知nginx服務的運行狀態和健康狀態。


實驗二、使用keepalived結合nginx監控檢測腳本實現更加靈活的高可用集羣功能

實驗環境:基於實驗一的環境,以實驗一的環境爲基礎進行
與實驗一的唯一區別:需要準備nginx的健康狀態檢測腳本

1、編寫nginx的健康檢測腳本

web1端執行:
[root@CentOS ~]#
[root@CentOS ~]# vim /etc/keepalived/ck_nginx.sh #編寫keepalived檢測nginx健康狀態的腳本

#!/bin/bash
#檢查ngin進程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}"="0" ]; then
#嘗試啓動一次ngnx,停止5秒後再次檢測
systemctl start nginx
sleep 5
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}"="0" ]; then
#如果啓動沒成功,就殺掉keepave觸發主備切換
systemctl stop nginx
fi
fi
[root@CentOS ~]#
[root@CentOS ~]# cat /etc/keepalived/ck_nginx.sh #查看腳本內容
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用
[root@CentOS ~]#
[root@CentOS ~]# chmod +x /etc/keepalived/ck_nginx.sh #授予腳本可執行權限
[root@CentOS ~]#

web2端執行:
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# vim /etc/keepalived/ck_nginx.sh

#!/bin/bash
#檢查ngin進程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}"="0" ]; then
#嘗試啓動一次ngnx,停止5秒後再次檢測
systemctl start nginx
sleep 5
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}"="0" ]; then
#如果啓動沒成功,就殺掉keepave觸發主備切換
systemctl stop nginx
fi
fi

[root@CentOS-2 ~]#
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# cat /etc/keepalived/ck_nginx.sh
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# chmod +x /etc/keepalived/ck_nginx.sh
[root@CentOS-2 ~]#

2、編輯修改nginx的配置文件
web1端:
[root@CentOS ~]#
[root@CentOS ~]# vim /etc/keepalived/keepalived.conf #自定義配置文件

! Configuration File for keepalived

global_defs {
notification_email {br/>[email protected]
}
smtp_server 192.168.23.1
smtp_connect_timeout 30
router_id 1
}

vrrp_script chk_nginx {
script "/etc/keepalived/ck_nginx.sh"
interval 2
weight -5
fail 3
}

vrrp_instance VI_1 {
state MASTER
interface ens32
mcast_src_ip 10.0.11.203
virtual_router_id 55
priority 100
advert_int 1

authentication {
auth_type PASS
auth_pass 123456
}

virtual_ipaddress {
    10.0.11.210/24
}

track_script {
     chk_nginx
}

}

[root@CentOS ~]#
[root@CentOS ~]# systemctl restart keepalived #重啓keepalived使配置生效
[root@CentOS ~]#

web2端:
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# vim /etc/keepalived/keepalived.conf #自定義配置文件

! Configuration File for keepalived

global_defs {
notification_email {br/>[email protected]
}
smtp_server 192.168.23.1
smtp_connect_timeout 30
router_id 1
}

vrrp_script chk_nginx {
script "/etc/keepalived/ck_nginx.sh"
interval 2
weight -5
fail 3
}

vrrp_instance VI_1 {
state MASTER
interface ens32
mcast_src_ip 10.0.11.204
virtual_router_id 55
priority 95
advert_int 1

authentication {
auth_type PASS
auth_pass 123456
}

virtual_ipaddress {
    10.0.11.210/24
}

track_script {
     chk_nginx
}

}

[root@CentOS-2 ~]#
[root@CentOS-2 ~]#
[root@CentOS-2 ~]# systemctl restart keepalived #重啓keepalived使配置生效

測試keepalived功能:
由於腳本內容裏邊,nginx服務在停止以後會立馬自啓動,所以我們模擬服務器異常關閉導致nginx服務沒有辦法實現自啓動
[root@CentOS ~]#
[root@CentOS ~]# init 0 #關閉web1服務器

[root@CentOS-2 ~]#
[root@CentOS-2 ~]# ping 10.0.11.203 #用web2去pingweb1,發現web1已經被關閉
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

此時使用客戶端去測試驗證keepalived功能:
C:\Users\Administrator>curl 10.0.11.210 #用客戶端通過VIP去訪問web服務器
keepalived結合nginx狀態檢測腳本實現對web服務器集羣的高可用

3、實驗二結論
使用keepalived服務結合nginx健康狀態檢測腳本成功實現了對web服務器集羣的高可用

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