Docker nginx容器高可用(Keepalived)

概述

Keepalived主要作用:在多个服务器上安装Keepalived并且为各个服务器的Keepalived指定相同的虚拟IP。该虚拟IP根据服务器上Keepalived配置的角色、优先级 决定出现在其中一台服务器上,当拥有虚拟IP的服务器Keepalived进程被杀死后,那么此时虚拟IP会跳到其它服务器上。

nginx容器高可用原理:根据上述所说 Keepalived特性原理,那么我们在各个nginx容器所在服务器上安装Keepalived,用户访问nginx时使用虚拟IP进行访问。使用脚本定期检查,如果拥有虚拟IP的服务器的nginx挂掉了,那么此时将该服务器上的Keepalived进程杀死,从而让虚拟IP跳转至其它服务器,从而实现故障转移,该过程对用户层面是无感知。

安装配置信息如下:

名称IPkeepalve角色
nginx1192.168.25.61
nginx1192.168.25.81
虚拟IP192.168.25.100

2.安装Keepalived

安装keepalived

yum install -y keepalived

3.修改keepalived配置文件

vim /etc/keepalived/keepalived.conf

修改内容如下:
在这里插入图片描述

master节点配置:

! Configuration File for keepalived

global_defs {
   script_user root     # 执行检查脚本时使用的用户,别漏了!!!!!!!!!!
   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      # 设置了SMTP服务器连接超时时间,这里是30秒。
   router_id LVS_DEVEL          # 为Keepalived实例指定了一个唯一的路由器ID,这里是LVS_DEVEL。这个ID在集群中是唯一的,
   vrrp_skip_check_adv_addr     # 这个选项通常用于性能优化,它会跳过对VRRP广播地址的检查。
   vrrp_strict                  # 启用严格模式,这要求VRRP配置中的某些字段必须严格匹配
   vrrp_garp_interval 0         # vrrp_garp_interval、vrrp_gna_interval 这两个选项与GRATUITOUS ARP(免费ARP)相关,用于加速VIP的故障转移过程。这里都设置为0,表示不发送GRATUITOUS ARP。
   vrrp_gna_interval 0
}

vrrp_script chk_nginx {
  script "/root/keepalived_check_nginx.sh"       # 指定keepalved nginx检查脚本路径
  interval 1    # 检查周期/秒
}

vrrp_instance VI_1 {
    state MASTER            # 定义了Keepalived实例的初始状态,这里是MASTER。在HA配置中,通常会有一个主节点(MASTER)和一个或多个备节点(BACKUP)。
    interface ens33        # 指定了Keepalived将绑定哪个网络接口来发送和接收VRRP广播,这里是ens33。这个值需要结合你电脑实际网卡而定
    virtual_router_id 51   # 为VRRP实例指定了一个虚拟路由器ID,这里是51。在VRRP配置中,这个ID用于标识虚拟路由器。
    priority 100           # 设置了Keepalived实例的优先级,这里是100。优先级较高的实例将成为MASTER。
    advert_int 1           # 设置了VRRP广告间隔(秒),这里是1秒。MASTER会定期发送VRRP广告来通知BACKUP节点其存在。
    authentication {
        auth_type PASS     # 配置了VRRP认证信息,包括认证类型和认证密码。这里使用的是PASS类型
        auth_pass 123456   # 认证的密码
    }
    virtual_ipaddress {
        192.168.25.100     # 定义了要绑定的虚拟IP地址列表。这里只列出了一个地址192.168.25.100。当MASTER节点失效时,这个VIP会自动转移到BACKUP节点上。
    }
    track_script {
      chk_nginx         # 指定健康检查脚本
    }
}


slave节点配置:
和主节点的差异部分为:state 、priority

! Configuration File for keepalived

global_defs {
   script_user root     # 执行检查脚本时使用的用户,别漏了!!!!!!!!!!
   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      # 设置了SMTP服务器连接超时时间,这里是30秒。
   router_id LVS_DEVEL          # 为Keepalived实例指定了一个唯一的路由器ID,这里是LVS_DEVEL。这个ID在集群中是唯一的,
   vrrp_skip_check_adv_addr     # 这个选项通常用于性能优化,它会跳过对VRRP广播地址的检查。
   vrrp_strict                  # 启用严格模式,这要求VRRP配置中的某些字段必须严格匹配
   vrrp_garp_interval 0         # vrrp_garp_interval、vrrp_gna_interval 这两个选项与GRATUITOUS ARP(免费ARP)相关,用于加速VIP的故障转移过程。这里都设置为0,表示不发送GRATUITOUS ARP。
   vrrp_gna_interval 0
}

vrrp_script chk_nginx {
  script "/root/keepalived_check_nginx.sh"       # 指定keepalved nginx检查脚本路径
  interval 1    # 检查周期/秒
}

vrrp_instance VI_1 {
    state BACKUP			# 定义了Keepalived实例的初始状态,这里是MASTER。在HA配置中,通常会有一个主节点(MASTER)和一个或多个备节点(BACKUP)。
    interface ens33         # 指定了Keepalived将绑定哪个网络接口来发送和接收VRRP广播,这里是ens33。这个值需要结合你电脑实际网卡而定
    virtual_router_id 51    # 为VRRP实例指定了一个虚拟路由器ID,这里是51。在VRRP配置中,这个ID用于标识虚拟路由器。
    priority 90            # 设置了Keepalived实例的优先级,这里是100。优先级较高的实例将成为MASTER。
    advert_int 1            # 设置了VRRP广告间隔(秒),这里是1秒。MASTER会定期发送VRRP广告来通知BACKUP节点其存在。
    authentication {
        auth_type PASS      # 配置了VRRP认证信息,包括认证类型和认证密码。这里使用的是PASS类型
        auth_pass 123456    # 认证的密码
    }
    virtual_ipaddress {
        192.168.25.100      # 定义了要绑定的虚拟IP地址列表。这里只列出了一个地址192.168.25.100。当MASTER节点失效时,这个VIP会自动转移到BACKUP节点上。
    }
    track_script {
      chk_nginx         # 指定健康检查脚本
    }
}

3.添加keepalived检查脚本

vim /root/keepalived_check_nginx.sh

文件内容如下:

#!/bin/bash

if [ $(docker ps | grep nginx |  grep Up | wc -l) -eq  0 ];then
  pkill keepalive
elif [ $(ps -C keepalived --no-header | wc -l) -eq 1 ];then
  systemctl start keepalived
fi

给脚本添加执行权限(不要漏了这步骤)

chmod +x /root/keepalived_check_nginx.sh

4. 启动keepalived

systemctl enable keepalived.service --now

查看启动状态:

systemctl status keepalived.service

查看keepalived运行日志:

journalctl -u keepalived.service

5.验证

# 查看IP
ip addr

发现虚拟IP 落在 master服务器上。
在这里插入图片描述


访问 http://虚拟ip:80,效果如下
在这里插入图片描述


把主节点的nginx进行关闭,检查虚拟IP是否跳转到备服务器上

#主节点执行关闭nginx容器命令
 docker stop nginx

如下图,发现虚拟IP已经跳转至备服务器上。
在这里插入图片描述
再次访问 http://虚拟ip:80,效果如下
在这里插入图片描述


至此,大功告成~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值