zoukankan      html  css  js  c++  java
  • 解决高可用服务器只针对物理服务器的问题

    默认情况下 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漂移,业务切换。

  • 相关阅读:
    POJ 1789
    南华大学 复读机(并查集)
    C
    F
    POJ 1988 Cube Stacking
    并查集(一)
    把采集到的数据发送到一个Google Docs或者Google Form上 这个网站提供了参考和例子
    几种空气颗粒物和空气质量传感器
    整流桥
    STM32 中的CEC
  • 原文地址:https://www.cnblogs.com/Mr-Ding/p/9745157.html
Copyright © 2011-2022 走看看