LVS+Keepalived 高可用集群部署手册

前言

在企业级服务架构中,单点故障性能瓶颈 是核心风险。LVS(Linux Virtual Server)实现四层负载均衡,Keepalived 基于 VRRP 协议实现故障自动切换,二者结合可构建高可用、高并发、无间断的负载均衡集群,广泛用于 Web、邮件、数据库等核心服务。

本文基于 CentOS 7/OpenEuler 24 环境,完整复现 LVS-DR + Keepalived 部署流程,包含全部实操命令、配置文件与关键原理,覆盖双机热备、负载调度、健康检查、故障漂移全场景。


一、核心基础知识点

1.1 LVS 核心概念

  • LVS :Linux 内核级负载均衡器,工作在传输层(TCP/UDP),性能远超 Nginx 七层代理。
  • DR 模式(Direct Route) :LVS 最优模式,调度器仅修改请求 MAC 地址,响应由后端服务器直接返回客户端,吞吐量最高、延迟最低
  • 关键工具ipvsadm(LVS 规则管理工具)。

1.2 Keepalived 核心原理

  • 基于 VRRP(虚拟路由冗余协议) 实现多机热备,同一集群内只有主节点(MASTER) 持有 VIP(虚拟 IP)。
  • 核心能力:VIP 自动漂移节点健康检查LVS 规则自动配置
  • 关键角色:
    • MASTER:主调度器,优先级高,持有 VIP。
    • BACKUP:备调度器,监听主节点状态,主节点故障自动接管 VIP。
  • 关键参数:virtual_router_id(集群唯一标识)、priority(优先级,越大越优先)、auth_pass(集群认证密码)。

1.3 集群架构规划

表格

角色 主机名 物理 IP 服务
主调度器(LVS-MASTER) lb01 192.168.10.101 Keepalived、ipvsadm
备调度器(LVS-BACKUP) lb02 192.168.10.102 Keepalived、ipvsadm
后端 Web 节点 1 web01 192.168.10.103 Nginx/Apache
后端 Web 节点 2 web02 192.168.10.104 Nginx/Apache
集群虚拟 IP(VIP) - 192.168.10.172 对外统一访问入口

二、环境初始化(所有节点执行)

2.1 关闭防火墙与 SELinux

bash

运行

复制代码
# 临时关闭
systemctl stop firewalld
setenforce 0

# 永久禁用
systemctl disable firewalld
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

# 关闭NetworkManager(避免干扰VIP)
systemctl stop NetworkManager
systemctl disable NetworkManager

2.2 加载 LVS 内核模块(调度器)

bash

运行

复制代码
# 加载ip_vs模块
modprobe ip_vs

# 查看模块加载状态
lsmod | grep ip_vs

# 查看LVS版本
cat /proc/net/ip_vs

三、主调度器(lb01:192.168.10.101)配置

3.1 备份 Keepalived 配置文件

bash

运行

复制代码
dnf install -y keepalived ipvsadm

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak

3.2 编辑主配置文件(完整可直接复制)

bash

运行

复制代码
vi /etc/keepalived/keepalived.conf

conf

复制代码
! Configuration File for keepalived

# 全局配置
global_defs {
   notification_email {
     admin@demo.com
   }
   notification_email_from keepalived@lb01.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_MASTER  # 主节点唯一标识
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

# VRRP热备实例
vrrp_instance VI_1 {
    state MASTER        # 主节点标识
    interface ens33     # 绑定物理网卡(需与本机一致)
    virtual_router_id 51  # 集群ID,主备必须一致
    priority 100        # 优先级,主节点>备节点
    advert_int 1        # 心跳间隔(秒)
    authentication {
        auth_type PASS  # 认证类型
        auth_pass 1111  # 集群认证密码,主备一致
    }
    virtual_ipaddress {
        192.168.10.172  # 集群VIP
    }
}

# LVS虚拟服务器配置
virtual_server 192.168.10.172 80 {
    delay_loop 6          # 健康检查间隔(秒)
    lb_algo rr            # 调度算法:rr=轮询、wrr=加权轮询、lc=最少连接
    lb_kind DR            # LVS模式:DR=直接路由
    nat_mask 255.255.255.0
    protocol TCP          # 协议类型

    # 后端Web节点1
    real_server 192.168.10.103 80 {
        weight 1          # 节点权重
        TCP_CHECK {       # 四层健康检查
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

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

3.3 配置 DR 模式内核参数(禁止发送重定向报文)

bash

运行

复制代码
vi /etc/sysctl.conf

添加以下内容:

conf

复制代码
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

bash

运行

复制代码
# 生效内核参数
sysctl -p

3.4 启动 Keepalived 并设置开机自启

bash

运行

复制代码
systemctl start keepalived
systemctl enable keepalived

# 查看VIP是否绑定成功
ip addr show dev ens33

四、备调度器(lb02:192.168.10.102)配置

4.1 备份配置文件

bash

运行

复制代码
dnf install -y keepalived ipvsadm

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak

4.2 编辑备节点配置文件(仅 3 处与主节点不同)

bash

运行

复制代码
vi /etc/keepalived/keepalived.conf

conf

复制代码
global_defs {
   router_id LVS_BACKUP  # 1.修改为备节点标识
}

vrrp_instance VI_1 {
    state BACKUP         # 2.修改为备节点
    priority 99          # 3.优先级低于主节点
    # 其余配置与主节点完全一致
    interface ens33
    virtual_router_id 51
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.172
    }
}

# LVS虚拟服务器配置与主节点完全一致
virtual_server 192.168.10.172 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    protocol TCP

    real_server 192.168.10.103 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.10.104 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

4.3 配置内核参数(与主节点一致)

bash

运行

复制代码
vi /etc/sysctl.conf

添加:

conf

复制代码
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

bash

运行

复制代码
sysctl -p

4.4 启动服务

bash

运行

复制代码
systemctl start keepalived
systemctl enable keepalived

五、后端 Web 节点(web01/web02)配置(DR 模式核心)

复制代码
dnf install -y httpd 

5.1 核心原理

DR 模式下,后端节点必须配置 VIP,且需抑制 ARP 响应(避免客户端直接访问后端节点)。

5.2 配置 ARP 内核参数(所有 Web 节点执行)

bash

运行

复制代码
vi /etc/sysctl.conf

添加:

conf

复制代码
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

bash

运行

复制代码
sysctl -p

5.3 绑定 VIP 到环回接口(所有 Web 节点执行)

bash

运行

复制代码
# 临时绑定VIP
ip addr add 192.168.10.172/32 dev lo label lo:0

# 添加本地路由
ip route add local 192.168.10.172/32 dev lo

# 永久生效(开机自启)
chmod +x /etc/rc.local
echo "ip addr add 192.168.10.172/32 dev lo label lo:0" >> /etc/rc.local
echo "ip route add local 192.168.10.172/32 dev lo" >> /etc/rc.local

5.4 配置 Web 服务(区分页面,便于测试)

web01(192.168.10.103)

bash

运行

复制代码
systemctl start httpd
systemctl enable httpd
echo "LVS+Keepalived Test Web01" > /var/www/html/index.html
web02(192.168.10.104)

bash

运行

复制代码
systemctl start httpd
systemctl enable httpd
echo "LVS+Keepalived Test Web02" > /var/www/html/index.html

六、集群功能测试

6.1 负载均衡测试

客户端执行以下命令,观察轮询效果:

bash

运行

复制代码
# 循环访问10次
for i in {1..10}; do curl http://192.168.10.172; done

预期结果 :交替返回 Web01Web02

6.2 高可用故障切换测试

  1. 客户端持续 ping VIP:ping 192.168.10.172 -t
  2. 停止主调度器服务:systemctl stop keepalived
  3. 观察 ping 无中断,VIP 自动漂移到备节点
  4. 重启主调度器:systemctl start keepalived
  5. 主节点恢复后自动夺回 VIP

6.3 健康检查测试

停止 web01 的 httpd 服务:systemctl stop httpd访问 VIP,请求仅分发到 web02;重启 httpd 后自动恢复负载均衡。


七、关键补充知识点

7.1 LVS 调度算法

  • rr:轮询(平均分配)
  • wrr:加权轮询(按权重分配,适合性能不同的节点)
  • lc:最少连接(动态分配给连接数最少的节点)
  • wlc:加权最少连接(默认算法,生产最常用)

7.2 Keepalived 健康检查方式

  1. TCP_CHECK:四层检查,仅检测端口是否开放,速度最快。
  2. HTTP_GET:七层检查,请求指定 URL,校验状态码 / MD5。
  3. SSL_GET:HTTPS 服务专用检查。
  4. MISC_CHECK:自定义脚本检查,灵活度最高。

7.3 DR 模式必知坑点

  • 调度器与后端节点必须在同一物理网段
  • 后端节点必须抑制 ARP,否则 VIP 冲突导致服务不可用。
  • 不能在调度器本机访问 VIP,需用独立客户端测试。

7.4 常用运维命令

bash

运行

复制代码
# 查看LVS规则
ipvsadm -ln

# 查看LVS连接状态
ipvsadm -lnc

# 查看Keepalived日志
tail -f /var/log/messages | grep keepalived

# 清空LVS规则
ipvsadm -C

八、总结

LVS+Keepalived 是企业四层高可用负载均衡的标准方案:

  1. LVS 负责流量分发,支撑万级并发;
  2. Keepalived 负责故障切换,实现 0 业务中断;
  3. DR 模式性能最优,是生产环境首选;
  4. 完整覆盖负载均衡、高可用、健康检查三大核心能力。
相关推荐
高梦轩5 小时前
Keepalived 高可用与负载均衡
keepalived
kiku18185 小时前
keepalived高可用与负载均衡
后端·github·lvs
白毛大侠6 小时前
LVS 完全入门:从零理解 Linux 虚拟服务器的三种模式
linux·服务器·lvs
洛菡夕6 小时前
LVS+Keepalived高可用群集
运维·服务器·lvs
卢傢蕊6 小时前
LVS+Keepalived 高可用群集
linux·运维·lvs·keepalived
我不听你讲话8 小时前
LVS+Keepalived 高可用集群核心内容总结
lvs
刘晨鑫18 小时前
LVS+Keepalived高可用集群
lvs
kc胡聪聪8 小时前
keepalived的高可用和负载均衡
keepalived
志凌海纳SmartX8 小时前
详解超融合如何让RDMA跨网卡高可用,让高性能业务更可靠
高可用·超融合·rdma·smartx