Keepalived + Nginx 主备容灾方案介绍
Keepalived + Nginx 主备容灾方案介绍

| *服务器* | *IP地址* | *角色* |
|---|---|---|
| Srv01 | 192.168.249.100 VIP: 192.168.249.110 | Nginx+Keepalive |
| Srv02 | 192.168.249.101 | Nginx+Keepalive |
概述
Keepalived 和 Nginx 的组合是一个常见的高可用性(HA)方案,尤其适用于 Web 服务。通过 Keepalived 实现的虚拟 IP 地址(VIP)在主从服务器之间的切换,可以确保当主服务器(Master)出现故障时,从服务器(Backup)能够迅速接管服务,从而达到业务的高可用性和容灾目的。
方案架构
-
主服务器(Srv01):
- IP 地址:192.168.249.100
- VIP 地址:192.168.249.110
- 角色:Nginx + Keepalived(Master)
-
备服务器(Srv02):
- IP 地址:192.168.249.101
- 角色:Nginx + Keepalived(Backup)
关键组件
-
Nginx
Nginx 作为一个高性能的反向代理服务器,可以处理大量的 HTTP 请求。它在这个架构中负责处理客户端的请求,并将其转发到后端的应用服务器。 -
Keepalived
Keepalived 是一个用于实现高可用性和故障转移的服务。它通过 VRRP(虚拟路由冗余协议)来管理虚拟 IP 地址,并检测主服务器的健康状态。一旦检测到主服务器出现故障,Keepalived 会自动将 VIP 切换到备服务器上。
工作流程
-
正常运行状态:
- 在正常情况下,VIP 地址(192.168.249.110)绑定在主服务器(Srv01)上。
- 客户端请求通过 VIP 地址到达 Srv01,Nginx 处理这些请求。
-
故障切换:
- 如果 Keepalived 检测到 Srv01 不可用(例如由于硬件故障或网络问题),它会自动将 VIP 地址切换到备服务器(Srv02)。
- Srv02 上的 Nginx 接管请求,确保服务不中断。
-
恢复:
- 当 Srv01 恢复正常运行时,Keepalived 可以将 VIP 地址切回 Srv01,或者继续由 Srv02 处理请求,视配置而定。
Nginx 配置
Nginx 的配置通常不会因为 Keepalived 而有所不同,但是你可以配置一个简单的 HTTP 服务来测试高可用性。
测试步骤
- 确保两台服务器上 Nginx 和 Keepalived 均正常启动。
- 通过 VIP 地址(192.168.249.110)访问 Web 服务,确认能够正常访问。
- 模拟主服务器(Srv01)故障,观察 VIP 地址是否切换到备服务器(Srv02),并继续访问 Web 服务,确认服务不中断。
结论
这种主备架构提供了一个简单而有效的高可用性方案,适用于对服务可靠性有较高要求的场景。在实际生产环境中,还可以进一步优化配置,如使用更复杂的健康检查脚本、设置自动恢复策略等。
Server01,Server02前期配置
禁用 SELinux
-
编辑 SELinux 配置文件:
vim /etc/selinux/config -
找到
SELINUX=enforcing并将其改为SELINUX=disabled:SELINUX=disabled
-
保存并退出,然后重启系统以使更改生效:
reboot
清除 iptables 规则
-
清除所有 iptables 规则:
iptables -Fiptables -Xiptables -t nat -Fiptables -t nat -Xiptables -t mangle -Fiptables -t mangle -Xiptables -t raw -Fiptables -t raw -X
-
保存规则以确保重启后仍保持清除状态:
service iptables save
关闭防火墙
- 停止防火墙服务:
systemctl stop firewalld
- 禁用防火墙开机自启:
systemctl disable firewalld
- 查看防火墙状态:
systemctl status firewalld

各个节点时间同步,启用时间同步服务
-
确保安装了
chrony:yum install chrony -y -
启动并启用
chronyd服务:systemctl start chronydsystemctl enable chronyd -
查看
chronyd服务状态:

- 检查时间同步状态:
chronyc tracking

启用多播功能
首先,确保网络接口启用了多播功能。
检查多播设置
使用以下命令检查多播是否启用:
ip link show ens33
如果输出中没有 MULTICAST 标志,则需要启用多播。
启用多播
使用以下命令启用多播:
ip link set ens33 multicast on
Server01,Server02安装 Nginx
添加 Nginx 仓库
首先,添加官方 Nginx 仓库:
yum install -y epel-release
安装 Nginx
yum install nginx -y
启动 Nginx 服务
启动并启用 Nginx 服务:
systemctl start nginxsystemctl enable nginx
检查 Nginx 状态
检查 Nginx 服务状态:
systemctl status nginx

安装配置Keepalived集群
所有节点安装 keepalived
yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
yum install -y keepalived


配置 keepalived
主节点(Server01)配置
-
编辑
keepalived配置文件:vi /etc/keepalived/keepalived.conf -
检测脚本chknginx.sh
#!/bin/bash#检测nginx是否正常运行 if /usr/sbin/pidof nginx &>/dev/null ;thenexit 0 elseexit 1 fi这个脚本的主要功能是检测 Nginx 服务是否正常运行,并通过返回状态码来指示检测结果。以下是对脚本各部分的详细介绍:
脚本解析
#!/bin/bash#!/bin/bash: 这是一个 shebang 行,用于指定解释器的路径。在这个例子中,脚本将使用/bin/bash作为解释器来执行。
#检测nginx是否正常运行- 注释行: 以
#开头的行是注释,不会被脚本执行。在这里,它说明了脚本的目的,即检测 Nginx 是否正常运行。
if /usr/sbin/pidof nginx &>/dev/null ;thenexit 0 elseexit 1 fi-
/usr/sbin/pidof nginx:pidof是一个 Linux 命令,用于查找指定程序的进程 ID (PID)。在这个例子中,它查找的是nginx进程。- 如果
nginx正在运行,那么pidof会返回一个或多个进程 ID。
-
&>/dev/null:- 这是一个重定向操作符,表示将标准输出 (
stdout) 和标准错误 (stderr) 都重定向到/dev/null,即忽略输出。 - 这意味着无论
pidof返回什么信息,都不会在终端上显示出来。
- 这是一个重定向操作符,表示将标准输出 (
-
if语句:if /usr/sbin/pidof nginx &>/dev/null ;then:这个语句用于检查pidof nginx命令的返回值。- 如果
pidof成功找到nginx进程(返回值为0),则执行then块中的命令(即exit 0)。 - 如果
pidof没有找到nginx进程(返回值为非0),则执行else块中的命令(即exit 1)。
-
exit 0:exit命令用于终止脚本的执行,并返回一个状态码。exit 0表示脚本成功执行,意味着 Nginx 正在运行。
-
exit 1:exit 1表示脚本执行失败,意味着 Nginx 未运行。
-
fi:fi用于结束if语句块。
脚本的作用
这个脚本的作用是检查 Nginx 服务是否正在运行。它通过
pidof查找 Nginx 进程,如果找到,则返回状态码0,表示正常运行;如果找不到,则返回状态码1,表示 Nginx 未运行或已经停止。使用场景
-
Keepalived 健康检查:
在 Keepalived 的配置中,这个脚本可以用作健康检查脚本。Keepalived 定期运行这个脚本,并根据返回值决定是否将 VIP 切换到另一台服务器。 -
自动化监控:
这个脚本可以集成到自动化监控系统中,用于检测 Nginx 的健康状况。如果 Nginx 停止运行,监控系统可以触发报警或尝试重新启动服务。 -
定期巡检:
在定期的服务器健康检查中,这个脚本可以帮助管理员快速验证 Nginx 是否处于运行状态。

-
配置文件内容示例:
global_defs {router_id lvs-nginx01 } vrrp_script chknginx {script "/etc/keepalived/chknginx.sh"interval 1weight -30 } vrrp_instance VI_1 {state MASTERinterface ens33 # 使用的网络接口virtual_router_id 51priority 100 # 备份节点优先级应低于主节点advert_int 1authentication {auth_type PASSauth_pass 1111 # 认证密码,确保主备节点一致}virtual_ipaddress {192.168.249.110 # 虚拟IP地址}track_script {chknginx} }
这个配置文件是 Keepalived 的配置示例,配置文件定义了使用 VRRP(虚拟路由冗余协议)来管理高可用性的设置。在这个示例中,Keepalived 被配置为与 Nginx 一起使用,以确保 Nginx 服务的高可用性。以下是对配置文件各部分的详细介绍。
配置文件解析
global_defs 块
global_defs {router_id lvs-nginx01
}
global_defs:这是 Keepalived 的全局配置块。router_id lvs-nginx01:router_id用于标识运行 Keepalived 的路由器或服务器的唯一标识符。lvs-nginx01是一个自定义名称,用来唯一标识这台服务器在 VRRP 集群中的身份。
vrrp_script 块
vrrp_script chknginx
{script "/etc/keepalived/chknginx.sh"interval 1weight -30
}
-
vrrp_script chknginx:定义了一个 VRRP 跟踪脚本,名字为chknginx。 -
script "/etc/keepalived/chknginx.sh":- 指定要执行的脚本路径。在这个示例中,
/etc/keepalived/chknginx.sh是用于检测 Nginx 服务是否运行的脚本。 - 这个脚本的返回值将影响 Keepalived 的行为。
- 指定要执行的脚本路径。在这个示例中,
-
interval 1:- 设置脚本的执行间隔时间,单位为秒。在这里,Keepalived 每 1 秒执行一次该脚本。
-
weight -30:weight表示优先级的增量或减量。如果脚本检测失败,Keepalived 会减少30点的优先级。这种配置可以确保主服务器在 Nginx 服务失败时降低其优先级,从而让备服务器接管。
vrrp_instance 块
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.249.110}track_script {chknginx}
}
-
vrrp_instance VI_1:- 定义了一个 VRRP 实例,名称为
VI_1。该实例负责管理虚拟 IP 地址的分配。
- 定义了一个 VRRP 实例,名称为
-
state MASTER:- 定义了当前节点的状态为
MASTER。在主备模式下,MASTER节点是默认持有虚拟 IP 地址的节点。
- 定义了当前节点的状态为
-
interface ens33:- 指定用于 VRRP 通信的网络接口。在这个示例中,
ens33是该服务器的网络接口名。
- 指定用于 VRRP 通信的网络接口。在这个示例中,
-
virtual_router_id 51:virtual_router_id是一个标识 VRRP 路由器实例的 ID。该值在主备节点间必须一致。
-
priority 100:- 定义该节点的优先级。优先级数值越高,该节点越有可能成为
MASTER。在主备模式中,主节点通常设置较高的优先级(这里为100),备节点优先级应低一些。
- 定义该节点的优先级。优先级数值越高,该节点越有可能成为
-
advert_int 1:advert_int是 VRRP 广播间隔时间,单位为秒。这里设置为每秒发送一次 VRRP 广播包。
-
authentication块:auth_type PASS:指定认证方式为简单密码验证。auth_pass 1111:指定密码为1111。这个密码必须在主备节点间保持一致,以确保安全通信。
-
virtual_ipaddress:192.168.249.110:定义了虚拟 IP 地址(VIP),该 IP 地址将在MASTER节点和BACKUP节点之间进行切换。客户端通过访问这个 VIP 来获得服务。
-
track_script块:chknginx:指定跟踪脚本为上面定义的chknginx。如果该脚本检测到 Nginx 服务不可用,Keepalived 会降低当前节点的优先级,触发故障转移。
工作原理
-
正常情况下:
在MASTER节点正常运行时,它持有虚拟 IP 地址,并处理所有客户端请求。如果chknginx.sh脚本检测到 Nginx 正常运行,MASTER节点将继续保持现状。 -
Nginx 服务异常时:
如果chknginx.sh脚本检测到 Nginx 服务未运行,Keepalived 会根据weight -30的设置降低当前节点的优先级。假设优先级降低后低于备节点,则备节点将接管 VIP,成为新的MASTER,从而保证服务的持续可用性。
使用场景
-
高可用性 Nginx 集群:
该配置适用于需要高可用性的 Nginx 服务器集群,通过 Keepalived 实现主备故障切换,确保在主服务器出现问题时,备服务器可以快速接管,避免服务中断。 -
关键业务系统:
在金融、医疗、电子商务等对业务连续性要求极高的场景中,这种高可用性架构能够显著提升系统的可靠性。
备份节点(Server02)配置
-
编辑
keepalived配置文件:vi /etc/keepalived/keepalived.conf -
配置文件内容示例:
global_defs {router_id lvs-nginx02 } vrrp_script chknginx {script "/etc/keepalived/chknginx.sh"interval 1weight -30 } vrrp_instance VI_1 {state BACKUPinterface ens33 # 使用的网络接口virtual_router_id 51priority 90 # 备份节点优先级应低于主节点advert_int 1authentication {auth_type PASSauth_pass 1111 # 认证密码,确保主备节点一致}virtual_ipaddress {192.168.249.110 # 虚拟IP地址}track_script {chknginx} }- 检测脚本chknginx.sh
#!/bin/bash#检测nginx是否正常运行
if /usr/sbin/pidof nginx &>/dev/null ;thenexit 0
elseexit 1
fi
启动 keepalived 服务
在所有节点上启动并启用 keepalived 服务:
systemctl start keepalivedsystemctl enable keepalived
验证配置
在所有节点上检查 keepalived 服务状态:
systemctl status keepalived

可以通过以下命令查看虚拟IP地址是否已经分配:
ip addr show

相关文章:
Keepalived + Nginx 主备容灾方案介绍
Keepalived Nginx 主备容灾方案介绍 *服务器**IP地址**角色*Srv01192.168.249.100 VIP: 192.168.249.110NginxKeepaliveSrv02192.168.249.101NginxKeepalive 概述 Keepalived 和 Nginx 的组合是一个常见的高可用性(HA)方案,尤其适用于 Web…...
PHP、JavaScript代码审计工具
软件截图 1. GPT代码审计需要挂代理,和充值才可以使用 2. 全局搜索关键字 3. 危险函数搜索 4. 自动化代码审计 报告 下载地址 GitHub - yuag/Code-audit: 代码审计代码审计. Contribute to yuag/Code-audit development by creating an account on GitHub....
《向量数据库指南》——Ray Data+Anyscale解锁价值评估新篇章
在钧瓷这一古老而深邃的艺术领域中,每一位资深藏家与投资人都深知,随着市场的不断发展与扩大,信息的处理与分析能力对于精准判断、高效收藏与投资决策至关重要。尤其是当我们面对庞大的钧瓷数据库、复杂的交易记录、以及不断更新的市场趋势时,传统的数据处理方式往往显得力…...
知识改变命运 数据结构【杨辉三角(顺序表)】
杨辉三角 首先我们可以发现题目中返回类型是一个 这其实返回的类似与一个二维数组 我们大概分析下题目根据画图可知,我们可以把每一行的元素进行存储,然后再把每一行存储起来,然后就实现了题目 代码: public List<List<…...
Docker三剑客之Docker Engine
Docker Engine作为Docker的核心组件,其功能和重要性不言而喻。以下是对Docker Engine的详细介绍,内容涵盖其定义、核心组件、工作原理、配置方法、安全性以及最佳实践等多个方面,但由于篇幅限制,我将尽量在6000字以内概括性地介绍…...
【Qt】信号与槽(下)
目录 自定义信号 带参数的信号和槽 信号和槽存在的意义 信号与槽的连接方式 一对一 一对多 多对一 意义 信号和槽的其他说明 信号和槽的断开 使用Lambda表达式定义槽函数 信号与槽的优缺点 优点: 松散耦合 缺点: 效率较低 自定义信号 自定义槽函数是非常关键的&a…...
多模态大语言模型(MMLLM)的现状、发展和潜力
1、大模型 随着ChatGPT流行,大模型技术正逐渐成为AI领域的热点。许多行业大佬纷纷投身于这一赛道,展示了大模型的独特魅力和广阔前景。 王慧文,前美团联合创始人,发起“AI英雄帖”。 李志飞,出门问问创始人࿰…...
Linux中apache服务安装与mysql安装
目录 一、apache安装 二、MySQL安装 一、apache安装 准备环境:一台虚拟机、三个安装包(apr-1.6.2.tar.gz、apr-util-1.6.0.tar.gz、httpd-2.4.29.tar.bz2) 安装过程: tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz tar xf http…...
Sublime Text常用快捷键
1. 简介 1.1. 概述 Sublime Text是一个轻量级的文本编辑器,它具有快速的启动速度、易用性以及美观的界面。它支持多种编程语言,并且可以通过各种插件进行功能扩展。Sublime Text由程序员Jon Skinner于2008年1月份开发出来,最初被设计为一个具有丰富扩展功能的Vim。它具有漂…...
高危漏洞CVE-2024-38077的修复指南
“ 根据2024年8月9日,国家信息安全漏洞共享平台(CNVD)收录了Windows远程桌面许可服务远程代码执行漏洞(CNVD-2024-34918,对应CVE-2024-38077)。未经身份认证的攻击者可利用漏洞远程执行代码,获取服务器控制权限。目前,该漏洞的部分技术原理和概念验证伪代码已公开,厂商…...
docker基本管理和应用
docker是一个开源的应用容器引擎,基于go语言开发的 docker是运行在linux的容器化工具,可以理解为轻量级的虚拟机 可以在任何主机上,轻松创建的一个轻量级,可移植的,自给自足的容器 鲸鱼--------->宿主机 集装箱…...
AI招聘在人才盘活中的作用:开启智慧人力新篇章
一、引言:AI赋能招聘新纪元 在21世纪的今天,随着科技的飞速发展,人工智能(AI)已经渗透到社会经济的各个角落,其中,人力资源管理领域也不例外。AI技术的引入,不仅颠覆了传统的招聘模…...
探索SD NAND配套测试工具:工程师的得力助手
在快速发展的存储技术领域,SD NAND因其高速读写、低功耗和高可靠性而广受青睐。然而,对于工程师来说,验证SD NAND的性能并非易事,为了便于工程师验证,MK 米客方德开发设计了SD NAND配套测试工具。 一、SD NAND转接板简…...
三十六、【人工智能】【机器学习】【监督学习】- Bagging算法模型
系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…...
2024年8月8日(python基础)
一、检查并配置python环境(python2内置) 1、检测是否安装 [rootlocalhost ~]# yum list installed| grep python [rootlocalhost ~]# yum -y install epel-release 2、安装python3 [rootlocalhost ~]# yum -y install python3 最新版3.12可以使用源码安…...
SpringAOP_面向切面编程
一、什么是StringAOP AOP(Aspect-Oriented Programming: 面向切面编程):将那些与业务无关, 却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”&…...
芯片bring-up的测试用例
文章目录 前言一、测试用例的规划和编写原则1、冒烟测试1)电源时钟复位测试2)寄存器扫描测试3)单一功能冒烟测试 二、遍历测试三、随机测试四、性能测试五、压力测试 总结 前言 最近做了一些用测试用例点亮芯片的工作,从测试用例…...
vs code编辑区域右键菜单突然变短
今天打开vs code发现鼠标在编辑区域按右键,出来的菜单只显示一小段 显示不全,而之前的样子是 显示很多项,怎么设置回到显示很多项呢?...
如何将TRIZ的“最终理想解”应用到机器人电机控制设计中?
TRIZ理论,作为一套系统的创新方法论,旨在帮助设计师和工程师突破思维惯性,解决复杂的技术难题。其核心思想之一便是“最终理想解”,它如同一盏明灯,指引着我们在技术创新的道路上不断前行。最终理想解追求的是产品或技…...
【记录】基于docker部署小熊派BearPi-Pico H3863开发环境
参考:📝 Ubuntu环境下开发环境搭建 | 小熊派BearPi 过程 在物理机中创建一个工作路径 /home/luo/locke/BearPi/BearPi_Pico_H3863创建docker容器 docker run -it \ --privilegedtrue --cap-addALL \ --name BearPi-Pico_H3863_env \ -v /home/luo/lo…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
