当前位置: 首页 > article >正文

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,效果如下
在这里插入图片描述


至此,大功告成~~~~


http://www.kler.cn/a/404709.html

相关文章:

  • Java 爬虫深度解析销量和商品详情数据获取
  • python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改
  • vue2 src_消息订阅和发布(pubsub-js)
  • Jenkins更换主题颜色+登录页面LOGO图片
  • fastify 连接 mysql
  • Statsmodels之OLS回归
  • 每日论文22-24ESSERC一种54.6-65.1GHz多路径同步16振荡器
  • 力扣第59题螺旋矩阵 II
  • 无人机场景 - 目标检测数据集 - 车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • React中使用echarts写出3d旋转扇形图
  • uniapp点左上角返回键, 重复来回跳转的问题 解决方案
  • C# OpenCV 通过高度图去筛选轮廓
  • 智慧路面管理系统平台 智慧照明 智慧市政 智慧交通
  • 40分钟学 Go 语言高并发:Go Channel使用与实践教程
  • k8s 集群安装
  • RTC QoS方法十三.(ReedSolomonFEC简介)
  • 音频信号采集前端电路分析
  • android版本ijkplayer2024编译笔记
  • 开源模型应用落地-qwen模型小试-调用Qwen2-VL-7B-Instruct-更清晰地看世界-vLLM+Docker(七)
  • CSS3中的响应式布局(媒体查询)之媒体类型、媒体特性、运算符
  • list =和addAll在List<实体类>数组的应用
  • 刘艳兵-DBA041-使用常用的数据泵功能导出时,主要需要关注以下哪些步骤?
  • Kafka 2.8 源码导读
  • 038集——quadtree(CAD—C#二次开发入门)
  • Python操作neo4j库py2neo使用(一)
  • Qt模块化编程:创建pri文件,写入函数并调用模块