nginx之路(六):nginx高可用的详细配置步骤

前言

nginx之路(六):nginx高可用的详细配置步骤_第1张图片

我们使用keepalived来管理两台设备的Nginx,并虚拟出一个IP,外界请求直接访问虚拟IP而不是真正的Nginx,让虚拟IP去访问提供服务的Nginx然后再由Nginx去访问tomcat。当我们其中一台nginx挂掉之后另一台nginx就会顶上来,这就是我们说的nginx的高可用

准备工作

提前准备好如下工作

1.需要两台服务器
2.在两台服务器安装好nginx

安装keepalived

在两台服务器上都安装keepalived

安装yum命令

yum install keepalived

keepalived常用命令

systemctl start keepalived.service

systemctl stop keepalived.service

systemctl restart keepalived.service

keepalived查看日志

tail -f  /var/log/messages

安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf,我们下面的就是配置这个文件

配置高可用

修改keepalived配置文件

首先我们配置keepalived

找到第一台机器的/etc/keepalived目录的keepalived.conf配置文件,打开;

nginx之路(六):nginx高可用的详细配置步骤_第2张图片

我们主要是配置这两个节点,下方其他的是配置的lvs,我们不需要修改

将这两块内容修改如下

global_defs {

   notification_email { # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个

     acassen@firewall.loc  #  收件人邮箱1

     failover@firewall.loc #  收件人邮箱2

     sysadmin@firewall.loc #  收件人邮箱3

   }

   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通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。

   #vrrp_strict   # 严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。

   vrrp_garp_interval 0  # 小数类型,单位秒,在一个网卡上每组gratuitous arp消息之间的延迟时间,默认为0,一个发送的消息=n组 arp报文

   vrrp_gna_interval 0 # 小数类型,单位秒, 在一个网卡上每组na消息之间的延迟时间,默认为0

}

 

# vrrp实例  我们集群设置 多机配置,除了state和priority不一样,其他都一样

vrrp_instance VI_1 {

    state MASTER  # 服务器状态 MASTER是主服务器  BACKUP是备份服务器 主服务器的priority要比备份服务器大

    interface ens33 # 通信端口 通过ip addr可以看到 根据自己的机器配置

    virtual_router_id 51  # vrrp实例id  keepalived集群,实例id必须一致

    priority 100  # 权重比 主服务器的priority要比备份服务器大

    advert_int 1  # 心跳间隔  单位秒  keepalived多机器集群 通过心跳检测,如果发送心跳没反应 就立刻接管;

    authentication { # 服务器之间通信密码

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress { # 自定义虚拟IP 

        192.168.91.199

    }

}

把这个配置复制到从服务器上,state改为BACKUP,从服务器的priority改小

到这里我们高可用就初步完成了,可以开启nginx和keepalived测试了

这里注意别踩到小白坑(我踩到了/(ㄒoㄒ)/~~)↓

ps:自定义的虚拟ip得根据真实ip设置,否则会出现真实ip可以访问到,虚拟ip访问不到
例:比如我的真实ip是192.168.91.138,那我的虚拟ip可以设置为192.168.91.139~255,前面三个数得一致,后面一个数可以是139到255

nginx之路(六):nginx高可用的详细配置步骤_第3张图片

添加检测脚本

上面的配置已经可以初步测试nginx的高可用,比如我们关掉主服务器的keepalived,从服务器的nginx就会替代主nginx。

但如果是我们的主nginx挂掉而主keepalived没挂,我们从nginx就不能替代主nginx,实际情况中nginx比keepalived更容易挂掉,那这情况怎么解决你呢?

我们可以在keepalived添加脚本,当检测到我们的nginx挂掉之后而keepalived没挂掉,我们可以让脚本主动尝试重启nginx服务,如果实在重启不了nginx,我们让脚本主动关闭keepalived好让从nginx替代上来

修改keepalived.conf

在这个位置添加配置

nginx之路(六):nginx高可用的详细配置步骤_第4张图片

vrrp_script chk_http_port {

 script "/home/nginx_check.sh" #脚本地址

 interval 2 #检测脚本执行的间隔

 weight 2 #比重

}

然后相对应的地址创建nginx_check.sh

touch /home/nginx_check.sh

脚本内容

#!/bin/bash

echo 'xxxxxx'

count_nginx=`ps -ef|grep -w nginx|grep -v grep|wc -l`

echo $count_nginx

if [ $count_nginx -eq 0 ];then

    systemctl start nginx.service

    sleep 2

    if [ `ps -ef|grep -w nginx|grep -v grep|wc -l` -eq 0 ];then

        systemctl stop keepalived.service

    fi  

fi

启动nginx和keepalived

systemctl start nginx.service 
systemctl start keepalived.service

测试

修改两台服务nginx的index页面用来区分是哪台服务器的nginx

vim /usr/share/nginx/html/index.html

输入虚拟ip访问

nginx之路(六):nginx高可用的详细配置步骤_第5张图片

关闭主服务器的keepalived从服务的nginx会自动顶替上来

在这里插入图片描述

也可以关闭只nginx测试我们配置的脚本

如果出现无法关闭keepalived问题,尝试下面的步骤

systemctl start keepalived.service

systemctl stop keepalived.service

systemctl restart keepalived.service

关闭keepalived

systemctl stop keepalived.service

查看keepalived进程是否真的关闭

ps -ef|grep keep

nginx之路(六):nginx高可用的详细配置步骤_第6张图片
图中情况说明没有关闭,说明关闭命令无法关闭keepalived

这种情况是因为systemd启动服务脚本的问题

修改systemd启动服务脚本

vim /usr/lib/systemd/system/keepalived.service

注释掉一行KillMode=process

KillMode=process的大致意思是当停止keepalived的时候只会停掉主进程,而主进程产生的子进程是不会被干掉的。而killmode的默认值是control-group,意思时所有进程都会被干掉,我这里选择把这项注释掉。

nginx之路(六):nginx高可用的详细配置步骤_第7张图片

重载配置

systemctl daemon-reload

再试试关闭keepalived,还不行重启服务器试试!!!

你可能感兴趣的:(Nginx)