Keepalived 入门详解:高可用集群部署最佳实践!
1. 什么是 Keepalived?
在分布式集群中,单点故障(SPOF) 是影响系统稳定性的重要问题。Keepalived 作为一款高可用服务软件,可以有效防止集群单点故障,保障系统的高可用性。
Keepalived 最初是为 LVS(Linux Virtual Server)设计,用于管理和监控 LVS 集群节点。后来加入 VRRP(Virtual Router Redundancy Protocol)功能,不仅具备负载均衡能力,还可用于高可用解决方案。在 VRRP 虚拟路由器中,多个物理路由器通过竞选确定 MASTER 角色,负责路由工作,其他为 BACKUP。MASTER 角色可动态切换,确保高可用性。
1.1 Keepalived 的作用
- 高可用(HA) :通过 VRRP(虚拟路由冗余协议) ,实现主备切换,保障 IP 高可用性。
- 负载均衡(LB) :最初为 LVS(Linux Virtual Server) 设计,可用于管理 LVS 集群。
1.2 Keepalived 与 VRRP 机制
在 VRRP 模式下,一个 VIP(虚拟 IP) 被多个物理服务器共享,但只有一台 Master 负责转发流量,其他的 Backup 处于待命状态:
- Master 负责转发流量
- Backup 监听 Master 状态
- Master 故障时,Backup 自动接管 VIP,提供不中断的服务
VRRP 的通信采用 IP 多播(多播地址 224.0.0.18) ,客户端完全透明,不需要修改路由配置。
💡 你可能会问 VRRP 怎么实现的?
VRRP 通过竞选协议来实现虚拟路由的功能,所有的协议报文都是通过 IP 多播(Multicast)包(多播地址 224.0.0.18)形式发送的。虚拟路由是由 VRID(范围 0-255) 和一组 IP 地址组成,对外表现为一个周知的 MAC 地址:00-00-5E-00-01-【VRID】 (这就是为什么后面的配置 virtual_router_id 为什么只能是 0 - 255)。在一个虚拟路由中,不管谁是 MASTER,对外都是相同的 MAC 和 IP(虚拟VIP)。客户端主机并不需要因为 MASTER 的改变而修改自己的路由配置,即对客户端来说这种主备切换是无感知的。
2. Keepalived 如何工作?
2.1 Keepalived 高可用架构
Keepalived 是主备高可用功能正常运行的基础,它负责主机和备机的心跳检测和浮动 IP 切换等底层核心工作,如果检测到异常,会自动发生主备切换,浮动会漂移到备机,备机提升为主机继续提供服务(可支持一主多备架构)。其中数据库和 Redis 是通过主从复制机制进行数据同步保持主备数据的一致性,详情可见前面两篇文章。


-
主机(MASTER)与备机(BACKUP)
- 主机 负责数据库和 Redis 的读写,并接管 Keepalived 管理的 VRRP 虚拟 IP(即可通过 VIP 访问主机)。
- 备机 处于待命状态,仅可通过真实 IP 进行只读访问(例如数据同步、健康检查)。
-
VIP(虚拟 IP)
- 业务访问 Redis 和数据库时,优先通过 VIP 连接,确保主机可用性。
- Keepalived 监控主机健康状态,若主机故障,则 VIP 自动切换到备机,保证服务不中断。
-
故障切换(Failover)
- 当 Keepalived 发现主机故障时,VRRP 机制将 VIP 切换到备机,备机接管数据库和 Redis 的读写。
- 原主机恢复后,可能需要重新竞选 MASTER,也可以设定优先级策略,避免频繁切换。
2.2 Master 与 Backup 的竞选机制
-
初始化阶段
- 多台 VRRP 路由器启动,并加入同一个 VRRP 组。
- 每台路由器都有一个 优先级(Priority) 。
-
竞选 MASTER
- 所有路由器发送 VRRP 多播报文(224.0.0.18) 宣告自己的优先级。
- 优先级最高的设备当选 MASTER,其余设备成为 BACKUP。
- 如果优先级相同,则 IP 地址最高的设备 成为 MASTER。
-
正常运行
- MASTER 定期发送 VRRP 广播,告诉 BACKUP:“我还在正常工作”。
- BACKUP 设备一直监听 MASTER 的 VRRP 报文,如果收到,则继续保持 BACKUP 状态。
-
MASTER 故障(主备切换)
- 如果 BACKUP 在一定时间内收不到 MASTER 的 VRRP 报文(注意防火墙原因导致配置失败),就认为 MASTER 故障。
- BACKUP 设备重新发起竞选,选出新的 MASTER,继续提供服务。
-
原 MASTER 恢复(可选)
-
如果原 MASTER 恢复上线,它可配置是否重新加入竞选或者按照备节点部署:
- 如果它的优先级比当前 MASTER 高,它会重新当选 MASTER,并接管流量。
- 如果优先级低,则继续作为 BACKUP 设备。
-
3. Keepalived 安装与部署
3.1 安装 Keepalived
Keepalived 可在大部分 Linux 发行版中直接安装:
yum install -y keepalived
3.2 部署环境准备
测试两台主机(一主一备)环境:
主机:192.168.121.23
备机:192.168.121.24
浮动IP:192.168.121.155
提前将防火墙 VRRP 协议对端放开:
# 防火墙设置(主备机都需要执行)
sed -i "/-A INPUT -j REJECT --reject-with icmp-host-prohibited/i -A INPUT -d 224.0.0.0/8 -i ens33 -p vrrp -j ACCEPT" /etc/sysconfig/iptables
sed -i "/-A INPUT -j REJECT --reject-with icmp-host-prohibited/i -A OUTPUT -d 224.0.0.0/8 -o ens33 -p vrrp -j ACCEPT" /etc/sysconfig/iptables
# 防火墙重启
service iptables restart
3.3 配置 Keepalived
Keepalived 采用模块化设计,不同模块实现不同功能,主要由 core、check 和 vrrp 三个模块组成:
-
core(核心模块):
- 负责 Keepalived 主进程的启动和维护。
- 解析并加载全局配置文件,管理整体运行逻辑。
-
check(健康检查模块):
- 负责对后端服务(如 LVS、IPVS)进行健康检查。
- 提供多种健康检查方式,并解析对应的健康检查配置。
-
vrrp(VRRP 模块):
- 运行 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)子进程。
- 负责管理虚拟 IP(VIP)的选举和切换,实现高可用故障转移。
主机配置
主机 keepalived 配置文件 keepalived.conf 配置示例:
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost.localdomain}notification_email_from ha@localhost.localdomainsmtp_server 127.0.0.1smtp_connect_timeout 30router_id r_id
}vrrp_script check_run {script /opt/keepalived/ha/ha_service_check.shinterval 3 # 检测时间间隔 单位sfall 3 # 连续失败次数达到 3 次后执行下面的操作#weight -60 #
}vrrp_instance VI_1 {state BACKUP#nopreempt # 配置是否抢占、和priority配合使用interface ens33 # 网卡track_interface {ens33}virtual_router_id 155 # 匹配号priority 150 # 优先级advert_int 2 # VRRP 通告频率 单位秒authentication {auth_type PASSauth_pass P@sSw0rd}track_script {check_run}notify_fault /opt/keepalived/ha/ha_notify_fault.shnotify_master /opt/keepalived/ha/ha_notify_master.shnotify_backup /opt/keepalived/ha/ha_notify_backup.shvirtual_ipaddress {192.168.121.155/19 dev ens33 scope global}
}
📌 重点参数解析:
state MASTER:表示当前节点是主服务器(另一台应为BACKUP)priority 100:优先级(值越大,越容易成为 Master)virtual_router_id:虚拟路由 ID,所有 VRRP 设备需一致virtual_ipaddress:虚拟 IP(VIP),提供高可用track_script:执行的检测脚本nopreempt:如果存在,则表示不抢占,和优先级参数(priority)一起配合使用advert_int:检查间隔,单位秒。
💡 关键点:
priority可用于控制主备切换的优先级virtual_router_id必须一致,否则主备不会识别
备机配置
和主机基本保持一致,角色都是设置为 BACKUP,只是主机优先级设置为 150,备机优先级设置为 100。在这种情况下,当发生主备切换后,即使之前的主节点恢复运行,它也不会抢占备用节点成为新的主节点。原来的备用节点将继续作为主节点提供服务,直到发生故障或手动切换。这种行为确保了在主节点失效后,备用节点能够稳定地接管服务,并且在主节点恢复运行时不会引起不必要的主从切换,保持系统的稳定性。
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost.localdomain}notification_email_from ha@localhost.localdomainsmtp_server 127.0.0.1smtp_connect_timeout 30router_id r_id
}vrrp_script check_run {script /opt/keepalived/ha/ha_service_check.shinterval 3 # 检测时间间隔 单位sfall 3 # 连续失败次数达到 3 次后执行下面的操作#weight -60
}vrrp_instance VI_1 {state BACKUP#nopreempt # 配置是否抢占interface ens33 # 网卡track_interface {ens33}virtual_router_id 155 # 匹配号priority 100 # 优先级advert_int 2 # VRRP 通告频率 单位秒authentication {auth_type PASSauth_pass P@sSw0rd}track_script {check_run}notify_fault /opt/keepalived/ha/ha_notify_fault.shnotify_master /opt/keepalived/ha/ha_notify_master.shnotify_backup /opt/keepalived/ha/ha_notify_backup.shvirtual_ipaddress {192.168.121.155/19 dev ens33 scope global}
}
3.4 主备切换通知及检测机制
在主备配置完成后,或发生主备切换时,Keepalived 可触发通知,并执行相应的脚本,确保高可用性。
通知脚本触发机制
在以下两种情况下,Keepalived 会执行通知脚本:
- 主备状态发生切换(包括 Keepalived 启动时的角色确定)。
- 异常情况触发(如检测到 Redis/数据库服务故障、关键进程异常等)。
通知脚本可用于告警通知、日志记录、服务切换等操作。
3.5 主备状态检测脚本配置
Keepalived 通过 vrrp_script 定义健康检查规则,检测异常并触发相应的主备切换流程。
vrrp_script check_run {script /opt/keepalived/ha/ha_service_check.sh # 健康检测脚本interval 3 # 检测间隔时间,单位:秒fall 3 # 连续失败 3 次后,触发主备切换
}
检测机制说明:
- 检测间隔:每 3 秒执行一次检测。
- 失败阈值:当检测到连续 3 次失败,触发
notify_fault事件,执行/opt/keepalived/ha/ha_notify_fault.sh,停止keepalived,进入故障状态。
3.6 自定义触发主备切换
除因宕机、Keepalived 进程异常退出导致的主备切换外,还支持自定义触发条件。例如,可在检测到以下异常情况时触发切换:
- 关键 Java 进程异常,导致服务不可用。
- Redis 或 数据库宕机,影响数据读写。
- 磁盘剩余空间低于 10% ,可能导致系统无法正常运行。
健康检查脚本 /opt/keepalived/ha/ha_service_check.sh 示例:
#!/bin/bash
# 主备检测脚本
# 省略检测逻辑...
#if(数据库异常) exit 1
exit 0 # 0 代表检测通过,其他值代表失败
异常检测流程:
- 每 3 秒检测一次(
interval 3)。 - 连续 3 次失败(
fall 3),触发notify_fault,执行/opt/keepalived/ha/ha_notify_fault.sh。
3.7 故障处理(notify_fault)
当检测到故障(如 Redis/数据库 异常)并连续 3 次失败,Keepalived 触发 notify_fault 事件,执行 /opt/keepalived/ha/ha_notify_fault.sh 进行故障处理。
#!/bin/bash
# 故障通知脚本
echo "检测到异常...做切换" >> $HA_LOG_FILE
service stop keepalived
# 其他逻辑...
主机的 keepalived 停止则备机的 keepalived 会自动切换为新的主机,接管虚拟VIP。
3.8 主备切换流程
初始状态及切换逻辑
在该方案中,主机(Master)和备机(Backup)在初始化时,state 参数均设置为 BACKUP,这样:
- 第一次启动时,主机会自动晋升为 Master,执行
/opt/keepalived/ha/ha_notify_master.sh。 - 主机宕机后,备机检测到主机失联,自动晋升为 Master,执行
/opt/keepalived/ha/ha_notify_master.sh。
注意:角色切换不会修改
keepalived.conf配置文件的state参数值,避免配置被错误覆盖。
3.9 主备切换相关脚本
主机晋升(notify_master)
当节点晋升为 Master 时,Keepalived 触发 notify_master,执行 /opt/keepalived/ha/ha_notify_master.sh,示例如下:
#!/bin/bash
# 主机晋升脚本
echo "当前节点晋升为主机(Master)"
# 省略具体逻辑...
exit 0
切换为备机(notify_backup)
当节点降级为 Backup 时,Keepalived 触发 notify_backup,执行 /opt/keepalived/ha/ha_notify_backup.sh,示例如下:
#!/bin/bash
# 备机降级脚本
echo "当前节点降级为备机(Backup)"
# 省略具体逻辑...
exit 0
4. 测试 Keepalived 主备切换
4.1 启动 Keepalived
service start keepalived
4.2 验证 VIP 绑定情况
ip addr
如果发现 vip 存在则表示配置成功。
4.3 模拟主机故障,观察 VIP 漂移
# 停止 Master(在主机上执行)
service stop keepalived# 在 Backup 上检查 VIP 是否接管(在备机上执行)
ip addr
若 vip 已转移到 Backup 服务器,则主备切换成功!
5. Keepalived 进阶功能
5.1 结合 LVS 负载均衡
Keepalived 可用于管理 LVS(Linux Virtual Server) ,实现高可用负载均衡。
5.2 结合 Nginx 实现高可用
可结合 Keepalived + Nginx 方案,构建高可用的 Web 负载均衡架构。
6. 总结
✅ Keepalived 适用于哪些场景?
- 服务器高可用(防止单点故障)
- LVS 负载均衡管理
- Nginx / HAProxy 高可用方案
✅ 使用 Keepalived 的核心步骤
- 安装 Keepalived
- 配置 VRRP(设置 VIP、优先级)
- 测试主备切换(模拟 Master 故障,观察 VIP 迁移)
📢 结语
如果你正在构建一个高可用架构,Keepalived 绝对是一个简单易用、高效可靠的解决方案!
📌 你用过 Keepalived 吗?在评论区分享你的使用经验吧!
🌟 你的支持是我持续创作的动力,欢迎点赞、收藏、分享!
相关文章:
Keepalived 入门详解:高可用集群部署最佳实践!
1. 什么是 Keepalived? 在分布式集群中,单点故障(SPOF) 是影响系统稳定性的重要问题。Keepalived 作为一款高可用服务软件,可以有效防止集群单点故障,保障系统的高可用性。 Keepalived 最初是为 LVS&#…...
SparkStreaming之04:调优
SparkStreaming调优 一 、要点 4.1 SparkStreaming运行原理 深入理解 4.2 调优策略 4.2.1 调整BlockReceiver的数量 案例演示: object MultiReceiverNetworkWordCount {def main(args: Array[String]) {val sparkConf new SparkConf().setAppName("Networ…...
开发博客系统
前言 准备工作 数据库表分为实体表和关系表 第一,建数据库表 然后导入前端页面 创建公共模块 就是统一返回值,异常那些东西 自己造一个自定义异常 普通类 mapper 获取全部博客 我们只需要返回id,title,content,us…...
微信小程序上如何使用图形验证码
1、php服务器生成图片验证码的代码片段如下: 注意红框部分的代码,生成的是ArrayBuffer类型的二进制图片 2、显示验证码 显示验证码,不要直接image组件加上src显示,那样拿不到cookie,没有办法做图形验证码的验证&…...
IntelliJ IDEA 构建项目时内存溢出问题
问题现象 在使用 IntelliJ IDEA 构建 Java 项目时,遇到了以下错误: java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space这是一个典型的 Java 堆内存不足错误,表…...
大模型微调与RAG检索增强技术深度解析
一、引言 随着人工智能技术的飞速发展,大模型(如BERT、GPT等)在自然语言处理、计算机视觉等领域取得了显著成效。然而,这些预训练好的大模型往往难以直接应用于特定业务场景,因此,大模型微调(F…...
[liorf_localization_imuPreintegration-2] process has died
使用liorf,编译没报错,但是roslaunch报错如下: 解决方法: step1: 如果你之前没有安装 GTSAM,可以尝试安装它 step2: 检查是否缺少依赖库 ldd /home/zz/1210/devel/lib/liorf_localization/liorf_localization_imuPr…...
2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)
首先到官网上下载安装包:http://www.mysql.com 点击下载,拉到最下面,点击社区版下载 windows用户点击下面适用于windows的安装程序 点击下载,网络条件好可以点第一个,怕下着下着断了点第二个离线下载 双击下载好的安装…...
数列极限入门习题
数列极限入门习题 lim n → ∞ ( 1 1 2 1 3 ⋯ 1 n ) 1 n \lim\limits_{n\rightarrow\infty}(1 \frac{1}{2}\frac{1}{3}\cdots\frac{1}{n})^{\frac{1}{n}} n→∞lim(12131⋯n1)n1 lim n → ∞ ( 1 n 1 1 n 2 ⋯ 1 n n ) \lim\limits_{n\rightarrow\…...
【Python/Pytorch】-- 创建3090Ti显卡所需环境
文章目录 文章目录 01 服务器上,存在三个anaconda,如何选择合适的,创建python环境?02 conda、anaconda、cuda、cudnn区别03 用到一些指令04 如何指定cuda的版本?05 conda跟pip的区别?06 pycharm控制台07 服…...
如何在无图形化界面的服务器上下载百度网盘的超大文件(10GB以上)?
目录 登录百度网盘账号 进入特定的文件夹 下载 完整教程 登录百度网盘账号 第一次登录的时候会展示: Please visit: https://openapi.baidu.com/oauth/2.0/authorize?client_idxxx And authorize this app Paste the Authorization Code here within 10 minut…...
AI应用测试:遇到类ChatGPT的流式接口要如何压测?
先说结论: 使用最普遍的JMeter 就能支持类 OpenAI 的流式接口(如 ChatGPT 的流式聊天接口)的测试 总体设置 JMeter 支持测试 OpenAI 的流式接口,但需要额外配置(如启用 KeepAlive 和调整超时)。如果需要实时处理流式响应,使用 Regular Expression Extractor 或自定义脚…...
Linux磁盘情况查询
一、查询系统整体磁盘使用情况 1、基本语法 df -h 2、示例 二、查询指定目录的磁盘占用情况 1、基本语法 du -h 查询指定目录的磁盘占用情况,默认为当前目录 2、常用选项 选项 说明 -h 以人类可读的格式显示磁盘使用情况(例如,KB、…...
数据库原理3
1.在SQL中,外模式对应于试图(VIEW)和部分基本表;模式对应于基本表;内模式对应于存储文件。 2.FETCH:实施游标推进 3.数据操纵:insert,update,delete 数据控制:grant,revoke 数据定义:create,drop,alter 4.物理结构…...
【3D格式转换SDK】HOOPS Exchange技术概览(二):3D数据处理高级功能
在当今数字化工程领域,HOOPS Exchange作为一款强大的SDK,为3D工程应用程序的开发提供了关键支持。本文将深入剖析其基本组件、特定功能以及数据结构,带您全面了解这一驱动3D数据处理的核心工具。 一、概述 HOOPS Exchange专注于访问和重…...
利用Adobe Acrobat 实现PPT中图片分辨率的提升
1. 下载适用于 Windows 的 64 位 Acrobat 注册方式参考:https://ca.whu.edu.cn/knowledge.html?type1 2. 将ppt中需要提高分辨率的图片复制粘贴到新建的pptx问价中,然后执行“文件—>导出---->创建PDF、XPS文档” 3. 我们会发现保存下来的distrib…...
Python frozenset介绍
在 Python 中,frozenset 是一种不可变(immutable)的集合类型,它是 set 的不可变版本。与普通的 set 类型不同,frozenset 的内容一旦创建就不能被修改,这使得它在某些场景下非常有用。 1. 特点 不可变性&am…...
docer swarm集群部署springboot项目
1.准备两台服务器,安装好docker、docker-compose 因为用到了docker仓库,安装harbor,可以从github下载离线安装包 2. 我这边用到了gitlab-ci,整体流程也都差不多 1)打包mvn clean install 2)打镜像 docker-compose -f docker-compo…...
Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验
目录 Elasticsearch查询分类 叶子查询 全文检索查询 match查询 multi_match查询 精确查询 term查询 range查询 复杂查询 bool查询简单应用 bool查询实现排序和分页 bool查询实现高亮 场景分析 问题思考 解决方案 search_after方案(推荐) point in time方案 方案…...
解决局域网访问Dify却仅显示nginx页面的问题
为什么dify在本机可以正常访问,局域网通过ip访问却只看到欢迎使用nginx的提示,如果访问服务器ip/apps则直接提示404 Not Found。这是怎么回事该如何解决呢?文章中将一步步解决这些问题。 前言 之前在服务器部署了dify,也在服务器…...
deepseek思考,谁是下一个deepseek?
这两天连续看了两篇某B站up关于AI的分析,也是感触很多 讲得内容咱先不说,讲得是真好。怎么说呢,就“活该人家能赚到钱”就对了。 第一篇,他说了一个事儿,就是AI未来的趋势,1000天内,代替世界上…...
从小米汽车召回看智驾“命门”:智能化时代 — 时间就是安全
2025年1月,小米因车辆“授时同步异常”召回3万余辆小米SU7,成为其造车历程中的首个重大安全事件。 从小米SU7召回事件剖析,授时同步何以成为智能驾驶的命门? 2024年11月,多名车主反馈SU7标准版的智能泊车辅助功能出现…...
OpenAI 最后一代非推理模型:OpenAI 发布 GPT-4.5预览版
最后一代非推理大模型 在人工智能领域,OpenAI 一直以其创新的技术和卓越的产品引领着行业的发展。近期,OpenAI 正式发布了 GPT-4.5 研究预览版。不仅如此,官方还宣称 GPT-4.5 被定位为 “最后一代非推理模型”,这一消息再次引起了…...
React Native国际化实践(react-i18next)
React Native国际化实践 一、主流国际化方案选择 react-i18next react-native-localize react-i18next:功能强大的国际化框架,支持复数、插值、嵌套等复杂语法,且与React无缝集成。react-native-localize:用于获取设备语言和地区…...
ioday2----->标准io函数
思维导图: 练习: 1将当前的时间写入到time. txt的文件中,如果ctrlc退出之后,在再次执行支持断点续写 1.2022-04-26 19:10:20 2.2022-04-26 19:10:21 3.2022-04-26 19:10:22 //按下ctrlc停止,再次执行程序 4.2022…...
竞争只属于失败者
“竞争只属于失败者”这一观点源自知名投资人、PayPal联合创始人彼得蒂尔(Peter Thiel)。他在斯坦福大学的创业课程中提出,成功的企业应追求垄断地位,而非陷入激烈的市场竞争。蒂尔认为,垄断使企业能够专注于长期发展和…...
【代码分享】基于IRM和RRT*的无人机路径规划方法详解与Matlab实现
基于IRM和RRT*的无人机路径规划方法详解与Matlab实现 1. IRM与RRT*的概述及优势 IRM(Influence Region Map)通过建模障碍物的影响区域,量化环境中的安全风险,为RRT算法提供启发式引导。RRT(Rapidly-exploring Random…...
深度学习代码解读——自用
代码来自:GitHub - ChuHan89/WSSS-Tissue 借助了一些人工智能 2_generate_PM.py 功能总结 该代码用于 生成弱监督语义分割(WSSS)所需的伪掩码(Pseudo-Masks),是 Stage2 训练的前置步骤。其核心流程为&a…...
C++第六节:stack和queue
本节目标: stack的介绍与使用queue的介绍与使用priority_queue的介绍与使用容器适配器模拟实现与结语 1 stack(堆)的介绍 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,只能从容器的一端进行元素的插…...
华宇“ITSS咨询服务标准助力政务服务区块链解决方案设计”案例成功入选ITSS典型应用案例库
近日,华宇“ITSS咨询服务标准助力政务服务区块链解决方案设计”案例经专家评审后成功入选由全国信息技术标准化技术委员会信息技术服务分技术委员会和中国电子工业标准化技术协会信息技术服务分会(以下简称“ITSS分会”)联合组织建立的“信息…...
