美文网首页
nginx+keepalived高可用,keepalived守护

nginx+keepalived高可用,keepalived守护

作者: Bitter255 | 来源:发表于2019-01-28 17:37 被阅读0次

    1、keepalived实现nginx高可用

    1.1 nginx监控脚本

    该脚本检测ngnix的运行状态,如果nginx服务挂了则直接停止keepalived,准备让其它机器接管。

    /etc/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
    

    1.2 keepalived.conf配置

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         774626778@qq.com
    
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    
    vrrp_script check_nginx {
        script "/etc/keepalived/check_nginx.sh"
        interval 2
        weight 2
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
            track_script {
            check_nginx
       }
        virtual_ipaddress {
            192.168.153.200
        }
    }
    

    在其它备机BACKUP上,只需要改变 state MASTER -> state BACKUP,priority 100 -> priority 99即可。

    service keepalived restart

    1.3 nginx+keepalived高可用测试

    跳转到nginx启动目录下执行命令:sbin/nginx -s stop,模拟主机的nginx服务挂了,
    查看keepalived服务发现没有被杀死。


    VIP地址没有切换到备份机


    2、问题分析

    nginx_check.sh脚本手动执行没有问题。keepalived、nginx、nginx_check.sh 配置文件都检查了很久没问题。
    通过百度查找,发现keepalived配置文件里写了这个vrrp_script,大括号需要换行执行,否则不起作用。
    keepalived.conf配置文件改为:

    vrrp_script check_nginx
    {
        script "/etc/keepalived/check_nginx.sh"         ##监控脚本
        interval 2                                      ##时间间隔,2秒
        weight -5                                        ##权重
    }
    

    重启keepalived测试,发现VIP仍然没有切换到备份机上。

    后来想一下,会不会是nginx_check.sh脚本的编码格式出现问题?



    使用:set ff 查看nginx_check.sh脚本格式,发现当前脚本格式是dos。
    使用:set fileformat=unix修改脚本格式,再查看脚本格式为:



    再重启keepalived,测试发现问题解决。

    注意:如果使用Notepad++的NppFTP插件修改服务器的sh文件时,要注意文件的编码格式。

    相关文章

      网友评论

          本文标题:nginx+keepalived高可用,keepalived守护

          本文链接:https://www.haomeiwen.com/subject/fboajqtx.html