上一章节,我们只是做了Keepalived宕机的测试,但是并没有针对Nginx进行监控,加入Nginx断开后,keepalived并不知道,因此还没有真正做到当Nginx服务挂掉后,Keepalived能够切换到备用服务器上。接下来我们结合Nginx反向代理来做对虚拟Ip的监控。

此时我们需要把lb01和lb02的Nginx配置文件修改一下

[root@lb01 application]# vim /application/nginx/conf/nginx.conf
http{
     .
     .
     .
     upstream default{
        server  172.16.1.5:8080;
        server  172.16.1.6:8080;
     }     
     
     server {
        listen      10.0.0.3:80;              ####将监听地址修改为Keepalived所监听的虚拟IP
        server_name localhost;
        location / {
          proxy_pass http://default;
        }  
    }
}

##注意,nginx配置中无法监听不存在的地址,这里需要修改内核参数,如下:(两个服务器都加上)

[root@lb01 application]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
[root@lb01 application]# sysctl -p

这仍然不能满足当Nginx服务挂掉后,Keepalived实现主备切换。那么应该怎么做了?实现Keepalived主备切换的前提条件是keepalived服务挂掉,那么我们便可以将Nginx服务和Keepalived服务关联起来,一旦Nginx服务中断,让Keepalived也跟着一起中断,这样是不是就能实现当Nginx服务中断,Keepalived主备切换,从而10.0.0.3虚拟Ip漂移到10.0.0.6(lb02)上。

 

这里我们通过shell脚本和定时任务,将Nginx服务与Keepalived服务的生死绑定到一起。

[root@lb01 application]# mkdir scripts
[root@lb01 scripts]# cd /application/scripts/
[root@lb01 scripts]# vim check_web.sh 

#!/bin/bash
nginx_info=$(ps -ef|grep [n]ginx|wc -l)

if [ $nginx_info -lt 2 ]
then
    /etc/initd./keepalived stop
fi

#请添加执行权限:chmod +x check_web.sh

 

将check_web.sh脚本加入到Keepalived配置文件中

global_defs {
   router_id lb01_lvs
}

vrrp_script check_web {    ###该模块需要添加到global_defs和vrrp_instance中间
    #定义一个监控脚本,必须要有执行权限
    script "/application/scripts/check_web.sh"
    #执行脚本间隔时间
    interval 2
    #脚本执行完成,让优先级和权重值进行运算,从而实现主备切换
    weight 2
}


vrrp_instance group01 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3/24 dev eth0 label eth0:1
    }

    track_script {    ##引用执行的脚本
        check_web
    }
}

###注意:字符与{}之间有空格,否则keepalived不生效

 

##测试

[root@lb01 application]# /application/nginx/sbin/nginx
[root@lb01 application]# /etc/init.d/keepalived start
Starting keepalived:                                       [  OK  ]
[root@lb01 application]# /application/nginx/sbin/nginx -s stop
[root@lb01 application]# /etc/init.d/keepalived status         ##停止nginx,2s后keepalived也停止
keepalived is stopped
[root@lb01 application]# 

 

最后修改于 2020-01-06 15:01:43
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇