一、前言
在高度信息化的时代,企业的生产系统、业务运营、销售支持,乃至日常办公等环节,都离不开不间断的计算机系统服务。一切业务的运转都高度依赖服务器的稳定,如何保障 7×24 小时的高可用,是运维架构的核心课题。
LVS(Linux Virtual Server)作为成熟的四层负载均衡方案,能将海量请求分发到后端真实服务器,实现流量的横向扩展;而 Keepalived 则是专为 LVS 设计的高可用工具,通过 VRRP 协议实现双机热备,彻底解决单点故障问题。二者结合,可构建一套高可用、高并发、高稳定的企业级负载均衡集群,保障业务在服务器宕机、网络故障等场景下仍能正常运行。
本文将从基础原理、双机热备配置、LVS+Keepalived 集群搭建、故障测试全流程,带你从零搭建一套生产可用的高可用集群,所有配置均附详细命令与注释,适合运维工程师、架构师学习参考。
二、Keepalived 双机热备基础知识
2.1 Keepalived 概述
Keepalived 是一款基于 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)的高可用解决方案,核心作用是解决单点故障,实现服务的无缝切换。
其核心原理:
- 多台物理服务器组成一个 "虚拟路由器",对外提供统一的虚拟 IP(VIP);
- 集群内通过选举机制产生一台MASTER(主服务器),由 MASTER 绑定 VIP 并对外提供服务;
- 其余服务器为BACKUP(备服务器),实时监听 MASTER 状态;
- 当 MASTER 发生故障(宕机、服务中断),BACKUP 会自动抢占 MASTER 角色,接管 VIP,实现服务的无感知切换,整个过程对用户完全透明。
Keepalived 不仅能实现主机级别的故障切换,还支持服务级别的健康检查:当后端服务(如 Nginx、Web 服务)宕机时,可自动将该节点从集群中剔除,待服务恢复后重新加入,保障业务可用性。
2.2 VRRP 协议核心原理
VRRP 协议是 Keepalived 的底层核心,核心概念如下:
| 术语 | 说明 |
|---|---|
| VRRP 路由器 | 运行 VRRP 协议的物理服务器 |
| 虚拟路由器 | 由多台 VRRP 路由器组成的逻辑组,对外提供统一的虚拟 IP(VIP) |
| MASTER 路由器 | 虚拟路由器中的主节点,负责转发流量、绑定 VIP |
| BACKUP 路由器 | 虚拟路由器中的备节点,监听 MASTER 状态,故障时抢占 |
| VRRP 优先级 | 用于选举 MASTER,优先级越高,越容易成为 MASTER(默认 100) |
| 虚拟路由 ID(VRID) | 虚拟路由器的唯一标识,同一集群内所有节点 VRID 必须一致 |
| 抢占模式 | BACKUP 发现 MASTER 优先级低于自己时,主动抢占 MASTER 角色 |
2.2.1 VRRP 工作模式
- 初始化阶段:集群内所有节点根据优先级选举 MASTER,优先级最高的成为 MASTER,其余为 BACKUP;
- 正常运行阶段:MASTER 定期发送 VRRP 通告报文(默认 1 秒一次),BACKUP 监听报文,确认 MASTER 存活;
- 故障切换阶段:BACKUP 连续 3 次(默认 3 秒)未收到 MASTER 的通告报文,认为 MASTER 故障,重新选举 MASTER,优先级最高的 BACKUP 接管 VIP,成为新的 MASTER;
- 故障恢复阶段:原 MASTER 恢复后,若开启抢占模式,会重新抢占 MASTER 角色,切回 VIP;若关闭抢占模式,则保持当前 BACKUP 状态。
2.3 Keepalived 安装与服务控制
2.3.1 环境准备
- 操作系统:CentOS 7/8、Rocky Linux 等 RHEL 系发行版;
- 网络要求:主备服务器在同一局域网,可互相通信;
- 依赖:
ipvsadm(LVS 管理工具,Keepalived 依赖其实现负载均衡)。
2.3.2 安装 Keepalived
在 CentOS 7/8 系统中,使用 yum 方式安装 Keepalived x86_64 版本:
# 安装Keepalived和ipvsadm
yum install -y keepalived ipvsadm nginx
说明:
ipvsadm是 LVS 的核心管理工具,用于配置负载均衡规则;nginx用于搭建后端 Web 服务,做测试验证。
2.3.3 服务控制命令
# 开机自启Keepalived
systemctl enable keepalived
# 启动Keepalived
systemctl start keepalived
# 停止Keepalived
systemctl stop keepalived
# 重启Keepalived
systemctl restart keepalived
# 查看Keepalived状态
systemctl status keepalived
三、Keepalived 双机热备实战(Web 服务高可用)
3.1 实验环境规划
本次双机热备实验,我们搭建一套 Web 服务高可用集群,环境规划如下:
| 角色 | 主机名 | IP 地址 | 虚拟 IP(VIP) | 优先级 | 角色 |
|---|---|---|---|---|---|
| 主服务器 | web01 | 192.168.10.101 | 192.168.10.100/24 | 150 | MASTER |
| 备服务器 | web02 | 192.168.10.102 | 192.168.10.100/24 | 100 | BACKUP |
说明:主备服务器均部署 Nginx Web 服务,对外通过 VIP 192.168.10.100 提供服务,当主服务器故障时,备服务器自动接管 VIP,保障 Web 服务不中断。
3.2 主服务器(MASTER)配置
3.2.1 基础环境准备
# 关闭防火墙和SELinux(生产环境可按需开放端口)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 配置主机名(可选,方便区分节点)
hostnamectl set-hostname web01
bash
# 安装Nginx,用于测试Web服务
yum install -y nginx
# 自定义Nginx首页,区分主备节点
echo "<h1>Master Web Server 192.168.10.101</h1>" > /usr/share/nginx/html/index.html
systemctl start nginx
systemctl enable nginx
3.2.2 Keepalived 主配置文件
Keepalived 主配置文件路径:/etc/keepalived/keepalived.conf,配置如下:
# 先备份原配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# 编辑主配置文件
vim /etc/keepalived/keepalived.conf
配置内容(逐行注释):
global_defs {
# 本路由器标识,主备节点名称必须不同
router_id LVS_MASTER
# 关闭通知邮件(生产环境可配置邮件告警)
# smtp_server 127.0.0.1
# smtp_connect_timeout 30
}
# VRRP 实例配置,定义虚拟路由器
vrrp_instance VI_1 {
# 角色:MASTER 为主节点,BACKUP 为备节点
state MASTER
# 绑定VIP的网卡,根据实际网卡修改(可通过ip addr查看网卡名,如ens33、eth0)
interface ens33
# 虚拟路由ID,同一集群内主备节点必须一致
virtual_router_id 51
# 优先级,数值越大优先级越高,主节点优先级必须高于备节点
priority 150
# 通告报文发送间隔,单位秒,默认1s
advert_int 1
# 认证配置,主备节点必须一致
authentication {
auth_type PASS
auth_pass 123456
}
# 虚拟IP地址,可配置多个,主备节点完全一致
virtual_ipaddress {
192.168.10.100/24
}
}
# 虚拟服务器配置(双机热备场景可省略,LVS集群需配置)
# virtual_server 192.168.10.100 80 {
# delay_loop 6
# lb_algo rr
# lb_kind DR
# nat_mask 255.255.255.0
# persistence_timeout 0
# protocol TCP
# real_server 192.168.10.101 80 {
# weight 1
# TCP_CHECK {
# connect_timeout 3
# nb_get_retry 3
# delay_before_retry 3
# connect_port 80
# }
# }
# real_server 192.168.10.102 80 {
# weight 1
# TCP_CHECK {
# connect_timeout 3
# nb_get_retry 3
# delay_before_retry 3
# connect_port 80
# }
# }
# }
3.2.3 启动 Keepalived 服务
# 启动Keepalived
systemctl start keepalived
systemctl enable keepalived
# 查看VIP是否绑定成功
ip addr show ens33
验证:执行
ip addr后,可看到网卡上绑定了 VIP 192.168.10.100,说明主节点配置成功。
3.3 备服务器(BACKUP)配置
3.3.1 基础环境准备
# 关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 配置主机名
hostnamectl set-hostname web02
bash
# 安装Nginx,自定义首页区分节点
yum install -y nginx
echo "<h1>Backup Web Server 192.168.10.102</h1>" > /usr/share/nginx/html/index.html
systemctl start nginx
systemctl enable nginx
3.3.2 Keepalived 备配置文件
同样备份原配置,编辑/etc/keepalived/keepalived.conf:
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
# 角色为BACKUP
state BACKUP
interface ens33
# VRID必须和主节点一致
virtual_router_id 51
# 优先级低于主节点
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
# 虚拟IP和主节点完全一致
virtual_ipaddress {
192.168.10.100/24
}
}
3.3.3 启动 Keepalived 服务
systemctl start keepalived
systemctl enable keepalived
# 查看VIP状态,此时备节点不会绑定VIP,仅监听主节点状态
ip addr show ens33
3.4 双机热备故障测试
3.4.1 连通性测试
在客户端(如另一台服务器、本地电脑)执行 ping 命令,持续 ping VIP:
ping 192.168.10.100
正常情况下,ping 包持续通,访问http://192.168.10.100,显示主节点的首页内容:Master Web Server 192.168.10.101。
3.4.2 主节点故障模拟
在主服务器 web01 上,停止 Keepalived 服务,模拟主节点故障:
systemctl stop keepalived
观察客户端 ping 状态:
- 仅会中断 1-2 个 ping 包,随后自动恢复连通;
- 访问
http://192.168.10.100,显示备节点的首页内容:Backup Web Server 192.168.10.102; - 查看备节点的 IP,可看到 VIP 192.168.10.100 已绑定到备节点网卡。
3.4.3 主节点恢复测试
在主服务器 web01 上,重新启动 Keepalived 服务:
systemctl start keepalived
观察客户端状态:
- ping 包无中断,VIP 自动切回主节点;
- 访问
http://192.168.10.100,恢复显示主节点首页; - 备节点的 VIP 自动解绑,回到 BACKUP 状态。
3.4.4 日志排查
Keepalived 日志默认输出到/var/log/messages,可通过日志排查故障:
# 主节点日志
tail -f /var/log/messages | grep Keepalived
# 备节点日志
tail -f /var/log/messages | grep Keepalived
正常切换日志示例:
- 主节点停止:
Stopping Keepalived v1.3.5 - 备节点抢占:
VRRP Instance(VI_1) Transition to MASTER STATE - 主节点恢复:
VRRP Instance(VI_1) Received higher priority advert, forcing to BACKUP STATE
四、LVS+Keepalived 高可用集群搭建(企业级实战)
4.1 集群架构设计
在双机热备的基础上,我们搭建一套LVS+Keepalived 高可用负载均衡集群,架构如下:
- 负载均衡层:2 台 LVS 服务器(主备),通过 Keepalived 实现双机热备,对外提供统一 VIP;
- 应用服务层:2 台 Web 真实服务器,部署 Nginx 服务,处理用户请求;
- 核心优势:LVS 实现四层负载均衡,分发请求到后端 Web 服务器;Keepalived 保障 LVS 节点的高可用,彻底解决单点故障,实现 7×24 小时业务不中断。
4.1.1 环境规划
| 角色 | 主机名 | IP 地址 | 虚拟 IP(VIP) | 角色 | 优先级 |
|---|---|---|---|---|---|
| LVS 主节点 | lvs01 | 192.168.10.101 | 192.168.10.100/24 | MASTER | 150 |
| LVS 备节点 | lvs02 | 192.168.10.102 | 192.168.10.100/24 | BACKUP | 100 |
| Web 真实服务器 1 | web01 | 192.168.10.103 | - | REAL_SERVER | - |
| Web 真实服务器 2 | web02 | 192.168.10.104 | - | REAL_SERVER | - |
说明:LVS 采用 DR(直接路由)模式,该模式性能最高,适合高并发场景;后端 Web 服务器需配置 VIP 的本地路由,实现响应报文直接返回客户端。
4.2 LVS 基础原理回顾
LVS 是 Linux 内核集成的四层负载均衡,支持三种工作模式:
| 模式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| NAT(网络地址转换) | 请求和响应都经过 LVS,LVS 修改 IP 地址 | 配置简单,后端服务器无需特殊配置 | 性能瓶颈,LVS 成为流量瓶颈 |
| DR(直接路由) | 仅请求经过 LVS,响应直接由后端服务器返回客户端 | 性能最高,无流量瓶颈 | 后端服务器需配置 VIP 路由,和 LVS 在同一局域网 |
| TUN(隧道模式) | 通过 IP 隧道封装请求,后端服务器可跨网段 | 支持跨机房部署 | 配置复杂,后端服务器需支持 IP 隧道 |
本次实战采用DR 模式,兼顾性能和易用性,适合绝大多数企业场景。
4.3 负载均衡层(LVS 主备节点)配置
4.3.1 基础环境准备(主备节点均执行)
# 关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 关闭NetworkManager,避免网络冲突
systemctl stop NetworkManager
systemctl disable NetworkManager
# 安装依赖
yum install -y keepalived ipvsadm
# 配置主机名
# 主节点执行:hostnamectl set-hostname lvs01
# 备节点执行:hostnamectl set-hostname lvs02
bash
4.3.2 LVS 主节点(lvs01)Keepalived 配置
编辑/etc/keepalived/keepalived.conf:
global_defs {
router_id LVS_MASTER
# 开启日志(可选)
# log_file /var/log/keepalived.log
}
# 定义健康检查脚本,检测后端Web服务状态
vrrp_script check_web {
script "/etc/keepalived/check_web.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 150
advert_int 1
# 关联健康检查脚本
track_script {
check_web
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.10.100/24
}
# 非抢占模式(可选,避免主节点恢复后频繁切换)
# nopreempt
}
# 虚拟服务器配置:LVS负载均衡规则
virtual_server 192.168.10.100 80 {
# 健康检查间隔,单位秒
delay_loop 6
# 负载均衡算法:rr(轮询),常用算法还有wrr、lc、wlc等
lb_algo rr
# 工作模式:DR(直接路由)
lb_kind DR
# 子网掩码
nat_mask 255.255.255.0
# 持久化超时时间,0表示关闭,同一客户端请求分发到同一服务器
persistence_timeout 0
# 协议:TCP
protocol TCP
# 后端真实服务器1:web01
real_server 192.168.10.103 80 {
# 权重,权重越高,分发的请求越多
weight 1
# TCP健康检查
TCP_CHECK {
# 连接超时时间,单位秒
connect_timeout 3
# 重试次数
nb_get_retry 3
# 重试间隔,单位秒
delay_before_retry 3
# 检查端口
connect_port 80
}
}
# 后端真实服务器2:web02
real_server 192.168.10.104 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
4.3.3 健康检查脚本(主备节点均配置)
创建健康检查脚本/etc/keepalived/check_web.sh,用于检测后端服务状态:
vim /etc/keepalived/check_web.sh
脚本内容:
#!/bin/bash
# 检测Nginx服务是否正常
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
systemctl stop keepalived
fi
赋予脚本执行权限:
chmod +x /etc/keepalived/check_web.sh
4.3.4 LVS 备节点(lvs02)Keepalived 配置
编辑/etc/keepalived/keepalived.conf,仅需修改角色、优先级、router_id,其余配置与主节点一致:
global_defs {
router_id LVS_BACKUP
}
vrrp_script check_web {
script "/etc/keepalived/check_web.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
advert_int 1
track_script {
check_web
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.10.100/24
}
}
virtual_server 192.168.10.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.10.103 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.10.104 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
4.3.5 启动 Keepalived 服务(主备节点)
# 主节点先启动,备节点后启动
systemctl start keepalived
systemctl enable keepalived
# 查看LVS负载均衡规则
ipvsadm -Ln
验证:执行
ipvsadm -Ln,可看到 VIP 192.168.10.100:80 对应的后端真实服务器 192.168.10.103:80、192.168.10.104:80,说明 LVS 规则配置成功。
4.4 应用服务层(Web 真实服务器)配置
4.4.1 基础环境准备(web01、web02 均执行)
# 关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 安装Nginx
yum install -y nginx
# 自定义首页,区分节点
# web01执行:echo "<h1>Web Server 192.168.10.103</h1>" > /usr/share/nginx/html/index.html
# web02执行:echo "<h1>Web Server 192.168.10.104</h1>" > /usr/share/nginx/html/index.html
# 启动Nginx
systemctl start nginx
systemctl enable nginx
4.4.2 配置 VIP 本地路由(DR 模式核心)
DR 模式下,后端 Web 服务器需要配置 VIP 的本地路由,让响应报文直接返回客户端,无需经过 LVS。
方法 1:临时配置(重启失效)
# web01、web02均执行
ip addr add 192.168.10.100/32 dev lo
ip route add 192.168.10.100/32 dev lo
方法 2:永久配置(开机自启) 创建路由配置文件/etc/sysconfig/network-scripts/route-lo:
vim /etc/sysconfig/network-scripts/route-lo
添加内容:
192.168.10.100/32 dev lo
创建 IP 配置文件/etc/sysconfig/network-scripts/ifcfg-lo:0:
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
添加内容:
DEVICE=lo:0
IPADDR=192.168.10.100
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
重启网络服务:
systemctl restart network
4.4.3 抑制 ARP 响应(关键配置)
为了避免后端 Web 服务器响应 ARP 请求,导致 VIP 冲突,需要抑制 lo 接口的 ARP 响应:
vim /etc/sysctl.conf
添加以下配置:
# 抑制ARP响应
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
生效配置:
sysctl -p
4.5 集群功能测试
4.5.1 负载均衡测试
在客户端访问http://192.168.10.100,多次刷新页面:
- 页面交替显示
Web Server 192.168.10.103和Web Server 192.168.10.104,说明 LVS 轮询负载均衡生效; - 查看 LVS 节点的连接数:
ipvsadm -Ln --stats,可看到两个后端服务器的请求数均匀增长。
4.5.2 后端服务故障测试
在 web01 上停止 Nginx 服务,模拟后端故障:
systemctl stop nginx
访问http://192.168.10.100:
- 仅显示 web02 的页面,说明 Keepalived 自动剔除了故障节点 web01;
- 启动 web01 的 Nginx 服务,页面恢复交替显示,说明故障节点自动恢复。
4.5.3 LVS 主节点故障测试
在 lvs01 上停止 Keepalived 服务,模拟 LVS 主节点故障:
systemctl stop keepalived
访问http://192.168.10.100:
- 服务无中断,页面正常显示,说明备节点 lvs02 自动接管 VIP,成为新的 MASTER;
- 启动 lvs01 的 Keepalived 服务,VIP 自动切回主节点,服务正常运行。
4.5.4 全链路高可用验证
依次模拟以下故障,验证集群可用性:
- 单台 Web 服务器宕机:服务正常,流量自动分发到另一台 Web 服务器;
- LVS 主节点宕机:服务正常,备节点接管 VIP;
- LVS 主节点 + 单台 Web 服务器宕机:服务正常,备节点 LVS 分发流量到存活的 Web 服务器;
- 所有故障恢复:集群自动恢复初始状态,无人工干预。
五、核心配置详解与优化
5.1 Keepalived 核心配置参数
| 配置项 | 说明 | 优化建议 |
|---|---|---|
state MASTER/BACKUP |
节点角色 | 主节点设为 MASTER,备节点设为 BACKUP,不可颠倒 |
priority |
优先级 | 主节点优先级高于备节点,建议差值≥50,避免频繁切换 |
advert_int |
通告间隔 | 默认 1s,可根据网络情况调整,网络稳定可设为 1s,网络差可设为 2s |
nopreempt |
非抢占模式 | 开启后,主节点恢复后不抢占 VIP,避免业务抖动,生产环境建议开启 |
virtual_router_id |
虚拟路由 ID | 同一集群内必须一致,不同集群不可重复,避免冲突 |
lb_algo |
负载均衡算法 | 常用:rr(轮询)、wrr(加权轮询)、lc(最小连接)、wlc(加权最小连接),根据业务场景选择 |
persistence_timeout |
会话保持 | 电商、登录类业务建议开启,设为 300(5 分钟),静态资源建议关闭 |
TCP_CHECK |
健康检查 | 配置合理的超时时间,避免误判,建议connect_timeout=3,nb_get_retry=3 |
5.2 LVS 负载均衡算法选型
| 算法 | 原理 | 适用场景 |
|---|---|---|
| rr(轮询) | 按顺序依次分发请求 | 后端服务器性能一致,无状态服务 |
| wrr(加权轮询) | 根据权重分发请求,权重越高,请求越多 | 后端服务器性能差异大,按性能分配权重 |
| lc(最小连接) | 将请求分发到连接数最少的服务器 | 长连接业务,如数据库、消息队列 |
| wlc(加权最小连接) | 加权最小连接,兼顾权重和连接数 | 后端服务器性能差异大,长连接业务 |
| sh(源地址哈希) | 根据源 IP 哈希分发,同一 IP 固定到同一服务器 | 会话保持、缓存业务 |
5.3 生产环境优化建议
- 网络优化 :
- LVS 节点采用万兆网卡,绑定多网卡,提升带宽;
- 后端服务器与 LVS 节点在同一交换机,减少网络延迟;
- 开启 TCP offload、巨帧等网卡优化,提升网络性能。
- 高可用优化 :
- 开启 Keepalived 非抢占模式(
nopreempt),避免主节点恢复后频繁切换; - 配置邮件告警,当节点故障、VIP 切换时,及时通知运维人员;
- 定期备份 Keepalived 配置文件,避免配置丢失。
- 开启 Keepalived 非抢占模式(
- 安全优化 :
- 关闭不必要的端口,仅开放业务所需端口;
- 配置防火墙规则,限制 VRRP 报文仅在主备节点之间传输;
- 定期更新 Keepalived、LVS 版本,修复安全漏洞。
- 监控告警 :
- 部署 Zabbix、Prometheus 等监控系统,监控 LVS 节点、后端服务器的状态;
- 监控 VIP 状态、负载均衡规则、后端服务健康状态,异常时自动告警;
- 定期巡检集群日志,排查潜在故障。
六、常见问题与解决方案
6.1 VIP 无法绑定
问题现象 :启动 Keepalived 后,ip addr看不到 VIP。解决方案:
- 检查网卡名是否正确(
ip addr查看实际网卡名,如 ens33、eth0); - 检查 VRID、优先级、认证信息是否正确,主备节点配置是否一致;
- 检查防火墙是否拦截 VRRP 协议(VRRP 使用协议号 112,需开放);
- 查看
/var/log/messages日志,排查错误原因。
6.2 后端服务器无法访问 VIP
问题现象 :后端 Web 服务器无法访问 VIP,服务不通。解决方案:
- 检查后端服务器是否配置了 VIP 本地路由和 ARP 抑制;
- 检查 LVS 节点的负载均衡规则是否正确(
ipvsadm -Ln); - 检查后端服务器的 Nginx 服务是否正常启动;
- 检查网络连通性,LVS 节点与后端服务器是否能互相通信。
6.3 频繁切换 VIP
问题现象 :VIP 在主备节点之间频繁切换,业务抖动。解决方案:
- 检查主备节点的优先级,主节点优先级必须高于备节点;
- 开启非抢占模式(
nopreempt),避免主节点恢复后抢占; - 调整通告间隔和超时时间,避免网络抖动导致误判;
- 检查网络稳定性,排查是否有丢包、延迟过高的问题。
6.4 负载均衡不生效
问题现象 :访问 VIP,仅显示一台后端服务器的页面,不轮询。解决方案:
- 检查 LVS 工作模式是否为 DR,后端服务器是否配置了 ARP 抑制;
- 检查负载均衡算法是否为 rr,权重是否一致;
- 检查是否开启了会话保持(
persistence_timeout),关闭会话保持; - 检查后端服务器的健康检查是否正常,故障节点被剔除。
七、总结
LVS+Keepalived 是企业级高可用负载均衡的经典方案,通过 Keepalived 的 VRRP 协议实现 LVS 节点的双机热备,彻底解决单点故障;通过 LVS 的四层负载均衡,实现请求的高效分发,支撑高并发业务。
本文从基础原理、双机热备配置、LVS 集群搭建、故障测试、优化方案全流程,详细讲解了集群的搭建与运维,所有配置均经过生产环境验证,可直接用于实际项目。
在实际生产中,还可结合 Nginx 七层负载均衡、Redis 会话共享、分布式存储等技术,构建更完善的高可用架构,保障业务的稳定运行。