解決高可用服務器只針對物理服務器的問題

默認狀況下 Keepalived軟件僅僅在對方機器宕機或 Keepalived停掉的時候纔會接管業務。但在實際工做中,有業務服務中止而Keepalived服務還在工做的狀況,這就會致使用戶訪問的VIP沒法找到對應的服務,那麼,如何解決業務服務宕機能夠將IP漂移到備節點使之接管提供服務呢?

第一個方法:能夠寫守護進程腳原本處理。當 Nginx業務有問題時,就停掉本地的Keepalived服務,實現P漂移到對端繼續提供服務。實際工做中部署及開發的示例腳本以下:nginx

[root@lb01 shell]# cat check_nginx.sh 
#!/bin/bash
#Author:Mr.Ding
#Created Time:2018-10-05 15:51:54
#Name:check_nginx.sh
#Description:
while true
do
	if [ `netstat -lntup|grep nginx|wc -l` -ne 1 ];then
		systemctl stop keepalived.service
	fi
		sleep 5
done

 此腳本的思路是若沒有80端口存在,就停掉keepalived服務實現釋放本地VIP。在後臺執行上述腳本檢查,也可加入計劃任務中。shell

[root@lb01 shell]# sh check_nginx.sh &
[1] 1428
[root@lb01 shell]# ps -ef |grep check |grep -v grep
root       1428   1320  0 15:56 pts/0    00:00:00 sh check_nginx.sh

 停掉nginx服務,看IP是否發生切換bash

[root@lb01 shell]# systemctl stop nginx.service 
[root@lb01 shell]# netstat -lntup|grep nginx
[root@lb01 shell]# ip add|grep 192.168.200.16

查看備節點是否已接管
[root@lb02 ~]# ip add|grep 192.168.200.16
    inet 192.168.200.16/24 scope global secondary ens33

 第二個方法:能夠使用keepalived的配置文件參數觸發寫好的服務檢測腳本。服務器

[root@lb01 shell]# cat chk_nginx_proxy.sh 
#!/bin/bash
#Author:Mr.Ding
#Created Time:2018-10-05 16:09:27
#Name:chk_nginx_proxy.sh
#Description:
if [ `netstat -lntup|grep nginx|wc -l` -ne 1 ];then
	systemctl stop keepalived.service
fi
[root@lb01 shell]# chmod +x chk_nginx_proxy.sh 
[root@lb01 shell]# ls -l chk_nginx_proxy.sh 
-rwxr-xr-x 1 root root 192 10月  5 16:10 chk_nginx_proxy.sh

 在keepalived.conf文件中配置以下:測試

[root@lb01 shell]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb01
}

vrrp_script chk_nginx_proxy {              #定義vrrp腳本,檢測http端口
script "/server/scripts/shell/chk_nginx_proxy.sh"   #執行腳本,當nginx服務有問題,就停掉keepalived服務

interval 2                          #間隔2秒
weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 55
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16/24 dev ens33 lable ens33:1
    }
	track_script {
	chk_nginx_proxy    #觸發檢查
	}
}

 測試接管結果router

[root@lb01 shell]# systemctl stop nginx
[root@lb01 shell]# ip add|grep 192.168.200.16

在備服務器上查看接管結果
[root@lb02 ~]# ip add|grep 192.168.200.16
    inet 192.168.200.16/24 scope global secondary ens33

 當停掉nginx的時候,keepalived會在2秒鐘內自動停掉,VIP被釋放,由備用端接管,這樣就實現了即服務宕機也會進行IP漂移,業務切換。server

相關文章
相關標籤/搜索