ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

高可用集群Keepalived

2026/9/3 20:35:01 拓冰建站 浏览量
高可用集群Keepalived 一、高可用集群核心基础认知1.1 主流集群类型企业运维三大核心集群架构分工明确、适配不同业务场景LB负载均衡集群核心解决并发压力代表工具LVS、HAProxy、Nginx用于Web、API网关流量分发HA高可用集群核心解决单点故障代表工具Keepalived用于网关、数据库、Redis核心服务容灾HPC高性能集群核心解决算力瓶颈多用于大数据、科学计算场景1.2 高可用核心指标与SLA系统可用性公式A MTBF/(MTBFMTTR)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-VRIDMaster主节点正常承载业务流量Backup备节点实时监听主节点状态故障时接管Priority节点优先级1-254数值越高优先级越高VRRP核心特性周期性心跳通告、支持抢占/非抢占模式、支持密码认证、毫秒级故障切换。二、Keepalived 核心原理与架构2.1 Keepalived 简介Keepalived是基于C语言开发的开源高可用软件原生适配LVS四层负载均衡依托VRRP协议实现VIP漂移、节点健康检测、故障自动切换是Linux生态高可用的标准工具。核心能力基于VRRP协议实现虚拟IP地址流动实现业务无感知切换自动生成、维护LVS/IPVS四层负载均衡规则四层/七层全方位健康检测自动剔除故障节点支持自定义脚本联动适配HAProxy、Nginx、MySQL等所有服务高可用支持BFD快速故障检测实现毫秒级切换2.2 核心组件架构Keepalived用户空间核心组件各司其职、协同工作VRRP Stack核心模块负责VRRP心跳通告、节点状态协商、VIP漂移Checkers健康检测模块实时监控后端服务、本机进程状态IPVS WrapperLVS规则管理模块自动生成、清理负载均衡规则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 keepalived3.2 核心文件路径主程序/usr/sbin/keepalived主配置文件/etc/keepalived/keepalived.conf配置示例/usr/share/doc/keepalived/服务单元文件/lib/systemd/system/keepalived.service环境配置文件/etc/sysconfig/keepalived3.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 {594233887qq.com}# 发件人邮箱notification_email_from keepalivedKA1.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# 心跳通告间隔1sadvert_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 {594233887qq.com}notification_email_from keepalivedKA1.orgsmtp_server 127.0.0.1smtp_connect_timeout 30router_id KA1vrrp_skip_check_adv_addrvrrp_garp_interval 1vrrp_gna_interval 1vrrp_mcast_group4 224.0.0.18}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 20priority 100 advert_int 1authentication {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 eth0virtual_router_id 20priority 80 # 优先级低于主节点advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.100/24 dev eth0 label eth0:0}}5.2 抢占模式与非抢占模式优化默认抢占模式主节点恢复后会立刻抢回VIP容易导致业务抖动。生产推荐非抢占模式或延迟抢占。非抢占模式配置所有节点设为BACKUPvrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 20priority 100 nopreempt # 开启非抢占advert_int 1}延迟抢占模式节点恢复后延迟10s抢占规避启动不稳定问题preempt_delay 105.3 单播配置跨网段集群必备默认VRRP通过组播通信仅支持同网段跨机房、跨网段集群需开启单播模式。配置示例节点互相指定对方IPvrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 20priority 100advert_int 1# 单播配置unicast_src_ip 172.25.254.20 # 本机IPunicast_peer {172.25.254.30 # 对端节点IP}}注意单播模式需关闭vrrp_strict否则服务启动失败。5.4 架构二双主高可用架构MASTER/MASTER解决主备架构资源闲置问题两个VIP分别绑定两台节点双节点同时对外服务提升资源利用率。节点1配置VIP1主、VIP2备vrrp_instance WEB_VIP {state MASTERvirtual_router_id 50priority 100virtual_ipaddress {172.25.254.50 dev eth0}}vrrp_instance SQL_VIP {state BACKUPvirtual_router_id 60priority 80virtual_ipaddress {172.25.254.60 dev eth0}}节点2配置VIP1备、VIP2主vrrp_instance WEB_VIP {state BACKUPvirtual_router_id 50priority 80virtual_ipaddress {172.25.254.50 dev eth0}}vrrp_instance SQL_VIP {state MASTERvirtual_router_id 60priority 100virtual_ipaddress {172.25.254.60 dev eth0}}六、通知脚本与邮件告警实战Keepalived支持节点状态切换主/备/故障时自动触发脚本实现实时邮件告警、业务联动。6.1 脚本类型notify_master节点切换为主节点时触发notify_backup节点切换为备节点时触发notify_fault节点故障时触发6.2 完整邮件告警部署第一步安装邮件工具dnf install mailx s-nail sendmail -ysystemctl enable --now sendmail第二步配置邮箱发件163/QQ邮箱vim /etc/mail.rcset smtpsmtp.163.comset smtp-authloginset smtp-auth-userxxx163.comset smtp-auth-password授权码set fromxxx163.comset ssl-verifyignore第三步编写告警脚本vim /etc/keepalived/mail.sh#!/bin/bashmail_dest594233887qq.commail_send(){mail_subj$HOSTNAME 节点VIP状态切换mail_messdate %F\ %T: VRRP状态切换$HOSTNAME 变为 $1 状态echo $mail_mess | mail -s $mail_subj $mail_dest}case $1 inmaster) 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 masternotify_backup /etc/keepalived/mail.sh backupnotify_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.shinterval 1timeout 2weight -30 # 故障权重减30低于备机优先级fall 2rise 2}# 绑定到VRRP实例vrrp_instance VI_1 {...省略基础配置...track_script {check_haproxy}}第三步开启内核非本地绑定VIP漂移后服务正常监听vim /etc/sysctl.confnet.ipv4.ip_nonlocal_bind 1sysctl -p八、LVSKeepalived 四层负载高可用实战Keepalived原生支持IPVS/LVS可直接配置四层负载均衡自动管理后端RS节点、健康检测、故障剔除。8.1 核心配置参数delay_loop后端节点检测间隔lb_algo调度算法rr/wrr/lc/wlclb_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_ignoreecho 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announceKeepalived LVS配置virtual_server 172.25.254.100 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCPsorry_server 172.25.254.30 80 # 后端节点1real_server 172.25.254.101 80 {weight 1TCP_CHECK {connect_timeout 5nb_get_retry 3 delay_before_retry 3connect_port 80}}# 后端节点2real_server 172.25.254.102 80 {weight 1HTTP_GET {url {path / status_code 200}connect_timeout 1}}}九、生产最佳实践与故障排查9.1 生产落地规范核心业务优先使用非抢占/延迟抢占模式避免业务抖动所有负载均衡节点必须配置进程脚本监控杜绝假活节点跨网段集群使用单播模式关闭严格模式拆分配置文件多集群独立管理便于维护开启日志邮件告警全程监控集群状态9.2 常见故障解决配置不生效RHEL系列需停止并重启服务禁止直接restartVIP无法漂移检查VRID是否唯一、优先级是否正确、防火墙是否放行单播启动失败关闭vrrp_strict严格模式HAProxy切换后无法访问开启ip_nonlocal_bind内核参数十、架构总结结合HAProxy七层负载均衡我们可以搭建出企业终极高可用Web架构Keepalived双主高可用 HAProxy七层负载均衡 后端Web集群彻底解决单点故障、实现流量智能分发、业务毫秒级容灾满足99.999%高可用SLA标准。