默認狀況下 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