龙叔NGINX:nginx+keepalive双VIP高可用搭建

1,733 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


nginx常见的高可用方式有两种:

1、主备方式:搭建两个NG实例,配置文件一致,使用keepalive进行VIP的绑定,主节点异常时,VIP漂移到备节点

优点:搭建简单

缺点:浪费一个NG节点


2、F5对NG做负载均衡:多个相同配置文件的NG实例使用F5做负载均衡,保证了NG的高可用

优点:架构稳定,健壮性更强

缺点:F5太贵,一般公司应该不会去用


本文介绍另一种KeepAlive的NG搭建方式,也比较实用的nginx在生产中的架构模式:

nginx+keepalive+双VIP

架构图如下:

         主机1异常时,VIP1切换到主机2,此时两个VIP都指向主机2,等主机1恢复,VIP1自动切回主机1

nginx的安装这里就不过多描述了,主要讲讲keepalive的配置

假设主机和VIP如下:

        主机:1.1.1.1,2.2.2.2

        VIP:11.11.11.11,22.22.22.22

具体keepalive配置 以及 keepalive使用到的nginx健康检查脚本 如下:

【1.1.1.1主机 keepalive配置】

 ! Configuration File for keepalived
 global_defs {
     router_id sz-lvs1
 }

 vrrp_script check_nginx {
     script "/etc/keepalived/check_nginx.sh"
     interval 2
     weight -50
 }

 vrrp_instance VI_1 {
     state MASTER
     interface eth0
     virtual_router_id 246
     priority 100
     authentication {
         auth_type PASS
         auth_pass 2461
     }
     virtual_ipaddress {
         11.11.11.11
     }
     track_script {
         check_nginx
     }
 }

 vrrp_instance VI_2 {
     state BACKUP
     interface eth0
     virtual_router_id 247
     priority 70
     authentication {
         auth_type PASS
         auth_pass 2471
     }
     virtual_ipaddress {
         22.22.22.22
     }
     track_script {
         check_nginx
     }
 }

【2.2.2.2主机 keepalive配置】

 ! Configuration File for keepalived
 global_defs {
     router_id sz-lvs1
 }

 vrrp_script check_nginx {
     script "/etc/keepalived/check_nginx.sh"
     interval 2
     weight -50
 }

 vrrp_instance VI_1 {
     state BACKUP
     interface eth0
     virtual_router_id 246
     priority 70
     authentication {
         auth_type PASS
         auth_pass 2461
     }
     virtual_ipaddress {
         11.11.11.11
     }
     track_script {
         check_nginx
     }
 }

 vrrp_instance VI_2 {
     state MASTER
     interface eth0
     virtual_router_id 247
     priority 100
     authentication {
         auth_type PASS
         auth_pass 2471
     }
     virtual_ipaddress {
         22.22.22.22
     }
     track_script {
         check_nginx
     }
 }

【keepalive配置的nginx健康检查脚本check_nginx.sh】

 #!/bin/sh
 count=`ps aux | grep -v grep |grep -v "check_nginx\|nginx.conf" | grep nginx | wc -l`
 if [ $count -gt 0 ]; then
     exit 0
 else
     exit 1
 fi

这样就完成高可用的nginx的搭建了