LVS+Keepalived 高可用集群搭建详解(OpenEuler24 实战版

前言

在数字化业务全面普及的今天,企业核心系统(电商、支付、办公、数据服务)对7×24 小时不间断服务的需求已成为硬性标准。单点服务器极易因硬件故障、网络波动、程序崩溃导致服务中断,直接造成业务损失与用户流失。

高可用(HA,High Availability)与负载均衡(LB,Load Balancing)是解决上述问题的核心技术方案:

  • LVS(Linux Virtual Server):Linux 内核级负载均衡器,性能极高、支撑高并发、支持多种转发模式
  • Keepalived:基于 VRRP 协议实现故障自动切换,同时提供节点健康检查,完美适配 LVS

本文基于OpenEuler24 操作系统,从原理讲解→环境准备→双机热备→LVS+Keepalived 集群→测试验证→故障排查全流程实战,手把手搭建企业级高可用负载均衡集群,可直接用于生产环境落地。


一、Keepalived 双机热备核心基础

1.1 Keepalived 是什么

Keepalived 最初专为 LVS 设计,是一款开源轻量级高可用软件,核心能力:

  1. 故障切换(Failover):主节点宕机,备节点秒级接管服务
  2. 健康检查(Health Checking):实时检测调度器 / 后端节点可用性
  3. 自动管理 VIP:虚拟 IP 无需手动配置虚拟网卡,由软件自动漂移
  4. 非 LVS 场景也可用:单独作为双机热备软件(Web、FTP、SSH 等通用服务)

1.2 VRRP 协议原理

Keepalived 基于 **VRRP(虚拟路由冗余协议)** 实现热备:

  1. 多台服务器组成热备组,共用一个 ** 虚拟 IP(VIP)** 对外提供服务
  2. 同一时刻只有 ** 主节点(MASTER)** 持有 VIP 并提供服务
  3. 备节点(BACKUP)持续监听心跳,主节点失效则按优先级抢占 VIP
  4. 主节点恢复后,自动夺回 VIP 控制权(抢占模式)

1.3 双机热备实验环境

表格

操作系统 硬件配置 物理 IP 运行服务 角色
OpenEuler24 2C4G 192.168.10.101 Keepalived+Nginx 主节点 MASTER
OpenEuler24 2C4G 192.168.10.102 Keepalived+Nginx 备节点 BACKUP
- - 192.168.10.100 虚拟服务 IP VIP(漂移地址)

1.4 Keepalived 安装与服务控制

OpenEuler24 使用 DNF/YUM 安装:

复制代码
# 安装Keepalived+ipvsadm(LVS管理工具)+Nginx(测试Web服务)
yum install -y keepalived ipvsadm nginx

# 设置开机自启
systemctl enable keepalived

# 服务启停命令
systemctl start keepalived   # 启动
systemctl stop keepalived    # 停止
systemctl restart keepalived # 重启
systemctl status keepalived  # 查看状态

二、Keepalived 双机热备完整配置

2.1 基础环境预处理

所有节点必须关闭防火墙与 SELinux,避免网络拦截:

复制代码
# 临时关闭防火墙
systemctl stop firewalld
# 永久禁用防火墙
systemctl disable firewalld

# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

2.2 主节点(192.168.10.101)配置

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

复制代码
# 进入配置目录
cd /etc/keepalived/
# 备份默认配置
cp keepalived.conf.sample keepalived.conf
# 编辑配置
vi keepalived.conf

主节点核心配置

复制代码
! Configuration File for keepalived
global_defs {
    router_id HA_TEST_R1  # 本节点唯一标识(自定义)
}

vrrp_instance VI_1 {      # VRRP实例名(主备必须一致)
    state MASTER          # 角色:主节点
    interface ens33       # 承载VIP的物理网卡
    virtual_router_id 1   # 热备组ID(主备必须一致,0-255)
    priority 100          # 优先级(越大越优先,主>备)
    advert_int 1          # 心跳间隔(秒)
    authentication {      # 认证信息(主备必须一致)
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {   # 漂移VIP(可配置多个)
        192.168.10.100
    }
}

启动服务并验证 VIP

复制代码
systemctl start keepalived
# 查看VIP(ifconfig无法看到,必须用ip addr)
ip addr show dev ens33

执行后可看到 ens33 网卡自动添加192.168.10.100/32

2.3 备节点(192.168.10.102)配置

备节点配置90% 与主节点一致,仅修改 3 个参数:

复制代码
global_defs {
    router_id HA_TEST_R2  # 不同节点标识
}

vrrp_instance VI_1 {
    state BACKUP          # 角色:备节点
    priority 99           # 优先级低于主节点
    # 其余配置完全与主节点相同
}

启动服务

复制代码
systemctl start keepalived

备节点正常运行时不会持有 VIP,仅监听主节点心跳。

2.4 双机热备功能测试

2.4.1 连通性测试

客户端执行:

复制代码
ping 192.168.10.100 -t
  1. 停止主节点 Keepalived:systemctl stop keepalived
  2. Ping 仅丢 1-2 个包即恢复,说明 VIP 已漂移到备节点
  3. 重启主节点 Keepalived:systemctl start keepalived
  4. 再次短暂丢包后恢复,主节点夺回 VIP
2.4.2 Web 服务测试
复制代码
# 主节点配置测试页
echo "web01-master" > /usr/share/nginx/html/index.html
systemctl start nginx

# 备节点配置测试页
echo "web02-backup" > /usr/share/nginx/html/index.html
systemctl start nginx
  1. 访问http://192.168.10.100 → 显示web01-master
  2. 主节点宕机 → 自动显示web02-backup
  3. 主节点恢复 → 自动切回web01-master
2.4.3 日志查看

Keepalived 日志默认存放在/var/log/messages

复制代码
tail -f /var/log/messages

可清晰看到:

  • 主节点:停止→移除 VIP→重启→MASTER 状态→添加 VIP
  • 备节点:检测主节点失效→切换 MASTER→检测主节点恢复→切换 BACKUP→移除 VIP

三、LVS+Keepalived 高可用集群搭建

3.1 集群架构设计

双负载调度器热备 + 多 Web 节点集群 + NFS 共享存储,无任何单点故障

  • 主调度器:lb01(192.168.10.101)
  • 备调度器:lb02(192.168.10.102)
  • Web 节点:web01(103)、web02(104)
  • NFS 存储:192.168.10.105(统一网页内容)
  • 集群模式:LVS-DR(直接路由,性能最高)
  • VIP:192.168.10.100

3.2 集群资源清单

表格

主机名 操作系统 配置 IP 地址 核心服务 角色
lb01 OpenEuler24 2C4G 192.168.10.101 Keepalived/ipvsadm 主负载调度器
lb02 OpenEuler24 2C4G 192.168.10.102 Keepalived/ipvsadm 备负载调度器
web01 OpenEuler24 2C4G 192.168.10.103 Nginx Web 业务节点
web02 OpenEuler24 2C4G 192.168.10.104 Nginx Web 业务节点
nfs-server OpenEuler24 2C4G 192.168.10.105 nfs-utils/rpcbind 共享存储

3.3 调度器基础配置

所有调度器执行:

复制代码
# 加载LVS内核模块
modprobe ip_vs
# 查看LVS版本
cat /proc/net/ip_vs

# 安装依赖
yum install -y ipvsadm keepalived
# 备份配置
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

3.4 主调度器(lb01)完整配置

在双机热备基础上,添加LVS 虚拟服务器 + 后端节点池 + 健康检查配置:

复制代码
! Configuration File for keepalived
global_defs {
    router_id LVS_HA_R1
}

# VRRP热备配置
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.10.100
    }
}

# LVS虚拟服务器配置
virtual_server 192.168.10.100 80 {
    delay_loop 15          # 健康检查间隔(秒)
    lb_algo rr             # 调度算法:rr=轮询(支持wrr/lc/wlc等)
    lb_kind DR             # LVS模式:DR=直接路由(性能最优)
    persistence_timeout 50 # 会话保持时间(秒)
    protocol TCP           # 协议类型

    # 后端真实节点1
    real_server 192.168.10.103 80 {
        weight 1           # 节点权重
        TCP_CHECK {        # TCP健康检查
            connect_timeout 3    # 连接超时
            nb_get_retry 3       # 重试次数
            delay_before_retry 4 # 重试间隔
            connect_port 80      # 检查端口
        }
    }

    # 后端真实节点2
    real_server 192.168.10.104 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
            connect_port 80
        }
    }
}

启动服务

复制代码
systemctl restart keepalived

3.5 备调度器(lb02)配置

与主调度器完全一致,仅修改 3 个参数:

复制代码
global_defs {
    router_id LVS_HA_R2
}
vrrp_instance VI_1 {
    state BACKUP
    priority 90
}

启动服务

复制代码
systemctl restart keepalived

3.6 Web 节点 DR 模式配置(最关键)

LVS-DR 模式必须抑制 ARP 响应 ,否则客户端会直接访问后端节点,导致集群失效。一键配置脚本lvs_dr.sh

复制代码
vi lvs_dr.sh
chmod +x lvs_dr.sh

脚本内容

复制代码
#!/bin/bash
vip='192.168.10.100'  # 集群VIP
case "$1" in
start)
    # 配置ARP抑制(DR模式核心)
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/default/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/default/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

    # 本地lo网卡绑定VIP
    ip addr add ${vip}/32 dev lo label lo:0
    # 添加本地路由
    ip route add local ${vip}/32 dev lo

    # 永久生效
    echo "ip addr add ${vip}/32 dev lo label lo:0" >> /etc/rc.local
    echo "ip route add local ${vip}/32 dev lo" >> /etc/rc.local
    chmod +x /etc/rc.local
    ;;
stop)
    # 恢复ARP参数
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/default/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/default/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce

    # 删除VIP与路由
    ip addr del ${vip}/32 dev lo label lo:0
    ip route del local ${vip}/32 dev lo

    # 清除开机自启
    sed -i "/${vip}/d" /etc/rc.local
    ;;
*)
    echo "Usage: $0 {start|stop}"
    exit 1
esac
exit 0

执行配置

复制代码
./lvs_dr.sh start

所有 Web 节点(web01/web02)都必须执行此脚本。

3.7 NFS 共享存储配置(可选)

统一 Web 节点页面内容,方便测试负载均衡:

复制代码
# NFS服务器安装
yum install -y nfs-utils rpcbind
systemctl start nfs rpcbind
systemctl enable nfs rpcbind

# 配置共享目录
echo "/var/www/html 192.168.10.0/24(rw,sync,no_root_squash)" >> /etc/exports
exportfs -rv

# Web节点挂载
mount 192.168.10.105:/var/www/html /usr/share/nginx/html

四、LVS+Keepalived 集群测试验证

4.1 基础功能测试

客户端浏览器访问:http://192.168.10.100

  • 多次刷新 → 页面轮询显示 web01/web02(负载均衡生效)
  • 停止主调度器 → 服务不中断(备调度器自动接管)
  • 停止 web01 → 流量全部切到 web02(健康检查生效)
  • 重启 web01 → 自动加入集群(故障恢复)

4.2 LVS 状态查看

复制代码
# 查看虚拟服务器与节点状态
ipvsadm -ln
# 查看连接状态
ipvsadm -lnc

可清晰看到:VIP、调度算法、后端节点、连接数、权重等信息。

4.3 故障切换测试

  1. 主调度器宕机:备调度器秒级接管 VIP,业务无感知
  2. Web 节点宕机:Keepalived 自动剔除,流量不转发至故障节点
  3. 主调度器恢复:自动夺回 VIP,继续提供服务
  4. Web 节点恢复:自动加入节点池,恢复负载分担

五、核心原理与关键参数说明

5.1 LVS 三种工作模式对比

表格

模式 原理 性能 适用场景 配置难度
NAT 网络地址转换 中等 公网入口、小型集群
DR 直接路由 极高 内网高并发、大型集群
TUN IP 隧道 跨网段、异地集群

生产环境首选 DR 模式:性能接近物理机,不修改数据包,支持百万级并发。

5.2 Keepalived 关键参数

表格

参数 作用 注意事项
router_id 节点唯一标识 主备不能相同
state 节点角色 MASTER/BACKUP
priority 优先级 主节点必须更高
virtual_router_id 热备组 ID 同一组必须一致
virtual_ipaddress 漂移 VIP 主备必须相同
TCP_CHECK 健康检查 自动剔除故障节点
lb_algo 调度算法 rr = 轮询、wrr = 加权轮询、lc = 最少连接

5.3 高可用保障机制

  1. 调度器高可用:双机热备,无单点故障
  2. 后端节点高可用:健康检查,故障自动隔离 / 恢复
  3. 服务高可用:VIP 漂移,秒级切换,业务无感知
  4. 数据高可用:NFS 共享存储,统一业务数据

六、常见故障排查

6.1 VIP 不漂移

  1. 检查virtual_router_id主备是否一致
  2. 检查priority主节点是否更高
  3. 检查防火墙 / SELinux 是否关闭
  4. 检查网卡名interface是否正确
  5. 查看日志:tail -f /var/log/messages

6.2 LVS 不转发流量

  1. 检查ip_vs模块是否加载:lsmod | grep ip_vs
  2. 检查 Web 节点 ARP 抑制是否配置
  3. 检查调度器lb_kind DR是否正确
  4. 检查后端节点 80 端口是否通:telnet IP 80

6.3 健康检查不生效

  1. 检查TCP_CHECK端口与超时配置
  2. 检查后端节点服务是否正常运行
  3. 检查网络连通性

6.4 会话保持异常

  1. 调整persistence_timeout参数
  2. 关闭浏览器 Cookie 后重试
  3. 检查调度算法是否正确

七、总结

LVS+Keepalived 是企业级高可用负载均衡的黄金架构,具备以下核心优势:

  1. 高性能:LVS 内核级转发,支撑百万级并发
  2. 高可用:无单点故障,故障秒级切换
  3. 易维护:配置简洁,自动化程度高
  4. 低成本:开源免费,基于 Linux 系统,无需专用硬件
  5. 通用性:支持 Web、FTP、API、游戏等几乎所有 TCP 服务
相关推荐
|华|6 小时前
LVS+Keepalived群集
lvs
ego.iblacat11 小时前
lvs 集群部署
开发语言·php·lvs
卤炖阑尾炎14 小时前
LVS+Keepalived 高可用集群实战精讲从原理到上线全流程
网络·lvs
炸炸鱼.14 小时前
LVS+Keepalived 高可用集群部署手册
lvs·keepalived·高可用
kiku181814 小时前
keepalived高可用与负载均衡
后端·github·lvs
白毛大侠15 小时前
LVS 完全入门:从零理解 Linux 虚拟服务器的三种模式
linux·服务器·lvs
洛菡夕15 小时前
LVS+Keepalived高可用群集
运维·服务器·lvs
卢傢蕊15 小时前
LVS+Keepalived 高可用群集
linux·运维·lvs·keepalived
我不听你讲话17 小时前
LVS+Keepalived 高可用集群核心内容总结
lvs