news 2026/9/3 20:34:47

高可用集群Keepalived

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高可用集群Keepalived

一、高可用集群核心基础认知

1.1 主流集群类型

企业运维三大核心集群架构,分工明确、适配不同业务场景:

  • LB负载均衡集群:核心解决并发压力,代表工具:LVS、HAProxy、Nginx,用于Web、API网关流量分发

  • HA高可用集群:核心解决单点故障,代表工具:Keepalived,用于网关、数据库、Redis核心服务容灾

  • HPC高性能集群:核心解决算力瓶颈,多用于大数据、科学计算场景

1.2 高可用核心指标与SLA

系统可用性公式:A= MTBF/(MTBF+MTTR)

  • MTBF:平均无故障运行时间(越长越好)

  • MTTR:平均故障修复时间(越短越好,高可用核心优化点)

行业通用SLA停机标准(按月统计):

  • 99.9%:月停机≤43.2分钟

  • 99.99%:月停机≤4.32分钟

  • 99.999%:月停机≤21.6秒(金融、核心业务标配)

1.3 故障类型与高可用解决方案

业务故障分为两类:硬件损耗、系统设计缺陷、软件Bug均会引发单点中断。

唯一根治方案:服务冗余+自动故障切换

  • 主备架构(active/passive):一主一备,主故障备接管,资源利用率适中,生产最常用

  • 双主架构(active/active):双节点同时对外服务,资源利用率最大化,适合高并发场景

1.4 核心协议:VRRP虚拟路由冗余协议

VRRP是Keepalived的核心底层协议,专门解决静态网关、网关单点故障问题,广泛应用于物理路由、软件高可用场景。

核心术语

  • VRID:虚拟路由器唯一标识(0-255),同集群节点必须一致

  • VIP:虚拟IP,业务统一访问入口,随节点状态自动漂移

  • VMAC:虚拟MAC地址,格式00-00-5e-00-01-VRID

  • Master:主节点,正常承载业务流量

  • Backup:备节点,实时监听主节点状态,故障时接管

  • Priority:节点优先级(1-254),数值越高优先级越高

VRRP核心特性:周期性心跳通告、支持抢占/非抢占模式、支持密码认证、毫秒级故障切换。

二、Keepalived 核心原理与架构

2.1 Keepalived 简介

Keepalived是基于C语言开发的开源高可用软件,原生适配LVS四层负载均衡,依托VRRP协议实现VIP漂移、节点健康检测、故障自动切换,是Linux生态高可用的标准工具。

核心能力

  1. 基于VRRP协议实现虚拟IP地址流动,实现业务无感知切换

  2. 自动生成、维护LVS/IPVS四层负载均衡规则

  3. 四层/七层全方位健康检测,自动剔除故障节点

  4. 支持自定义脚本联动,适配HAProxy、Nginx、MySQL等所有服务高可用

  5. 支持BFD快速故障检测,实现毫秒级切换

2.2 核心组件架构

Keepalived用户空间核心组件,各司其职、协同工作:

  • VRRP Stack:核心模块,负责VRRP心跳通告、节点状态协商、VIP漂移

  • Checkers:健康检测模块,实时监控后端服务、本机进程状态

  • IPVS Wrapper:LVS规则管理模块,自动生成、清理负载均衡规则

  • System Call:状态回调模块,节点主备切换时触发自定义脚本

  • SMTP:邮件告警模块,故障切换时主动推送通知

  • WatchDog:进程守护,监控Keepalived自身进程状态

2.3 环境部署前置要求

生产部署必须满足以下条件,避免集群异常:

  • 所有节点时间同步(chrony/ntp),防止心跳时间偏差导致误切换

  • 关闭防火墙、SELinux,放行VRRP组播/单播流量

  • 可选:节点主机名互通、SSH密钥互信(方便批量运维)

三、Keepalived 安装与核心文件详解

3.1 快速安装(CentOS/RHEL)

# 安装软件

dnf install keepalived -y

# 启动并设置开机自启

systemctl start keepalived systemctl enable keepalived

# 查看进程状态

ps axf | grep keepalived

3.2 核心文件路径

  • 主程序:/usr/sbin/keepalived

  • 主配置文件:/etc/keepalived/keepalived.conf

  • 配置示例:/usr/share/doc/keepalived/

  • 服务单元文件:/lib/systemd/system/keepalived.service

  • 环境配置文件:/etc/sysconfig/keepalived

3.3 日志功能开启(运维必备)

默认日志分散,手动配置专属日志文件,方便故障排查:

第一步:修改Keepalived环境配置

vim /etc/sysconfig/keepalived

# 添加日志级别参数

KEEPALIVED_OPTIONS="-D -S 6"

第二步:配置rsyslog日志收集

vim /etc/rsyslog.conf

# 新增专属日志路径

local6.* /var/log/keepalived.log

# 重启服务生效

systemctl restart keepalived rsyslog

# 实时查看日志

tail -f /var/log/keepalived.log

四、配置文件全语法详解(生产核心)

Keepalived配置文件分为三大核心模块,结构清晰、层级分明:全局配置、VRRP实例配置、LVS负载均衡配置

4.1 全局配置 global_defs

全局生效参数,定义告警、路由标识、网络优化规则:

global_defs {

# 故障告警接收邮箱

notification_email {

594233887@qq.com

}

# 发件人邮箱

notification_email_from keepalived@KA1.org

# 邮件服务器地址

smtp_server 127.0.0.1 smtp_connect_timeout 30

# 节点唯一标识(建议主机名)

router_id KA1

# 跳过重复通告报文校验,提升性能

vrrp_skip_check_adv_addr

# 免费ARP报文间隔,优化VIP切换后网络缓存

vrrp_garp_interval 1 vrrp_gna_interval 1

# VRRP组播地址

vrrp_mcast_group4 224.0.0.18

# 严格模式(生产建议注释,限制过多)

# vrrp_strict

}

重点注意:开启vrrp_strict后,无法使用单播、无VIP启动服务,生产环境默认关闭。

4.2 VRRP实例配置(核心)

定义虚拟路由器、VIP、主备状态、优先级、认证规则,是高可用的核心配置:

vrrp_instance VI_1 {

# 节点状态:MASTER主节点 / BACKUP备节点

state MASTER

# 绑定物理网卡

interface eth0

# 虚拟路由ID,同集群节点必须一致、全网唯一

virtual_router_id 20

# 节点优先级,主高备低

priority 100

# 心跳通告间隔1s

advert_int 1

# 认证配置(集群节点必须一致)

authentication {

auth_type PASS # 简单密码认证,AH加密认证不推荐

auth_pass 1111 # 密钥仅前8位生效

}

# 虚拟IP(业务访问入口)

virtual_ipaddress {

172.25.254.100/24 dev eth0 label eth0:0

}

}

4.3 子配置文件拆分(复杂生产环境必备)

多集群、多VIP场景下,主配置文件臃肿难维护,可通过include引入子配置:

# 1. 创建配置目录

mkdir /etc/keepalived/conf.d

# 2. 主配置文件末尾引入所有子配置

include /etc/keepalived/conf.d/*.conf

五、企业主流架构实战部署

5.1 架构一:主备高可用架构(MASTER/BACKUP)

最稳定、生产使用率最高的架构,同一时间仅一台节点对外服务,故障自动切换。

Master节点配置

global_defs {

notification_email {

594233887@qq.com

}

notification_email_from keepalived@KA1.org

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id KA1

vrrp_skip_check_adv_addr

vrrp_garp_interval 1

vrrp_gna_interval 1

vrrp_mcast_group4 224.0.0.18

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 20

priority 100 advert_int 1

authentication {

auth_type PASS auth_pass 1111

}

virtual_ipaddress {

172.25.254.100/24 dev eth0 label eth0:0

}

}

Backup节点配置(仅修改3处):

vrrp_instance VI_1 {

state BACKUP # 状态改为备机

interface eth0

virtual_router_id 20

priority 80 # 优先级低于主节点

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

172.25.254.100/24 dev eth0 label eth0:0

}

}

5.2 抢占模式与非抢占模式优化

默认抢占模式:主节点恢复后,会立刻抢回VIP,容易导致业务抖动。生产推荐非抢占模式延迟抢占

非抢占模式配置(所有节点设为BACKUP)

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 20

priority 100 nopreempt # 开启非抢占

advert_int 1

}

延迟抢占模式:节点恢复后延迟10s抢占,规避启动不稳定问题:

preempt_delay 10

5.3 单播配置(跨网段集群必备)

默认VRRP通过组播通信,仅支持同网段;跨机房、跨网段集群需开启单播模式

配置示例(节点互相指定对方IP):

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 20

priority 100

advert_int 1

# 单播配置

unicast_src_ip 172.25.254.20 # 本机IP

unicast_peer {

172.25.254.30 # 对端节点IP

}

}

注意:单播模式需关闭vrrp_strict,否则服务启动失败。

5.4 架构二:双主高可用架构(MASTER/MASTER)

解决主备架构资源闲置问题,两个VIP分别绑定两台节点,双节点同时对外服务,提升资源利用率。

节点1配置:VIP1主、VIP2备

vrrp_instance WEB_VIP {

state MASTER

virtual_router_id 50

priority 100

virtual_ipaddress {

172.25.254.50 dev eth0

}

}

vrrp_instance SQL_VIP {

state BACKUP

virtual_router_id 60

priority 80

virtual_ipaddress {

172.25.254.60 dev eth0

}

}

节点2配置:VIP1备、VIP2主

vrrp_instance WEB_VIP {

state BACKUP

virtual_router_id 50

priority 80

virtual_ipaddress {

172.25.254.50 dev eth0

}

}

vrrp_instance SQL_VIP {

state MASTER

virtual_router_id 60

priority 100

virtual_ipaddress {

172.25.254.60 dev eth0

}

}

六、通知脚本与邮件告警实战

Keepalived支持节点状态切换(主/备/故障)时自动触发脚本,实现实时邮件告警、业务联动

6.1 脚本类型

  • notify_master:节点切换为主节点时触发

  • notify_backup:节点切换为备节点时触发

  • notify_fault:节点故障时触发

6.2 完整邮件告警部署

第一步:安装邮件工具

dnf install mailx s-nail sendmail -y

systemctl enable --now sendmail

第二步:配置邮箱发件(163/QQ邮箱)

vim /etc/mail.rc

set smtp=smtp.163.com

set smtp-auth=login

set smtp-auth-user=xxx@163.com

set smtp-auth-password=授权码

set from=xxx@163.com

set ssl-verify=ignore

第三步:编写告警脚本

vim /etc/keepalived/mail.sh

#!/bin/bash

mail_dest='594233887@qq.com'

mail_send()

{

mail_subj="$HOSTNAME 节点VIP状态切换"

mail_mess="`date +%F\ %T`: VRRP状态切换,$HOSTNAME 变为 $1 状态"

echo "$mail_mess" | mail -s "$mail_subj" $mail_dest

}

case $1 in

master) mail_send master ;;

backup) mail_send backup ;;

fault) mail_send fault ;;

*) exit 1 ;;

esac

第四步:授权并挂载到VRRP实例

chmod +x /etc/keepalived/mail.sh

# 在vrrp_instance中添加

notify_master "/etc/keepalived/mail.sh master"

notify_backup "/etc/keepalived/mail.sh backup"

notify_fault "/etc/keepalived/mail.sh fault"

七、VRRP脚本监控(核心进阶)

通过vrrp_script自定义监控脚本,实现业务进程异常自动降权、VIP切换,解决Keepalived进程正常但业务宕机的盲区问题。

7.1 脚本核心参数

  • interval:检测间隔(秒)

  • timeout:检测超时时间

  • weight:权重加减(负数=故障降权)

  • fall/rise:连续失败/成功次数,切换状态

7.2 生产实战:HAProxy高可用联动

监控HAProxy进程,进程异常则自动降低节点权重,触发VIP切换:

第一步:编写HAProxy检测脚本

vim /etc/keepalived/scripts/haproxy.sh

#!/bin/bash

# 检测haproxy进程是否存活

/usr/bin/killall -0 haproxy

第二步:配置VRRP监控

# 定义监控脚本

vrrp_script check_haproxy {

script "/etc/keepalived/scripts/haproxy.sh"

interval 1

timeout 2

weight -30 # 故障权重减30,低于备机优先级

fall 2

rise 2

}

# 绑定到VRRP实例

vrrp_instance VI_1 {

...省略基础配置...

track_script {

check_haproxy

}

}

第三步:开启内核非本地绑定(VIP漂移后服务正常监听)

vim /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind = 1

sysctl -p

八、LVS+Keepalived 四层负载高可用实战

Keepalived原生支持IPVS/LVS,可直接配置四层负载均衡,自动管理后端RS节点、健康检测、故障剔除。

8.1 核心配置参数

  • delay_loop:后端节点检测间隔

  • lb_algo:调度算法(rr/wrr/lc/wlc)

  • lb_kind:集群模式(DR/NAT/TUN,生产DR为主)

  • persistence_timeout:会话保持时长

  • sorry_server:所有后端故障时的兜底服务器

8.2 LVS-DR模式完整实战

后端Web节点ARP缓存优化配置(所有RS节点执行):

# 绑定VIP到回环网卡

ip addr add 172.25.254.100/32 dev lo

# 关闭ARP应答冲突

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

Keepalived LVS配置:

virtual_server 172.25.254.100 80 {

delay_loop 6

lb_algo wrr

lb_kind DR

protocol TCP

sorry_server 172.25.254.30 80 # 后端节点1

real_server 172.25.254.101 80 {

weight 1

TCP_CHECK {

connect_timeout 5

nb_get_retry 3 delay_before_retry 3

connect_port 80

}

}

# 后端节点2

real_server 172.25.254.102 80 {

weight 1

HTTP_GET {

url {path / status_code 200}

connect_timeout 1

}

}

}

九、生产最佳实践与故障排查

9.1 生产落地规范

  1. 核心业务优先使用非抢占/延迟抢占模式,避免业务抖动

  2. 所有负载均衡节点必须配置进程脚本监控,杜绝假活节点

  3. 跨网段集群使用单播模式,关闭严格模式

  4. 拆分配置文件,多集群独立管理,便于维护

  5. 开启日志+邮件告警,全程监控集群状态

9.2 常见故障解决

  • 配置不生效:RHEL系列需停止并重启服务,禁止直接restart

  • VIP无法漂移:检查VRID是否唯一、优先级是否正确、防火墙是否放行

  • 单播启动失败:关闭vrrp_strict严格模式

  • HAProxy切换后无法访问:开启ip_nonlocal_bind内核参数

十、架构总结

结合HAProxy七层负载均衡,我们可以搭建出企业终极高可用Web架构Keepalived双主高可用 + HAProxy七层负载均衡 + 后端Web集群,彻底解决单点故障、实现流量智能分发、业务毫秒级容灾,满足99.999%高可用SLA标准。

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

告别Copilot时代,衡石正式发布JARVIS数字员工

过去两年,AI 大模型迅速进入企业的各种场景。从代码补全到智能问答,从文档生成到数据分析,AI 工具不断刷新个人生产效率。但随着实践深入,一个现实问题逐渐浮现:绝大多数 AI 仍停留在"工具"阶段,…

作者头像 李华
网站建设 2026/9/3 20:28:39

手机精确倒计时工具悬浮窗口秒数实时显示

时间窗 你有没有过这种经历:看到心仪的优惠券开抢,手速飞快地点进去,结果一看页面显示的倒计时,发现已经晚了半秒——别人早就抢完了。问题出在哪?出在你的手机时钟不够精确,或者说你看时间的姿势不对。 …

作者头像 李华
网站建设 2026/9/3 20:23:26

NVIDIA GPU下的三种分离式推理架构解析

如果你最近在搜大模型推理优化相关的内容,大概率会反复撞见这几个词:PD 分离、Disaggregated Inference、KV Cache 复用、Decode 延迟优化。如果再叠加“NVIDIA”“LPU”这样的关键词,不少入门读者很容易被绕晕。这篇文章的目标很直接&#x…

作者头像 李华
网站建设 2026/9/3 20:20:03

MATLAB实现异构无人系统分布式协同猎捕框架

简介:本资源面向机器人与自动化方向的研究生、科研人员及国防领域工程师,聚焦分布式协同控制下UAV辅助UGV完成地面目标猎捕任务的核心算法研究与工程实现。内容涵盖任务分配、协同感知、A*路径规划、动态目标跟踪、攻防分工、协作攻击策略与反馈学习机制…

作者头像 李华
网站建设 2026/9/3 20:19:47

OpenGL汉字渲染实战:Freetype动态纹理图集全解析

简介:面向OpenGL开发者的汉字显示示例工程,解决中文字符在2D/3D图形场景中的渲染难题,适合游戏开发、科学可视化及虚拟现实等需要中文标注的开发者参考,对具有一定图形学基础、希望扩展文本渲染能力的读者尤为合适。压缩包共包含2…

作者头像 李华
网站建设 2026/9/3 20:16:34

gRPC C++头文件与库配置详解:编译链接错误排查指南

简介:这份专为 Visual Studio 2015 准备的最新版 gRPC 库与头文件合集,面向需要在 VS2015 中搭建 gRPC 服务端和客户端的 C 开发者,可省去从源码编译 gRPC 及依赖组件的繁琐环节。包体共 458 个文件、34.55MB,以 346 个头文件和 5…

作者头像 李华