Keepalived 搭建 Nginx 集群(主从模式)

一、准备两台虚拟机分别安装 nginx 和 keepalived

192.168.141.129

192.168.141.130

1、安装 nginx

https://www.cnblogs.com/xiaomaomao/p/14075164.html

2、安装 keepalived

yum install keepalived –y

安装完成之后,默认在 etc 里面生成 keepalived 目录,该目录下存在配置文件 keepalived.conf

 

二、修改 keepalived.conf 配置文件

主服务器和从服务器只有两个地方不一样,两个不一样的配置都在 vrrp_instance VI_1 中

state: 主服务器的值是 MASTER ,副本服务器的值是 BACKUP

priority: 主服务器的值比副本服务器的值大即可(例如:主服务器设置为 100,副本服务器设置为 80)

global_defs {
   notification_email { # keepalived 服务器宕机异常出现的时候,发送通知邮件,可以配置多个邮箱地址
    1412556053@qq.com # 收件人邮箱1
    # ***@**.com      # 收件人邮箱2
   }
   notification_email_from 1412556053@qq.com # 邮箱发件人
   smtp_server stmp.qq.com # 邮箱服务器地址
   smtp_connect_timeout 30 # 超时时间
   router_id LVS_DEVEL # 路由 id
   vrrp_skip_check_adv_addr # 默认不跳过检查
   # vrrp_strict # 这个东西要注释掉,这个东西要注释掉,这个东西要注释掉...
   vrrp_gna_interval 0 # 单位秒,在一个网卡上每组消息之间的延迟时间,默认为 0
   script_user root  
   enable_script_security
}


vrrp_script chk_haproxy{
    script "/etc/keepalived/chk_nginx.sh" # keepalived 监测 nginx 的监本路径和名称
    interval 2
    weight 2
}


# vrrp 实例,我们集群设置,多机配置,除了 state 和 priority 不一样之外,其它的配置都是一样的
# 主实例 state 为 MASTER , priority 的值高于副本实例的值
# 副本实例 state 为 BACKUP , priority 的值低于主实例的值
vrrp_instance VI_1 {
    state BACKUP  # 服务器状态,MASTER 代表主服务器, BACKUP 是备份服务器
    interface ens33 # 通信端口,通过 ifconfig 命令可以看到,根据自己的机器配置
    virtual_router_id 51 # 虚拟路由 ID ,主实例和副本实例保持一致
    priority 80 # 权重比,主服务器的 priority 比副本服务器大即可
    advert_int 1 # 心跳间隔,单位秒, keepalived 多机器集群通过心跳检测,如果发送心跳没反应,就立刻接管
    authentication { # 服务器之间的通信密码
        auth_type PASS
        auth_pass 1111
    }
	
    track_script { # keepalived 的监测脚本,与 vrrp_script 定义的名称一致
      chk_haproxy
    }
	
    virtual_ipaddress { # 自定义虚拟 ip ,可以配置多个,每行一个
        192.168.141.132
    }
}

  

三、编写 keepalived 监测 nginx 的脚本

我们在 keepalived.conf 中 vrrp_script chk_haproxy 配置的监测脚本路径和名称如下: /etc/keepalived/chk_nginx.sh

所以我们需要在 /etc/keepalived 目录下新建一个 chk_nginx.sh 的脚本文件,文件内容如下

#!/bin/bash
# nginx 挂掉之后, keepalived 重新启动 nginx ,若不能启动 则关闭当前 keepalived
status=`ps -ef|grep -w  nginx|grep -v grep|wc -l`
echo ${status}
if [ ${status} -eq 0 ]; then
    systemctl start nginx.service
    sleep 2
    status2=`ps -ef|grep -w  nginx|grep -v grep|wc -l`
    echo ${status2}
    if [ ${status2} -eq 0  ]; then
            systemctl stop keepalived.service
    fi
fi

然后运行 chmod +x chk_nginx.sh 命令为脚本文件添加可执行权限

chmod +x chk_nginx.sh

  

四、启动 nginx 和 keepalived

分别启动两台服务器上的 nginx 和 keepalived

// 启动 nginx
./nginx

// 启动 keepalived
systemctl start keepalived.service

// 查看 nginx 是否成功启动
ps -ef | grep nginx

// 查看 keepalived 是否成功启动
ps -ef | grep keepalived

 

五、测试

配置信息如下

主服务器:  192.168.14.129

从服务器:  192.168.14.130

虚拟 IP:  192.168.14.132

 

1、浏览器访问 192.168.14.132

2、关闭主机 192.168.141.129 上的 nginx 和 keepalived ,再次访问虚拟 IP ,发现可以正常访问,并且访问的是从机

 

posted @ 2021-02-09 16:33  变体精灵  阅读(687)  评论(0编辑  收藏  举报