Docker nginx容器高可用(Keepalived)

devtools/2024/11/22 16:32:06/

概述

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 keepalivedglobal_defs {script_user root     # 执行检查脚本时使用的用户,别漏了!!!!!!!!!!notification_email {  # 配置邮件通知列表acassen@firewall.locfailover@firewall.locsysadmin@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 keepalivedglobal_defs {script_user root     # 执行检查脚本时使用的用户,别漏了!!!!!!!!!!notification_email {  # 配置邮件通知列表acassen@firewall.locfailover@firewall.locsysadmin@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/bashif [ $(docker ps | grep nginx |  grep Up | wc -l) -eq  0 ];thenpkill keepalive
elif [ $(ps -C keepalived --no-header | wc -l) -eq 1 ];thensystemctl 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.ppmy.cn/devtools/136057.html

相关文章

【人工智能】深入理解K近邻(KNN)算法:用Python从零实现高效分类器

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! K近邻(K-Nearest Neighbors,KNN)算法是一种常见的分类和回归算法,其工作原理简单直观,但在各种场景中表现出色,尤其适合初学者学习机器学习的基本概念。本文将深入探讨KNN算法的工作原理,包括距离度…

【单片机基础】通信接口(UART, SPI, I2C等)的工作方式

单片机(Microcontroller Unit, MCU)中的通信接口用于与外部设备进行数据交换。常见的通信接口包括UART(Universal Asynchronous Receiver/Transmitter)、SPI(Serial Peripheral Interface)和I2C&#xff08…

java 增强型for循环 详解

Java 增强型 for 循环(Enhanced for Loop)详解 增强型 for 循环(也称为 “for-each” 循环)是 Java 从 JDK 5 开始引入的一种便捷循环语法,旨在简化对数组或集合类的迭代操作。 1. 基本语法 语法格式 for (类型 变量…

基于python+django+vue.js开发的停车管理系统

功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 功能包括:车位管理、会员管理、停车场管理、违规管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/pytho…

分布式专题-Redis核心数据结构精讲

1. redis安装: redis.conf是redis启动配置文件; redis连接: 数据类型: redis命令: String类型: INCRBY orderId 1000 是 Redis 数据库中的一个命令,用于将存储在键 orderId 中的整数值增加 10…

庖丁解java(一篇文章学java)

(大家不用收藏这篇文章,因为这篇文章会经常更新,也就是删除后重发) 一篇文章学java,这是我滴一个执念... 当然,真一篇文章就写完java基础,java架构,java业务实现,java业务扩展,根本不可能.所以,这篇文章,就是一个索引,索什么呢? 请看下文... 关于决定开始写博文的介绍…

企业架构框架之银行业参考架构BIAN

本文从业务人员便于理解的角度来介绍 BIAN,与 BIAN 官方对其体系的解释有一定出入,仅供参考。 BIAN ( The Banking Industry Architecture Network) 是一个业界多方协作的非营利性组织,由全球领先银行、技术提供商、顾问和学者组成&#xff…

VUE:基于MVVN的前端js框架

文章目录 vue框架v-show vue框架 注意是 先写函数名,再写function。 handle:function (){}下面是错误的 function:handle(){}3 v-show 本质上等于号后面还是判断条件,所以不能写赋值语句,下面是正确的 下面是错误的 v-show " ge…