前言
在企业级服务架构中,单点故障 与性能瓶颈 是核心风险。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
预期结果 :交替返回 Web01、Web02。
6.2 高可用故障切换测试
- 客户端持续 ping VIP:
ping 192.168.10.172 -t - 停止主调度器服务:
systemctl stop keepalived - 观察 ping 无中断,VIP 自动漂移到备节点
- 重启主调度器:
systemctl start keepalived - 主节点恢复后自动夺回 VIP
6.3 健康检查测试
停止 web01 的 httpd 服务:systemctl stop httpd访问 VIP,请求仅分发到 web02;重启 httpd 后自动恢复负载均衡。
七、关键补充知识点
7.1 LVS 调度算法
rr:轮询(平均分配)wrr:加权轮询(按权重分配,适合性能不同的节点)lc:最少连接(动态分配给连接数最少的节点)wlc:加权最少连接(默认算法,生产最常用)
7.2 Keepalived 健康检查方式
- TCP_CHECK:四层检查,仅检测端口是否开放,速度最快。
- HTTP_GET:七层检查,请求指定 URL,校验状态码 / MD5。
- SSL_GET:HTTPS 服务专用检查。
- 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 是企业四层高可用负载均衡的标准方案:
- LVS 负责流量分发,支撑万级并发;
- Keepalived 负责故障切换,实现 0 业务中断;
- DR 模式性能最优,是生产环境首选;
- 完整覆盖负载均衡、高可用、健康检查三大核心能力。