目录
一、LVS-DR 集群核心概念与应用背景
(一)负载均衡技术的重要性
(二)LVS-DR 模式的定位与优势
二、LVS-DR 集群工作原理深度解析
(一)架构组成与网络要求
(二)数据包流向与处理机制
1. 请求阶段(客户端→调度器→Real Server)
2. 响应阶段(Real Server→客户端)
3. 关键技术细节
(三)负载均衡算法与策略
三、LVS-DR 集群搭建实战(案例环境与操作指南)
(一)案例环境规划
(二)基础环境准备(所有节点通用操作)
(三)调度器(Director Server)配置
1. 绑定虚拟 IP 地址(VIP)
2. 调整内核参数(关闭重定向与 ARP 响应优化)
3. 配置负载均衡策略(ipvsadm 工具使用)
(四)真实服务器(Real Server)配置(以 web1 为例,web2 操作相同)
1. 配置虚拟 IP 地址(VIP)至回环接口
2. 调整内核 ARP 参数(阻止 VIP 的 MAC 地址更新)
3. 安装与配置 Web 服务(Apache)
(五)NFS 共享服务器配置(可选,用于动态内容共享)
1. 安装 NFS 服务端
2. 配置共享目录
3. 启动服务并设置开机自启
四、集群测试与故障排查
(一)连通性测试
(二)负载均衡策略验证
(三)常见故障与排查方法
五、LVS-DR 集群优化与扩展策略
(一)性能优化方向
(二)集群扩展策略
(三)高可用性保障
六、LVS-DR 集群应用场景与行业案例
(一)电商平台应用
(二)在线教育平台应用
(三)游戏行业应用
在数字化业务高速发展的当下,高并发访问成为常态。以电商平台大促为例,瞬间数万甚至数十万的访问请求若集中于单台服务器,必然导致服务崩溃。负载均衡技术如同智能交通枢纽,将流量均匀分配至多台服务器,避免单点过载,保障系统稳定运行。LVS(Linux Virtual Server)作为 Linux 平台下的高性能负载均衡解决方案,凭借其开源、高效、稳定的特性,成为企业构建高并发系统的首选。
LVS-DR(Direct Routing,直接路由)模式是 LVS 三种工作模式(NAT、TUN、DR)中应用最广泛的一种。相较于 NAT 模式需二次封装数据包且调度器易成为瓶颈、TUN 模式需隧道技术支持的局限性,DR 模式具有以下显著优势:
LVS 支持多种负载均衡算法,DR 模式中常用算法包括:
主机角色 | 操作系统 | IP 地址配置 | 主要应用 |
---|---|---|---|
调度器(lvs) | openEuler 24.03 | ens33: 192.168.10.101/24(物理 IP) ens33:0: 192.168.10.100/32(VIP) |
ipvsadm(负载均衡管理工具) |
Real Server 1(web1) | openEuler 24.03 | ens33: 192.168.10.102/24(物理 IP) lo:0: 192.168.10.100/32(VIP) |
Apache(Web 服务)、nfs-utils(共享存储客户端) |
Real Server 2(web2) | openEuler 24.03 | ens33: 192.168.10.103/24(物理 IP) lo:0: 192.168.10.100/32(VIP) |
Apache、nfs-utils |
NFS 服务器(nfs) | openEuler 24.03 | ens33: 192.168.10.104/24(物理 IP) | nfs-server(共享存储服务) |
sudo yum update -y
sudo yum install -y net-tools ipvsadm sysstat bind-utils # 安装网络工具、IPVS管理工具、系统监控工具
原理:通过物理网卡的虚拟子接口(ens33:0)承载 VIP,子网掩码设置为 32 位(255.255.255.255),确保 VIP 仅在本地有效,避免路由冲突。
# 进入网络配置目录
cd /etc/sysconfig/network-scripts/
# 复制物理网卡配置文件作为虚拟接口模板
cp ifcfg-ens33 ifcfg-ens33:0
# 编辑虚拟接口配置
vim ifcfg-ens33:0
配置内容:
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.10.100
NETMASK=255.255.255.255 # 32位掩码,确保VIP为单点地址
# 重启网络服务使配置生效
systemctl restart NetworkManager
# 验证IP配置(应显示ens33:0接口及其VIP)
ifconfig ens33:0
目的:
vim /etc/sysctl.conf
添加以下参数:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
# 关闭ARP广播,避免暴露Real Server的VIP
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.ens33.arp_ignore = 1
# 使内核参数立即生效
sysctl -p
核心命令解析:
ipvsadm -A
:添加集群服务(-t 指定 TCP 协议,后跟 VIP: 端口)。ipvsadm -a
:添加 Real Server 至集群(-r 指定 Real Server IP,-g 表示 DR 模式)。ipvsadm -s
:设置负载均衡算法(如 rr 为轮询算法)。ipvsadm -C
:清除现有策略(初始化操作)。# 清除旧策略(首次配置可省略)
ipvsadm -C
# 添加集群服务(监听VIP:80端口)
ipvsadm -A -t 192.168.10.100:80 -s rr # -s指定轮询算法
# 添加Real Server 1(web1)
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.102 -g -w 1 # -w设置权重为1
# 添加Real Server 2(web2)
ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.103 -g -w 1
# 查看当前策略(应显示集群服务与Real Server列表)
ipvsadm -ln
输出示例:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.100:80 rr
-> 192.168.10.102:80 Route 1 0 0
-> 192.168.10.103:80 Route 1 0 0
# 保存策略至配置文件(重启后生效)
ipvsadm-save > /etc/sysconfig/ipvsadm
# 启用ipvsadm服务开机自启
systemctl enable --now ipvsadm
原理:Real Server 的 VIP 仅用于响应数据的源地址,通过回环接口(lo:0)绑定 VIP,避免与物理网卡 IP 冲突,并通过路由规则限制 VIP 仅在本地使用。
# 定义VIP变量(方便批量操作)
VIP="192.168.10.100"
# 临时添加VIP至lo:0接口(立即生效,重启失效)
ip addr add ${VIP}/32 dev lo label lo:0
# 临时添加本地路由(确保访问VIP的流量留在本地)
ip route add local ${VIP}/32 dev lo
# 永久配置(通过rc.local脚本)
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 # 赋予执行权限
目的:确保 Real Server 在响应 ARP 请求时,不暴露自身物理 MAC 地址,而是让调度器处理客户端的 ARP 解析,维持 DR 模式的正常运作。
vim /etc/sysctl.conf
添加以下参数:
net.ipv4.conf.all.arp_ignore = 1 # 忽略非本地接口的ARP请求
net.ipv4.conf.all.arp_announce = 2 # 限制ARP响应仅使用本地主IP地址
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
sysctl -p # 使参数生效
# 安装Apache
yum -y install httpd
# 配置NFS共享挂载(假设NFS服务器导出目录为/var/www/html)
mkdir -p /var/www/html # 创建挂载点
mount 192.168.10.104:/var/www/html /var/www/html # 临时挂载
# 设置开机自动挂载(编辑/etc/fstab)
echo "192.168.10.104:/var/www/html /var/www/html nfs defaults 0 0" >> /etc/fstab
# 创建测试网页(若未使用NFS共享,则直接编辑本地文件)
echo "Web Server 1 - LVS DR Cluster Test
" > /var/www/html/index.html
# 启动Apache服务并设置开机自启
systemctl start httpd && systemctl enable httpd
yum -y install nfs-utils rpcbind
vim /etc/exports
添加共享规则:
/var/www/html 192.168.10.0/24(rw,sync,no_root_squash) # 允许192.168.10.0/24网段读写访问
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs-server && systemctl enable nfs-server
exportfs -r # 重新导出共享目录使配置生效
客户端访问测试
在任意网络节点(如 Windows 主机)打开浏览器,输入http://192.168.10.100
,刷新页面多次,观察是否交替显示 web1 与 web2 的测试网页,验证负载均衡效果。
调度器与 Real Server 通信测试
# 在调度器上ping Real Server物理IP,确保二层连通性
ping 192.168.10.102 -c 3
# 在Real Server上ping调度器物理IP,验证双向通信
ping 192.168.10.101 -c 3
# 在Real Server上检查lo:0接口VIP是否存在
ip addr show lo:0 | grep ${VIP}
ipvsadm -ln # 查看实时负载分配情况,ActiveConn与InActConn计数应随访问增加而变化
# 在客户端安装Apache Benchmark
yum -y install httpd-tools
# 发起10000次请求测试
ab -n 10000 -c 100 http://192.168.10.100/
预期结果:请求均匀分布至 web1 与 web2,可通过ipvsadm -ln
观察到 ActiveConn 计数交替增长。
故障现象 | 可能原因 | 解决方法 |
---|---|---|
客户端无法访问 VIP | 调度器 VIP 未正确绑定 | 检查ifconfig ens33:0 输出,重新配置虚拟接口 |
Real Server 回环接口 VIP 缺失 | 在 Real Server 执行ip addr add ${VIP}/32 dev lo label lo:0 并检查路由 |
|
ARP 缓存污染 | 在客户端执行arp -d ${VIP} 清除缓存,或在 Real Server 加强 ARP 抑制参数 |
|
响应数据仍经调度器 | Real Server 网关指向调度器 | 检查ip route show ,确保默认网关为网络真实网关(非调度器 IP) |
负载分配不均 | 负载均衡算法配置错误 | 通过ipvsadm -s 重新设置算法,如-s wrr 并调整权重 |
Real Server 服务异常 | 检查 Apache 状态(systemctl status httpd )、NFS 挂载是否正常 |
vim /etc/sysctl.conf
推荐优化参数:
net.ipv4.tcp_syncookies = 1 # 防范SYN
ipvsadm
命令添加新的 Real Server 节点。例如,新节点 IP 为 192.168.10.105 ,执行以下命令:ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.105 -g -w 1
ipvsadm -s rr # 确保负载均衡算法正确应用
ipvsadm -ln # 检查新节点是否成功添加到集群中
ipvsadm -save > /etc/sysconfig/ipvsadm # 保存更新后的策略
systemctl restart ipvsadm # 重启ipvsadm服务使新配置生效
yum -y install ceph ceph - client
ceph osd pool create web_pool 128 128
ceph - 1:/web_pool /var/www/html ceph _xattr,noatime 0 0
mount -a
df -hT | grep ceph
yum -y install keepalived
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100
}
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100
}
}
systemctl start keepalived
systemctl enable keepalived
#!/bin/bash
url = "http://192.168.10.100"
response = $(curl -s -o /dev/null -w "%{http_code}" $url)
if [ "$response" -ne 200 ]; then
echo "Web service on $(hostname) is not working. Response code: $response"
# 可添加将该节点从集群中移除的ipvsadm命令,如:
# ipvsadm -d -t 192.168.10.100:80 -r $(hostname -I | awk '{print $1}')
fi
echo "*/5 * * * * /path/to/check_web.sh" >> /etc/crontab