Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)

使用两台本地虚拟机,实现 Keepalived+Nginx实现双机主备、双主热备高可用集群架构


前言

本文根据B站up的教学视频以及参考相应博文实现。

准备工作

  1. 准备两台虚拟机:我准备的两台虚拟机IP分别为 :192.168.200.102 和 192.168.200.103
    Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第1张图片
    Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第2张图片

  2. 虚拟机安装Nginx教程:VMware虚拟机安装Nginx详细步骤

  3. 虚拟机安装Keepalived: 推荐使用yum安装,更加简便

#安装相关依赖
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
#yum命令安装keeplived
yum install -y keepalived
#初始化及启动
systemctl start keepalived   //启动keepalived
systemctl enable keepalived  //加入开机启动keepalived
systemctl restart keepalived  //重新启动keepalived
systemctl status keepalived   //查看keepalived状态

使用 yum 安装 keepalived 的配置文件在 /etc/keepalive/ 目录下

先不要启动keepalived,后续修改完配置文件后在进行启动
先运行两台虚拟机的nginx 这里我修改了一下nginx的默认启动页的H5文件,便于后期测试
Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第3张图片

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第4张图片
到此为止,我们相应的准备工作准备好了,接下来就进行集群的相关配置


一、双机主备集群架构

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第5张图片

1. 修改102主节点上的keepalived的配置文件

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第6张图片

keepalived.conf配置文件代码:

! Configuration File for keepalived

global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_102
}

vrrp_instance VI_1 {
    # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.200
    }
}

2. 启动102主节点上的keepalived,并查看运行状态

我们可以看到当前102号机器上的keepalived服务已经启动成功了;
查看ip,发现多了一个200的ip,这就是我们在配置文件里面的配置的虚拟ip。
由于我们在配置文件中配置的是主节点,所以当前虚拟ip在主机这边,等会的103机器也就是备用机是没有这个200的虚拟ip的。

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第7张图片

3. 修改103备用节点上的keepalived的配置文件

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第8张图片

! Configuration File for keepalived

global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_103
}

vrrp_instance VI_1 {
    # 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 80
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.200
    }
}

4. 启动103备用节点上的keepalived,并查看运行状态

我们可以看到当前103备用节点上的keepalived启动成功了。
查看ip,只有原先的103,这就是之前所说的我们在103号的keepalived.conf文件里配置的是BACKUP(备用)角色,所以当前的虚拟ip200是在主机那边,当主机挂掉以后,虚拟ip才会飘到103机器上。

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第9张图片

5. 测试

我们先访问 192.168.200.200 (虚拟ip)
发现最终指向的102这台机器,也就是我们的主节点。
Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第10张图片
此时我们停止102主节点机器上的keepalived服务

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第11张图片

然后重新访问虚拟ip: 192.168.200.200

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第12张图片

我们发现虚拟ip指向了备用节点上的nginx服务器,也就是103机器

此时我们查看一下102和103号机器上的ip

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第13张图片
Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第14张图片

我们发现原先在102机器上的虚拟ip, 跑到了103机器上
到此为止Keepalived + Nginx 双主备集群架构简单搭建到此为止。

6. 小结

在这次简单的测试中,
我们将虚拟ip通过keepalived的配置文件 绑定到102机器上,此时 192.168.200.200 等价于 192.168.200.102
访问192.168.200.200和192.168.200.102都能访问到我们102机器上的nginx默认页,
当102机器上的的keepalived服务停止,此时这个虚拟ip会飘到备用机上(103机器)。此时 192.168.200.200 等价于 192.168.200.102,保证用户的正常访问不受影响。
当然,在实际的生产环境中我们配置的会更加详细,这里我提供一个思路:
书写一个shell脚本或者lua脚本:监听nginx进程,如果监控到nginx进程挂了,就尝试重启三次,如果还不行,就kill掉keepalived的进程;并且在keealived的配置文件里邮件服务,当当前机器的keepalived服务挂掉的时候,可以通过发邮件的方式提示维护人员。与此同时,备用机开始启用,虚拟ip飘到备用机上。这个脚本可以写在系统的cron中,并设置的执行频率,一分钟一次(具体看业务场景);这样即使一台nginx挂掉以后,部署的服务也能正常的运行。
从本质上来讲 keepalived和nginx关系不大,但是通过我上诉的脚本,就可以将keepalived和nginx很好的联系起来。


二、Nginx 7x24小时不间断服务

首先,我们将nginx主备集群恢复到处死状态,分别重启102和103两台机器的keepalived

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第15张图片
Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第16张图片
Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第17张图片

接着我们在102这个主节点上配置相应的脚本文件:

1. 在keepalived.conf目录下新建shell脚本并保存

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第18张图片

check_nginx_alive_or_not.sh脚本文件代码

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
#判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ]; then
	systemctl restart nginx.service
   # /usr/local/nginx/sbin/nginx
   #等待5秒钟,再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
   sleep 5
   if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
	killall keepalived
   fi
fi

添加运行权限

chmod +x /etc/keepalived/check_nginx_alive_or_not.sh

2. 修改keepalived配置文件

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第19张图片

192.168.200.102(主节点)的keepalived.conf配置文件代码:

! Configuration File for keepalived

global_defs {
   #路由id:当前安装keepalived节点主机的标识符,全局唯一
   router_id keep_102
}

vrrp_script check_nginx_alive {
   script "/etc/keepalived/check_nginx_alive_or_not.sh"
   interval 10  #每隔10秒运行上一行的脚本
   weight -10 # 如果脚本运行成功,则权重-10
}

vrrp_instance VI_1 {
    # 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 51
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证授权的密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
		check_nginx_alive # 追踪 nginx脚本
    }
    virtual_ipaddress {
        192.168.200.200
    }
}

3. 测试

首先,重启102主节点上的keepalived服务并查看状态

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第20张图片

然后手动关闭102主节点上的nginx服务,并访问192.168.200.200

Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第21张图片
Keepalived+Nginx实现双机主备、双主热备高可用集群架构(待完善)_第22张图片

最后,等待10s,keepalived服务会去调用我们刚刚书写的shell脚本尝试重启nginx,如果启动不了会把自己的进程也给kill掉,并发送报警邮件给维护人员(发邮件功能暂时未实现)

你可能感兴趣的:(nginx)