【环境问题】解决nginx进程和keepalived不同时存在问题

1.1.1.1 问题描述

         keepalived是通过检测keepalived进程是否存在判断服务器是否宕机,如果keepalived进程在但是nginx进程不在了那么keepalived是不会做主备切换,所以我们需要写个脚本来监控nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉。

 

1.1.1.2 nginx进程检测脚本

         在主nginx上需要编写nginx进程检测脚本(check_nginx.sh),判断nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉,check_nginx.sh内容如下:

 

#!/bin/bash

# 如果进程中没有nginx则将keepalived进程kill掉

A=`ps -C nginx--no-header |wc -l`      ## 查看是否有 nginx进程 把值赋给变量A

if [ $A -eq 0];then                    ## 如果没有进程值得为零

       service keepalived stop          ## 则结束 keepalived 进程

fi

 

将check_nginx.sh拷贝至/etc/keepalived下,

脚本测试:

将nginx停止,将keepalived启动,执行脚本:sh/etc/keepalived/check_nginx.sh

 

从执行可以看出自动将keepalived进程kill掉了。

 

1.1.1.3 修改keepalived.conf

修改主nginx的keepalived.conf,添加脚本定义检测:

注意下边红色标识地方:

 

#全局配置

global_defs {

   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个

     [email protected]

   }

   [email protected]  #指定发件人

   #smtp_server XXX.smtp.com                             #指定smtp服务器地址

   #smtp_connect_timeout 30                               #指定smtp连接超时时间

   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识

}

vrrp_script check_nginx {

    script"/etc/keepalived/check_nginx.sh"         ##监控脚本

    interval 2                                      ##时间间隔,2

    weight 2                                        ##权重

}

vrrp_instanceVI_1 {

    state MASTER           #标示状态为MASTER 备份机为BACKUP

    interface eth0         #设置实例绑定的网卡

    virtual_router_id 51   #同一实例下virtual_router_id必须相同

    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99

    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒

    authentication {       #设置认证

        auth_type PASS     #主从服务器验证方式

        auth_pass 8888

    }

   track_script {

       check_nginx        #监控脚本

   }

    virtual_ipaddress {    #设置vip

        192.168.101.100       #可以多个虚拟IP,换行即可

    }

 

}

 

修改后重启keepalived

 

1.1.1.4 测试

回到负载均衡高可用的初始状态,保证主、备上的keepalived、nginx全部启动。

停止主nginx服务

 

观察keepalived日志:

tail -f /var/log/keepalived.log

查看keepalived进程已经不存在。

查看eth0已经没有绑定vip。

你可能感兴趣的:(keepalived,nginx,环境问题)