Nginx+Keepalived实现Nginx高可用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx+Keepalived实现Nginx高可用相关的知识,希望对你有一定的参考价值。

    在架构设计中,可以利用nginx的反向代理和负载均衡实现后端应用的高可用性,同时我们还需要考虑Nginx的单点故障。真正做到架构高可用性。

主要考虑以下几点:

 1、Nginx服务因为意外现象挂掉

 2、服务器宕机导致NGINX不可用

 目前主流的解决方案就是keepalived+nginx 实现nginx的故障转移,同时做好监控报警。在自动故障转移的同时能通知到相关的应用负责人检查相关应用,排查隐患,彻底解决问题。

模拟环境:

序号环境名称IP地址环境介绍
1访问客户端110.57.3.29mac  有Chrome等浏览器
2nginx备+keepalived备10.57.31.205反向代理 nginx高可用备
3nginx主+keepalived主10.57.31.206反向代理 nginx高可用主
4web应用服务器10.57.27.20web应用
5VIP10.57.31.230

nginx服务和web应用是已经配置好的环境,这里就不介绍相关的配置。强烈建议关闭Firewalld和selinux服务 

1、keepalived的安装

yum install -y  keepalived

  2、keepalived主(10.57.31.206)

[[email protected] ~]# cat  /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nginx02  # router_id  唯一标识符
   vrrp_skip_check_adv_addr
   vrrp_stricti
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_nginx {  
	script "/etc/keepalived/nginx_check.sh"   #nginx服务检查脚本
	interval 1
	weight -2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0  #网卡  
    virtual_router_id 52  #默认为51  配置完发现主备切换有问题 更改为52 发现好了  原因未知
    priority 150     #主备的优先级priority 
    advert_int 1     #检查时间1秒
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script  {
	check_nginx
	}

    virtual_ipaddress {
        10.57.31.230/24    #vip地址 
    }
}
}

启动服务后观察网卡信息

技术分享图片

3、keepalived备(10.57.31.205)

# Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]loc
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nginx01
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 52

    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.57.31.230/24
    }
}

}

启动服务后观察网卡信息

技术分享图片

故障转移

引起keepalived vip漂移的几个常见因素

1、服务器宕机 

2、监听网卡故障  

3、某一服务或者其他事件触发 可以用脚本监听服务端口 服务 进程等

测试一:将主服务器宕机

  测试步骤、

    1、ping VIP 

   2、将主keepalived服务器宕机

   3、观察ping情况和VIP飘移情况 同时坚持web服务

   结果:

 ping出现过丢包

技术分享图片

2 VIP转移

技术分享图片

VIP漂移成功,服务能正常访问 恢复主机后 接管备机的VIP

技术分享图片

测试二、停止主节点的网络服务

技术分享图片

备节点

技术分享图片

出现脑裂情况找不到VIP


测试三  测试nginx服务不能正常工作时VIP漂移

#!/bin/bash
#检查nginx的pid文件是否存在 不存在时 killall  keepalivedVIP漂移
NGINXPID="/usr/install/nginx/logs/nginx.pid"
if  [ ! -f  $NGINXPID  ];then
	killall keepalived
fi

配置文件已经在上面的模块中再不描述。

测试过程中遇到的问题:

1、virtual_router_id 配置为51 的时候漂移有问题

2、漂移过程中 备机防火墙意外开启 导致网络无法访问

技术分享图片


以上是关于Nginx+Keepalived实现Nginx高可用的主要内容,如果未能解决你的问题,请参考以下文章

Centos 7 Dockerdocker-composeRegistratorConsulConsul Template和Nginx实现高可扩展的Web框架

Lvs+keepalived+Nginx双机热备实现Nginx高可用

nginx和keepalived实现nginx高可用

nginx结合keepalived实现高可用集群

Nginx+Keepalived实现Nginx高可用

实战 | Nginx+keepalived 实现高可用集群