一、概念

在软件开发中,经常提倡开发高可用的系统,但是,什么是高可用呢?

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。 ------百度百科

简而言之,就是让系统尽量不停止工作。
通过nginx的负载均衡可以让其他服务器降低负载,减小宕机的概率。但是,运行nginx的服务器可是接收着海量的请求并且还要负责转发,当它承受不了这些负载的时候,也会宕机。这时候,最常用的做法就是提前准备备用的nginx服务器来代替它,称为nginx的主备模式

二、准备工作

首先,准备两台都安装了nginx的服务器。复习一下安装nginx的步骤,如下:

# 安装C++编译器
yum -y install gcc gcc-c++
# 下载 pcre-8.37.tar.gz
wget https://udomain.dl.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
# 解压缩
tar -xvf pcre-8.37.tar.gz
# 配置
cd pcre-8.37
./configure
# 编译和安装
make && make install
# 安装其他依赖
yum -y install zlib zlib-devel openssl openssl-devel
# 下载nginx压缩包:
wget http://nginx.org/download/nginx-1.12.2.tar.gz
# 解压缩 
tar -xvf nginx-1.12.2.tar.gz
# 配置
cd nginx-1.12.2
./configure
# 编译和安装
make && make install

然后,还需要安装keepalived用来检测nginx是否宕机,安装命令如下:

yum -y install keepalived

可用以下命令验证是否安装成功:

rpm -q -a keepalived

三、keepalived配置

keepalived配置文件是位于/etc/keepalived目录的keepalived.conf
打开后,首先看到全局定义块global defs,这里定义了一些全局变量,我们暂时不需要修改。:

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

再往下看,是vrrp_script块,这里设置检测nginx状态的脚本信息

vrrp_script chk_http_port {
   script "/usr/local/nginx_check.sh"  # 脚本的位置
   interval 2    # 检测的时间间隔
   weight 2
}

脚本nginx_check.sh的内容如下,把该文件放到上面设置的目录即可:

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

然后是vrrp_instance块,这里设置实例信息以及绑定虚拟IP

vrrp_instance VI_1 {
    state MASTER    # 主服务器为MASTER,备用服务器改为BACKUP
    interface eth0    # 网卡名称
    virtual_router_id 51    # 主机和备机的virtual_router_id必须相同
    priority 100    # 优先级,主机需要取值较大,备机取值较小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.239.50    # 虚拟IP地址
    }
}

最后,启动nginxkeepalived即可:

# 启动nginx
/usr/local/nginx/sbin/nginx
# 启动keepalived服务
systemctl start keepalived.service

四、测试

在外部主机的浏览器上访问http://虚拟IP/,跳转到nginx主页:

nginx可视化管理 nginx怎么做高可用_nginx可视化管理

关闭主服务器,重新在外部主机的浏览器上访问http://虚拟IP/,仍然能跳转到nginx主页,证明nginx主备模式配置成功。

五、原理解释

由于用户访问的是两台服务器绑定的虚拟IP,所以两台服务器都可以接收到访问这个IP的请求。这里通过keepalived周期性检测nginx的运行状态,当发现主服务器的nginx停止工作时,请求会发送到备用服务器,由备用服务器来处理。