码迷,mamicode.com
首页 > 其他好文 > 详细

解决高可用服务器只针对物理服务器的问题

时间:2018-10-05 18:58:05      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:测试   ali   virt   time   systemctl   ns3   自动   interval   csharp   

默认情况下 Keepalived软件仅仅在对方机器宕机或 Keepalived停掉的时候才会接管业务。但在实际工作中,有业务服务停止而Keepalived服务还在工作的情况,这就会导致用户访问的VIP无法找到对应的服务,那么,如何解决业务服务宕机可以将IP漂移到备节点使之接管提供服务呢?

第一个方法:可以写守护进程脚本来处理。当 Nginx业务有问题时,就停掉本地的Keepalived服务,实现P漂移到对端继续提供服务。实际工作中部署及开发的示例脚本如下:

[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。在后台执行上述脚本检查,也可加入计划任务中。

[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是否发生切换

[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    #触发检查
	}
}

 测试接管结果

[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漂移,业务切换。

 

解决高可用服务器只针对物理服务器的问题

标签:测试   ali   virt   time   systemctl   ns3   自动   interval   csharp   

原文地址:https://www.cnblogs.com/Mr-Ding/p/9745157.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!