news 2026/8/14 13:06:20

Keepalived高可用全解析:从原理到实战,告别单点故障

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Keepalived高可用全解析:从原理到实战,告别单点故障

Keepalived高可用全解析:从原理到实战,告别单点故障

一篇文章掌握VRRP协议和Keepalived集群,让服务7x24小时不间断运行

前言

想象一下:你的网站流量很大,部署了多台Web服务器,前端用LVS做负载均衡。一切看起来很完美——直到某个深夜,LVS服务器突然宕机了。所有用户都无法访问网站,而你还在睡梦中。

这就是单点故障的典型场景。负载均衡器本身成为了整个架构中最脆弱的一环。

Keepalived正是为了解决这个问题而生的。它通过VRRP协议实现高可用,让多台服务器共享一个虚拟IP(VIP),一台宕机后另一台自动接管,用户几乎无感知。

本文将从VRRP原理讲起,涵盖Keepalived架构配置文件详解主备切换实验脑裂问题与解决方案等核心内容,让你全面掌握Keepalived高可用技术。

一、HA集群能解决哪些问题?

1.1 HA集群的适用场景

并不是所有服务都适合放入HA集群。在部署前,需要弄清楚一个问题:服务放到HA集群中,可用性是否会增加?

服务类型放入HA集群的效果原因
DNS、LDAP效果不大自带故障转移和负载均衡,客户端可配置多个服务器
RabbitMQ、Galera效果显著未自带Failover机制,HA集群提供故障转移能力

1.2 HA集群无法解决的问题

  • 应用程序bug导致崩溃:即使配置HA集群,应用同样会崩溃,只是会转移到其他节点——但其他节点也存在相同bug
  • 网络架构故障:集群本身正常,但网络不可达,客户端仍然无法访问

因此,部署HA集群时需要全链路考虑,避免任何单点故障。

二、Keepalived简介

Keepalived是一个用C语言编写的路由软件,主要目标是为Linux系统提供负载均衡高可用性能力。

2.1 Keepalived两大核心功能

功能说明
健康检查检测集群中各个服务节点的状态,自动剔除故障节点
VRRP实现通过虚拟路由冗余协议,实现主备切换和高可用

2.2 Keepalived检测层次

Keepalived工作于TCP/IP参考模型的三层、四层、七层

层级检测方式说明
三层(网络层)ICMP协议(Ping)检测服务器是否存活
四层(传输层)TCP端口检测检测服务端口是否正常(如80、22)
七层(应用层)自定义脚本检测应用程序是否正常工作

三、VRRP协议详解

3.1 为什么需要VRRP?

在局域网中,主机通常配置一个默认网关来访问外部网络。如果该网关设备发生故障,所有主机的网络流量都会中断。

传统解决方案是部署多个网关,但这会引发IP地址冲突问题。VRRP既能实现网关备份,又能解决多个网关之间的冲突。

3.2 VRRP核心概念

VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)通过将多台路由设备组合成一台虚拟路由器,实现网关的高可用。

概念说明
VRRP路由器运行VRRP协议的路由器(如R1、R2)
VRID虚拟路由器标识符,同一VRRP组的设备使用相同VRID
虚拟路由器由VRRP虚拟出来的逻辑设备(非真实物理设备)
虚拟IP地址虚拟路由器的IP地址(用户配置的网关地址)
虚拟MAC地址格式为0000-5e00-01xx(xx为VRID)
Master路由器承担报文转发任务,响应ARP请求
Backup路由器侦听Master状态,随时准备接管
Priority优先级(0-255),值越大越优先

3.3 VRRP报文格式

VRRP只有一种报文——Advertisement报文,基于组播方式发送,目的地址为224.0.0.18

3.4 VRRP定时器

定时器说明默认值
ADVER_INTERVALMaster发送通告报文的时间周期1秒
MASTER_DOWNBackup设备监听超时后切换为Master约3秒

MASTER_DOWN计算公式:

MASTER_DOWN = (3 × ADVER_INTERVAL) + Skew_time Skew_time = (256 - Priority) / 256

3.5 VRRP主备选举过程

场景1:优先级不相等

场景2:优先级相等

当优先级相等时,比较接口IP地址,IP地址大的成为Master

场景3:IP地址拥有者

当某台路由器的接口IP地址与虚拟IP地址相同时,该路由器无条件成为Master(优先级自动为255)。

3.6 Master与Backup状态行为

Master状态行为Backup状态行为
定期发送VRRP通告报文接收Master的VRRP报文
以虚拟MAC响应ARP请求不对虚拟IP的ARP请求做响应
转发目的MAC为虚拟MAC的IP报文丢弃目的MAC为虚拟MAC的IP报文
允许ping通虚拟IP丢弃目的IP为虚拟IP的报文

四、Keepalived实践:搭建高可用Web集群

4.1 环境规划

主机名IP地址角色
web1.shep.cloud10.1.8.11Master(主节点)
web2.shep.cloud10.1.8.12Backup(备节点)
client1.shep.cloud10.1.8.21客户端

4.2 基础配置

# web1配置[root@web1 ~]hostnamectl set-hostname web1.shep.cloud[root@web1 ~]nmcli connection modify ens33 ipv4.method manual\ipv4.addresses10.1.8.11/24\ipv4.gateway10.1.8.2\ipv4.dns223.5.5.5\autoconnectyes[root@web1 ~]nmcli connection up ens33# web2配置(同理)[root@web2 ~]hostnamectl set-hostname web2.shep.cloud[root@web2 ~]nmcli connection modify ens33 ipv4.method manual\ipv4.addresses10.1.8.12/24\ipv4.gateway10.1.8.2\ipv4.dns223.5.5.5\autoconnectyes[root@web2 ~]nmcli connection up ens33

4.3 部署Nginx服务

# web1和web2都执行[root@web{1,2}~]wget-O/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo[root@web{1,2}~]yuminstall-ynginx[root@web{1,2}~]echo"welcome to$(hostname)">/usr/share/nginx/html/index.html[root@web{1,2}~]systemctlenablenginx--now# 验证[root@client1 ~]curl10.1.8.11 welcome to web1.shep.cloud[root@client1 ~]curl10.1.8.12 welcome to web2.shep.cloud

4.4 配置Keepalived

web1(Master节点)
[root@web1 ~]yuminstall-ykeepalived[root@web1 ~]cp/etc/keepalived/keepalived.conf{,.ori}[root@web1 ~]vim/etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { router_id web1 } vrrp_instance nginx { state MASTER interface ens33 virtual_router_id 51 priority 110 advert_int 1 authentication { auth_type PASS auth_pass shep@123 } virtual_ipaddress { 10.1.8.100/24 } }
[root@web1 ~]systemctlenablekeepalived--now
web2(Backup节点)
[root@web2 ~]yuminstall-ykeepalived[root@web2 ~]cp/etc/keepalived/keepalived.conf{,.ori}[root@web2 ~]vim/etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { router_id web2 } vrrp_instance nginx { state BACKUP interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass shep@123 } virtual_ipaddress { 10.1.8.100/24 } }
[root@web2 ~]systemctlenablekeepalived--now

4.5 配置文件参数说明

参数说明
router_id路由器标识,集群中各节点必须不同
state初始角色(MASTER/BACKUP),实际由优先级决定
interfaceVIP绑定的网卡接口
virtual_router_id虚拟路由器ID(1-255),同一集群必须相同
priority优先级(值越大越优先)
advert_int心跳通告间隔(秒)
authentication心跳认证凭据,同一集群必须相同
virtual_ipaddress虚拟VIP地址列表

4.6 验证高可用

# 查看VIP在哪台机器上[root@web1 ~]ip-bra show ens33 ens33 UP10.1.8.11/2410.1.8.100/24 fe80::.../64# ✅ VIP在web1上[root@web2 ~]ip-bra show ens33 ens33 UP10.1.8.12/24 fe80::.../64# ❌ web2没有VIP# 客户端访问[root@client1 ~]curl10.1.8.100 welcome to web1.shep.cloud# 模拟web1故障(停止keepalived)[root@web1 ~]systemctl stop keepalived# VIP切换到web2[root@web2 ~]ip-bra show ens33 ens33 UP10.1.8.12/2410.1.8.100/24 fe80::.../64# 客户端访问(无感知切换)[root@client1 ~]curl10.1.8.100 welcome to web2.shep.cloud# 恢复web1[root@web1 ~]systemctl start keepalived# VIP回到web1(抢占模式)[root@web1 ~]ip-bra show ens33 ens33 UP10.1.8.11/2410.1.8.100/24 fe80::.../64

五、Keepalived日志配置

5.1 开启Debug日志

[root@web1 ~]vim/etc/sysconfig/keepalivedKEEPALIVED_OPTIONS="-D -d -S 0"

参数说明:

参数含义
-D后台守护进程模式(默认)
-d开启Debug调试日志(生产环境慎用,日志量大)
-S 0使用syslog facility 0输出日志

5.2 单独输出Keepalived日志

[root@web1 ~]vim/etc/rsyslog.d/keepalived.conf local0.* /var/log/keepalived.log[root@web1 ~]systemctl restart rsyslog[root@web1 ~]systemctl restart keepalived[root@web1 ~]tail-f/var/log/keepalived.log

六、多网卡心跳配置(重要!)

当服务器有多个网卡时,必须指定心跳报文的源IP,否则可能导致脑裂。

vrrp_instance nginx { state MASTER interface ens36 mcast_src_ip 20.0.0.11 # 指定心跳组播报文的源IP virtual_router_id 51 priority 110 advert_int 1 authentication { auth_type PASS auth_pass shep@123 } virtual_ipaddress { 10.1.1.10/24 } }

⚠️如果不指定mcast_src_ip,Keepalived可能从任意网卡发送心跳报文,备机收不到VRRP包,两台机器都会认为自己是Master,产生脑裂

七、脑裂问题与解决方案

7.1 什么是脑裂?

在Keepalived高可用集群中,脑裂(Split-Brain)是指主从节点之间因通信中断,导致各自认为对方故障,从而同时争抢虚拟IP,引发集群状态混乱的现象。

7.2 脑裂产生的原因

原因说明
网络问题主从节点间心跳线路故障、断网或延迟过高
防火墙规则VRRP协议端口(UDP 112)被屏蔽
资源耗尽CPU/内存耗尽,无法响应心跳请求
配置错误virtual_router_idauth_pass等参数不一致

7.3 脑裂的危害

  • 双节点同时持有VIP,客户端请求混乱
  • 数据库等场景可能引发数据不一致(双写冲突)
  • 集群失去高可用意义,甚至因资源竞争导致服务崩溃

7.4 如何避免脑裂?

1. 增加心跳检测线路
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 track_interface { eth0 eth1 # 备用心跳线路 } }
2. 启用VRRP认证
authentication { auth_type PASS auth_pass shep@123 }
3. 防火墙放行VRRP协议
[root@web1 ~]firewall-cmd --add-protocol=vrrp--permanent[root@web1 ~]firewall-cmd--reload
4. 部署第三方检测工具

使用fence机制或脚本,检测到脑裂时强制隔离异常节点:

vrrp_instance VI_1 { # ...其他配置 notify_master "/etc/keepalived/check_split_brain.sh master" notify_backup "/etc/keepalived/check_split_brain.sh backup" }
5. 监控与告警

通过Zabbix、Prometheus等工具监控Keepalived状态,发现双主节点同时存在时及时告警。

八、Keepalived + LVS 联动配置

Keepalived最初就是为LVS设计的,可以在配置文件中直接管理LVS规则。

! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.200.100 } } # LVS配置 virtual_server 192.168.200.100 443 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.201.100 443 { weight 1 } real_server 192.168.201.101 443 { weight 1 } }
参数说明
delay_loop健康检查间隔(秒)
lb_algo负载均衡算法(rr/wrr/lc/wlc等)
lb_kindLVS模式(NAT/DR/TUN)
persistence_timeout持久连接超时时间(秒)
protocol协议(TCP/UDP/SCTP)
real_server后端真实服务器配置

写在最后

本文从VRRP原理到Keepalived实战,全面介绍了高可用集群的核心技术:

知识点核心内容
VRRP协议虚拟路由器、Master选举、优先级机制
Keepalived健康检查、VRRP实现、LVS联动
主备切换状态转移、抢占模式、无缝切换
脑裂问题产生原因、危害、解决方案
日志配置Debug日志、独立日志文件

💡 关键经验总结

  1. Keepalived的state只是初始状态,实际Master由priority决定,高优先级抢占
  2. 多网卡环境务必配置mcast_src_ip,否则可能因心跳发送错误导致脑裂
  3. 同一集群的virtual_router_idauth_pass必须一致
  4. 生产环境慎开-ddebug模式,日志量巨大
  5. 配合健康检查脚本,可实现对后端服务的精细监控

📌核心命令速查

# 安装yuminstall-ykeepalived# 配置文件/etc/keepalived/keepalived.conf# 服务管理systemctl start|stop|restart|status keepalived# VIP查看ip-bra show ens33ipaddr show ens33# 日志tail-f/var/log/keepalived.logtail-f/var/log/messages|grepKeepalived# 防火墙放行VRRPfirewall-cmd --add-protocol=vrrp--permanentfirewall-cmd--reload

跳发送错误导致脑裂
3.同一集群的virtual_router_idauth_pass必须一致
4.生产环境慎开-ddebug模式,日志量巨大
5.配合健康检查脚本,可实现对后端服务的精细监控

📌核心命令速查

# 安装yuminstall-ykeepalived# 配置文件/etc/keepalived/keepalived.conf# 服务管理systemctl start|stop|restart|status keepalived# VIP查看ip-bra show ens33ipaddr show ens33# 日志tail-f/var/log/keepalived.logtail-f/var/log/messages|grepKeepalived# 防火墙放行VRRPfirewall-cmd --add-protocol=vrrp--permanentfirewall-cmd--reload

📝 点点关注,持续更新,欢迎技术讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/14 13:05:59

【ORC】在 AWS S3 或 Azure Blob 上读取超大 ORC 文件(>5TB)时,如何避免 Footer 读取成为瓶颈?

超大 ORC 文件在云存储上的 Footer 读取优化:从 P0 故障到毫秒级启动 0. 问题引入:一次金融交易归档系统的 P0 级故障 用户原始问题:“在 AWS S3 或 Azure Blob 上读取超大 ORC 文件(>5TB)时,如何避免 Footer 读取成为瓶颈?” 在我们负责的全球金融交易归档系统中,…

作者头像 李华
网站建设 2026/8/14 13:05:12

什么是PCB?-多层板补齐仿真体系的两大维度

SI、PI 仿真重点分析电路板内部信号与电源,而 EMC 电磁仿真和热仿真,关注电路板对外辐射干扰、整机温升表现。很多多层板样机硬件功能全部正常,但是 EMC 认证测试辐射发射超标,或者大功率设备局部过热器件老化快。传统处理方式是样…

作者头像 李华
网站建设 2026/8/14 13:03:30

HarmonyOS6.1.1-Camera:巡检相机权限已通过-预览为何仍可能无法启动

相机页面最容易出现一句让人误判的话:权限已允许。 看到它以后,很多人会自然把后半句补上:“那预览应该起来了。”我第一次排这个问题时也是如此。页面已经获得 ohos.permission.CAMERA,按钮也没有灰掉,右侧却还是一块…

作者头像 李华
网站建设 2026/8/14 13:03:10

pycharm添加python解释器过程中,一直识别不出环境:C:\Users\Lchl.anaconda\envs\myenv\python.exe: can‘topen file ...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者&…

作者头像 李华
网站建设 2026/8/14 13:01:18

计算机毕业设计之在线心理咨询预约平台

在当今快节奏、高压力的社会环境中,心理健康问题日益凸显,成为影响人们生活质量和工作效率的重要因素。随着公众对心理健康重视程度的提升,对专业心理咨询服务的渴求也愈发强烈。然而,传统心理咨询模式受限于时间、空间及资源分配…

作者头像 李华