美文网首页
nginx+keepalived实现高可用

nginx+keepalived实现高可用

作者: 夏天嘚花花 | 来源:发表于2019-06-25 22:44 被阅读0次

keepalived作用

Keepalived 是一款轻量级HA集群应用,它的设计初衷是为了做LVS集群的HA,即探测LVS健康情况,从而进行主备切换,不仅如此,还能够探测LVS代理的后端主机的健康状况,动态修改LVS转发规则。
举个例子,我们经常用nginx作反向代理负载均衡,通过nginx将客户端请求用轮询方式或者其他方式发送给后端的tomcat服务器。即使后面一台tomcat挂了以后还有其他tomcat可以提供服务。但是当nginx挂了怎么办 ???
所以使用keepalived可以保证nginx的高可用,他能监控nginx的健康状态,当nginx出现宕机时自动主备切换

高可用架构图

image.png

1.两台ngxin分别是128,129 同时作为tomcat的反向代理,128为主,129为备
2.分别在两台nginx上加上keepalived,并设置vip为192.168.199.131
3.用户通过访问192.168.199.131,根据配置上的优先级先将请求发往128,当128挂了以后,通过keepalived上的监控脚本监控nginx宕机,并将128的优先级降低,129作为主机

keepalievd安装

# 使用yum直接安装
yum install -y keepalived
#安装成功后在ect目录下会有对应的配置文件keepalived.conf
[root@server-2 ~]# cd /etc/keepalived/
[root@server-2 keepalived]# ls
keepalived.conf  nginx_check.sh

安装nginx

https://www.runoob.com/w3cnote/openresty-intro.html
启动128 129

image.png
image.png

配置keepalived和监控脚本

修改keepalived.conf
192.168.199.128

! Configuration File for keepalived

global_defs {
   router_id keep128
}

vrrp_script chk_nginx {
   script "/etc/keepalived/nginx_check.sh"
   #执行脚本的周期 2秒钟检查一次
   interval 2
   #当检查到nginx挂后,优先级-20,让129成为主
   weight -20
}


vrrp_instance VI_1 {
    state MASTER
    #eth0 对应的网卡,如果网卡名称不是这个需要跟网卡命名一致
    interface eth0
    virtual_router_id 128
    mcast_src_ip 192.168.199.128
    #优先级
    priority 100
    #重启后还是主节点
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    chk_nginx
    }
    virtual_ipaddress {
        #vip-虚拟ip
        192.168.199.130
    }
}

192.168.199.129

! Configuration File for keepalived

global_defs {
   router_id keep129
}

vrrp_script chk_nginx {
   script "/etc/keepalived/nginx_check.sh"
   #执行脚本的周期 2秒钟检查一次
   interval 2
   #当检查挂掉后权重-20使其能成为主节点
   weight -20
}


vrrp_instance VI_1 {
    state BACKUP
    #eth0 对应的网卡,如果网卡名称不是这个需要跟网卡命名一致
    interface eth0
    virtual_router_id 129
    mcast_src_ip 192.168.199.129
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    chk_nginx
    }
    virtual_ipaddress {
    #vip-虚拟ip
        192.168.199.130
    }
}

检查脚本 nginx_check.sh
当检测到nginx为空时,杀掉keepalived进程

#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [$A -eq 0]; then
   /usr/local/openresty/nginx/sbin
   sleep 2
   if [ `ps -C nginx --no-header |wc -l` -eq 0 ]; then
      killall keepalived
   fi
fi

相关文章

网友评论

      本文标题:nginx+keepalived实现高可用

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