想象你的线上业务是家24小时营业的网红餐厅,Keepalived和Heartbeat就像两位永不疲倦的外卖骑手。当主力骑手突然中暑(服务器故障),备用骑手能在0.5秒内接过订单(服务切换)——这就是高可用集群的魅力。今天我们就来拆解这两个"永动机"的工作原理和实操配置。


第一章 基础架构的"双胞胎兄弟"(技术原理)

1.1 Keepalived的VIP魔术

基于VRRP协议的Keepalived如同流量分发指挥官,通过虚拟IP(VIP)在节点间传递"指挥棒"。当主节点心跳消失,备用节点立即接管VIP并大喊:"兄弟们跟我冲!"

典型双节点部署架构: 主节点(Master) → 虚拟IP: 192.168.1.100 备用节点(Backup) → 待命监听

1.2 Heartbeat的心跳韵律

如果说Keepalived是VIP指挥官,Heartbeat就是集群的贴身医疗团队。通过UDP广播+串行电缆的组合拳,节点间持续发送"我还活着"的生命体征信号。

健康检测三要素:

  1. 主从节点配置相同集群名称
  2. 心跳线专用网络通道
  3. 资源接管超时阈值设置

第二章 Keepalived实战:打造虚拟IP漂移系统(示例演示)

技术栈:Ubuntu 22.04 + Keepalived 2.2.4

2.1 主节点配置示例

# /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER           # 身份标识
    interface ens160       # 物理网卡名称
    virtual_router_id 51   # 虚拟路由ID(同一集群需相同)
    priority 100           # 竞选优先级(主>备)
    
    virtual_ipaddress {
        192.168.1.100/24 dev ens160 label ens160:1  # VIP配置
    }
    
    track_script {
        chk_nginx          # 关联健康检测脚本
    }
}

# Nginx健康检测脚本
vrrp_script chk_nginx {
    script "/usr/bin/killall -0 nginx"  # 检测进程是否存在
    interval 2                         # 每2秒检测一次
    weight -20                         # 失败时降低优先级
}

2.2 故障切换演示效果

# 在主节点执行服务停止
$ systemctl stop nginx

# 查看备节点日志(约5秒后)
Jun 20 14:30:05 backup-node Keepalived_vrrp[1234]: 
Entering MASTER STATE  # 成功接管VIP

第三章 Heartbeat实战:构建服务接力系统(示例演示)

技术栈:CentOS 8 + Heartbeat 3.0.6

3.1 基础配置文件模板

# /etc/ha.d/ha.cf
debugfile /var/log/ha-debug   # 调试日志路径
logfile /var/log/ha-log       # 运行日志路径

keepalive 2                   # 心跳间隔(秒)
deadtime 10                   # 故障判定时间
udpport 694                   # 集群通讯端口
bcast ens192                  # 使用ens192网卡广播

node master-node              # 声明集群成员
node backup-node

# 串行心跳备份(可选)
serial /dev/ttyS0             # 通过串口线二次确认

3.2 资源接管配置示例

# /etc/ha.d/haresources
master-node \
    IPaddr::192.168.1.100/24/ens192 \  # 接管VIP
    nginx                             # 启动服务资源

第四章 关联技术扩展:数据库高可用方案

技术栈:MariaDB 10.6 + Keepalived双活配置

4.1 数据库健康检测增强版

vrrp_script chk_mysql {
    script "/usr/local/bin/mysql_healthcheck.sh"
    interval 5
    fall 2         # 连续失败2次触发切换
    rise 1         # 成功1次即恢复
}

# 检测脚本内容:
#!/bin/bash
if ! mysqladmin -u监控用户 -p密码 ping | grep -q 'mysqld is alive'; then
    exit 1
fi

第五章 技术选型指南(双雄对比)

5.1 特性对比表

维度 Keepalived Heartbeat
协议基础 VRRP协议 自主协议
配置复杂度 简单直接 需要更多模板配置
检测粒度 进程级监控 系统级健康检查
典型应用场景 Web负载均衡器 数据库集群
故障切换速度 <1秒 5-10秒

5.2 组合使用场景建议

当需要同时实现快速故障切换精细资源控制时,可采用混合架构:

Web层:Keepalived实现VIP漂移
数据库层:Heartbeat管理主从切换

第六章 避坑指南:生产环境中的雷区

6.1 脑裂问题(Split-brain)防护

现象:两个节点同时宣称自己是主节点

解决方案包:

  1. 多播检测:在第三个节点部署仲裁服务
  2. 硬件联动:配置智能PDU自动断电
  3. 串行心跳:用物理串口线作为第二通信通道

6.2 典型配置误区

错误示例:

vrrp_instance VI_1 {
    priority 100    # 主节点
    priority 100    # 备用节点配置相同优先级 → 引发选举冲突
}

正确配置应确保: 主节点priority=100 > 备节点priority=90


第七章 未来演进:容器时代的HA方案

Kubernetes原生健康检查机制示例:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: web-app
        livenessProbe:
          httpGet:
            path: /health
            port: 80
          initialDelaySeconds: 15
          periodSeconds: 20

第八章 总结,构建永不熄灭的服务灯塔

通过本文的实战演示,我们看到Keepalived和Heartbeat这对黄金组合如何构建坚不可摧的服务堡垒。无论是毫秒级的VIP切换,还是精细的资源管控,选择合适的工具能让业务连续性如同精密的瑞士钟表般可靠。