Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Keepalived 基础教程

内容:核心概念、工作机制、VRRP、LVS 配置、生产级示例、故障排查、最佳实践。

一、Keepalived 是什么?

Keepalived 是一个提供 高可用(HA)+ 健康检查 + LVS 管理 的服务,核心能力包括:

  • VRRP(虚拟路由冗余协议) -> 用于主备切换 / VIP 漂移
  • LVS Real Server 健康检查 -> 自动从 ipvsadm 中移除不健康的 RS
  • 自动生成/维护 LVS 规则
  • 跨多实例、多虚拟服务的 HA 管理

Keepalived 主要两个核心组件:

  1. VRRP(VIP 漂移,实现高可用)
  2. LVS(管理 ipvsadm 的负载均衡规则)

二、Keepalived 的运行模型

Keepalived = VRRP + LVS,二者独立且可以同时使用。

+---------------------------------------+
|              keepalived               |
+-------------------+-------------------+
|     VRRP          |        LVS        |
| (VIP HA failover) | (LB/healthcheck)  |
+-------------------+-------------------+

三、VRRP(核心 HA 机制)

VRRP 作用:

让多个节点共享一个 VIP,只有 MASTER 对外提供服务,BACKUP 随时接管。

VRRP 参数说明

参数 作用
state MASTER / BACKUP
interface 绑定网卡
virtual_router_id VRRP 组 ID(必须唯一)
priority 优先级(越大越先抢 VIP)
advert_int 心跳间隔(默认 1s)
virtual_ipaddress VIP 列表

主备切换流程

  1. MASTER 广播 VRRP 心跳
  2. BACKUP 监听心跳
  3. MASTER 故障 -> 心跳中断
  4. BACKUP 检测到超时后 -> 抢占 VIP
  5. VIP 漂移完成 -> ARP 通告 -> 客户端自动恢复访问

注意:VRRP 是二层协议(组播)

主备必须在 同一二层网络。

四、Keepalived 配置结构

Keepalived 配置文件:/etc/keepalived/keepalived.conf

主要结构:

global_defs { ... }

vrrp_instance VI_1 { ... }

virtual_server 10.0.0.10 80 { ... }
    real_server 10.0.0.11 80 { ... }
    real_server 10.0.0.12 80 { ... }

五、Keepalived + LVS(常用 DR/NAT 集群)

Keepalived 不仅做 HA,还能自动维护 ipvsadm 规则。

六、生产级 Keepalived 配置示例(DR 模式)🚀

下面一份你可以直接用于生产环境的版本。

keepalived.conf

! Keepalived 配置示例(LVS-DR + HA)
global_defs {
    router_id LVS_NODE_1
    enable_script_security
}

# VRRP 主备
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 120
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {
        10.0.0.10/24
    }

    # VIP 转移时立即发送 ARP 通告
    garp_master_delay 1
    garp_master_refresh 5
    garp_master_repeat 5
}

# LVS 虚拟服务
virtual_server 10.0.0.10 80 {
    lb_algo wlc
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    delay_loop 6

    real_server 10.0.0.11 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            delay_before_retry 3
            connect_port 80
        }
    }

    real_server 10.0.0.12 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

七、Real Server 配置(DR 模式)

绑定 VIP 到 lo

ip addr add 10.0.0.10/32 dev lo

禁止 ARP 抢答

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

八、Keepalived 常用操作

查看 VIP

ip addr | grep 10.0.0.10

查看 ipvsadm 规则

ipvsadm -Ln

重启服务

systemctl restart keepalived
systemctl status keepalived

九、Keepalived 健康检查(LVS 部分)

支持:

1)TCP_CHECK

连接端口验证

2)HTTP_GET

完整 HTTP 健康检查 示例:

HTTP_GET {
    url {
        path /health
        digest 1a2b3c4d
    }
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
}

3)SSL_GET / SMTP_CHECK / MISC_CHECK(脚本检查)

可执行外部脚本:

MISC_CHECK {
    misc_path "/usr/bin/check_backend.sh"
    misc_timeout 5
}

十、Keepalived 故障排查(经典问题)

1)VIP 不漂移

  • interface 写错
  • IP 被占用
  • VRRP 组 ID 冲突
  • 优先级不正确
  • 防火墙阻止 VRRP 组播:
udp port 112
multicast 224.0.0.18

2)切换延迟大

  • advert_int 太大
  • priority 差异太小
  • 网络丢包导致心跳延迟
  • 未开启 GARP(升级 ARP 缓存)

3)Real Server 不健康但没从 LVS 移除

  • 检查项不正确
  • TCP_CHECK 配置错误
  • 服务器防火墙阻止探测端口

4)访问不通但 LVS 配置正常

  • RS 没关闭 ARP 抢答
  • RS 回包走了错误路由
  • DR 模式多网卡导致 VIP 绑定冲突

十一、Keepalived 最佳实践(运维必背)

1. HA 必须开启抢占

nopreempt

一般不推荐除非特殊业务(稳定优先)

2. VGARP(Gratuitous ARP)必须开启

确保 VIP 切换时 ARP 缓存更新及时

3. VIP 绑定到物理网卡,而不是 lo

VRRP 必须绑定物理网卡,否则心跳发不出去

4. 健康检查尽量使用 TCP / HTTP_GET

5. LVS 推荐使用 WLC 调度算法

6. 强烈建议启用 conntrack 同步(LVS Connection Sync)

sync_master
sync_backup

7. Keepalived 日志要输出到 /var/log/messages 或独立文件

global_defs {
    router_id LVS_NODE_1
    enable_script_security
    log_detail
}