Keepalived

Keepalived 是实现 HAProxy 高可用的核心工具,它通过 VRRP 协议(虚拟路由冗余协议)为两台 HAProxy 调度器提供虚拟 IP(VIP) 故障自动切换能力,避免单台 HAProxy 宕机导致整个服务不可用。下面从核心原理、实验环境、配置步骤、验证方法全维度讲解。

一、Keepalived 核心认知

1. 核心作用

  • 为 HAProxy 集群提供VIP(虚拟 IP) ,所有客户端请求都访问这个 VIP;
  • 实时监控 HAProxy 服务状态,当主 HAProxy 宕机 / 服务异常时,自动将 VIP 切换到备 HAProxy;
  • 主 HAProxy 恢复后,可配置自动 / 手动切回(生产建议手动切回,避免抖动)。

2. 核心概念

二、实验环境准备

1. 实验拓扑(基于之前的 HAProxy 环境扩展)

主机角色 IP 地址(内网) VIP(虚拟 IP) 软件配置
HAProxy 主节点(MASTER) 192.168.0.100 172.25.254.100 HAProxy + Keepalived(主)
HAProxy 备节点(BACKUP) 192.168.0.101 172.25.254.100 HAProxy + Keepalived(备)
WebServer1 192.168.0.10 - httpd
WebServer2 192.168.0.20 - httpd

2. 前置条件

  • 两台 HAProxy 节点都已安装并配置好 HAProxy(负载均衡规则一致);
  • 所有节点关闭防火墙 /selinux(实验环境简化):
bash 复制代码
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
  • 两台 HAProxy 节点能互相 ping 通,且能访问后端 Web 服务器。

三、Keepalived 安装与配置(核心实验)

1. 安装 Keepalived(两台 HAProxy 节点都执行)

bash 复制代码
dnf install keepalived -y  # CentOS/RHEL 8+
# 验证安装
rpm -qa keepalived

2. 主节点(192.168.0.100)配置

编辑 Keepalived 主配置文件/etc/keepalived/keepalived.conf

bash 复制代码
! Configuration File for keepalived

global_defs {
   router_id HA_PROXY_MASTER  # 节点标识,唯一即可
}

# 自定义脚本:监控HAProxy服务状态
vrrp_script check_haproxy {
    script "/usr/bin/systemctl is-active haproxy"  # 检查HAProxy是否运行
    interval 2                                     # 检查间隔(秒)
    weight -20                                     # 检查失败则优先级减20
}

vrrp_instance VI_1 {
    state MASTER  # 主节点标识
    interface eth0  # 绑定VIP的网卡(外网网卡)
    virtual_router_id 51  # VRRP组ID(主备必须一致,范围0-255)
    priority 100  # 主节点优先级(高于备节点)
    advert_int 1  # VRRP通告间隔(秒)
    nopreempt     # 关闭抢占模式(可选,生产建议开启,避免主恢复后抢占VIP导致抖动)
    authentication {
        auth_type PASS  # 认证类型
        auth_pass 1111  # 认证密码(主备必须一致)
    }
    virtual_ipaddress {
        172.25.254.100/24  # 虚拟IP(VIP),和之前HAProxy的外网IP一致
    }
    # 调用上面的HAProxy健康检查脚本
    track_script {
        check_haproxy
    }
}

3. 备节点(192.168.0.101)配置

编辑/etc/keepalived/keepalived.conf,仅需修改 3 处:

bash 复制代码
! Configuration File for keepalived

global_defs {
   router_id HA_PROXY_BACKUP  # 备节点标识
}

vrrp_script check_haproxy {
    script "/usr/bin/systemctl is-active haproxy"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP  # 备节点标识
    interface eth0
    virtual_router_id 51  # 和主节点一致
    priority 90  # 优先级低于主节点(100)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111  # 和主节点一致
    }
    virtual_ipaddress {
        172.25.254.100/24  # 同一个VIP
    }
    track_script {
        check_haproxy
    }
}
  1. 启动 Keepalived(两台节点都执行)
bash 复制代码
# 启动并开机自启
systemctl enable --now keepalived
# 查看状态
systemctl status keepalived

四、实验验证(核心步骤)

1. 验证 VIP 默认在主节点

  • 主节点执行ip a show eth0,能看到 VIP(172.25.254.100):
bash 复制代码
[root@haproxy-master ~]# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
    inet 172.25.254.100/24 scope global secondary eth0  # VIP已绑定

2. 验证 VIP 访问正常

客户端访问 VIP(172.25.254.100),能正常轮询访问 Web1/Web2:

bash 复制代码
curl 172.25.254.100
# 交替输出:
# webserver1 - 192.168.0.10
# webserver2 - 192.168.0.20

3. 模拟主节点故障,验证 VIP 切换

(1)停止主节点的 HAProxy 服务(模拟故障)
bash 复制代码
[root@haproxy-master ~]# systemctl stop haproxy
(2)观察备节点 VIP

备节点执行ip a show eth0,能看到 VIP 已自动绑定:

bash 复制代码
[root@haproxy-backup ~]# ip a show eth0
  inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
  inet 172.25.254.100/24 scope global secondary eth0  # VIP已切换过来
(3)验证 VIP 访问仍正常

客户端再次访问curl 172.25.254.100,依然能正常轮询,服务无中断。

4. 验证主节点恢复后 VIP 切回(可选)

  • 启动主节点的 HAProxy:
bash 复制代码
[root@haproxy-master ~]# systemctl start haproxy
  • 若开启了nopreempt(关闭抢占),VIP 不会自动切回;若未开启,主节点优先级更高,VIP 会自动切回。

五、常见问题排查

  1. VIP 无法绑定

    • 检查interface配置的网卡是否正确(如 eth0/eth1);
    • 检查防火墙 /selinux 是否关闭;
    • 检查主备virtual_router_idauth_pass是否一致。
  2. 故障后 VIP 不切换

    • 检查健康检查脚本是否正确(systemctl is-active haproxy返回 0 表示正常);
    • 检查weight配置是否合理(优先级减少后是否低于备节点);
    • 查看 Keepalived 日志:journalctl -u keepalived -f

六、核心总结

  1. Keepalived 核心:基于 VRRP 协议实现 VIP 故障切换,核心是 "优先级 + 健康检查",确保 HAProxy 集群无单点故障。
  2. 配置关键
    • 主备节点的virtual_router_idauth_pass必须一致;
    • 主节点优先级 > 备节点;
    • 一定要配置 HAProxy 健康检查脚本,避免 HAProxy 进程挂了但 Keepalived 未感知。
  3. 实验验证重点
    • 正常状态下 VIP 在主节点;
    • 主节点故障后 VIP 自动切到备节点;
    • 切换后服务无中断,这是高可用的核心目标。
相关推荐
古月-一个C++方向的小白2 小时前
Linux——进程控制
linux·运维·服务器
SoulRoar.2 小时前
华为备份需要和nas处于同一个局域网问题
网络
sdyeswlw2 小时前
案例直击|一二三物联网 2025 三大经典项目,解锁物联赋能新场景
大数据·网络·人工智能
网络小白不怕黑2 小时前
OSPF笔记
网络
文静小土豆2 小时前
CentOS 7 OpenSSH 10.2p1 升级全攻略(含离线安装与回退方案)
linux·运维·centos·ssh
牢七3 小时前
反序列化重点模块 private Object readOrdinaryObject(boolean unshared)废案与反思
java·服务器·前端
五阿哥永琪3 小时前
进程的调度算法
linux·运维·服务器
nzxzn3 小时前
LVS(Linux virual server)知识点
linux·运维·lvs
菜鸟别浪3 小时前
内存管理-第1章-Linux 内核内存管理概述
linux·运维·云计算·虚拟化·内存管理