Keepalived 高可用

type
status
date
slug
summary
tags
category
icon
password

一、Keepalived 高可用简介

  • 目标:解决单点故障,提升服务高可用性。
  • 原理
    • 基于 VRRP 协议
    • 将多个设备组成 VRRP 组,通过 浮动 IP (VIP) 提供服务。
    • 主备选举:优先级高的设备作为主(Master),浮动 IP 绑定在主设备上。
    • 心跳机制:主设备定期发送心跳,备设备接收不到心跳则接管服务。

心跳相关

  • 默认:组播方式,地址 224.0.0.18
  • 可能问题
      1. 防火墙阻断。
      1. 时间不同步。
      1. 网络拥塞/多网卡负载分担。

二、Keepalived 高可用部署

部署环境

  • 两台 haproxy 负载均衡器,配置一致。
  • 在两台服务器上安装 keepalived:

    配置示例

    主节点(Master)

    备节点(Backup)

    测试步骤

    1. 主机查看浮动 IP:ip a → 只有 Master 有 192.168.140.100
    1. 客户端通过浮动 IP 访问业务。
    1. 停止主机,备机会接管 VIP,客户端仍能访问。

    三、Keepalived + 脚本检测服务

    1. 检测 Haproxy

    编写检测脚本:
    配置调用脚本:

    2. 检测 Nginx + MySQL 代理

    • 使用 Nginx stream 模块作为四层代理(示例:MySQL)。
    • 检测 Nginx 服务脚本:
    • keepalived.conf 中配置 vrrp_scripttrack_script
    主:
    从:

    四、Keepalived 心跳验证

    1. 抓包查看心跳

    可看到 VRRP 广播报文(组播)。

    2. 修改为单播

    在配置中增加:

    五、避免高优先级节点自动抢占 VIP

    • 配置示例:

    注意与纠正

    • 错误点:教程里部分示例直接 killall keepalived,这会导致节点完全退出,存在风险。
      • 更推荐做法:让 keepalived 降低优先级或退出 VRRP 实例,而不是杀掉整个进程。
        示例(替代方案):
    • 易误解nopreempt 并不是关闭抢占,而是指 高优先级节点恢复后不强制收回 VIP,除非当前 Master 失效。

    Loading...