LVS-DR群集核心概述
定义
LVS-DR是LVS(Linux虚拟服务器)三种核心模式之一,基于数据链路层(MAC层)实现负载均衡,核心逻辑是"请求流量经调度器分发,响应流量由真实服务器直接返回客户端",从根源上解决调度器的带宽瓶颈,是高并发场景下构建大规模负载均衡集群的首选方案之一
核心优势:高性能、低延迟,响应流量不经过调度器,大幅降低调度器负载,吞吐量远高于NAT模式;客户端仅感知虚拟IP(VIP),对后端拓扑无感知,透明度高
核心角色
-
Director Server:集群入口,绑定VIP(虚拟IP),负责接收客户端请求,通过MAC地址重写将请求分发至后端真实服务器,不处理响应流量
-
Real Server:提供实际业务服务(如Web、应用服务),通过回环接口(lo)绑定VIP,直接向客户端返回响应数据,无需经过调度器
-
VIP:集群对外统一访问入口,调度器和所有真实服务器均需配置相同的VIP,确保客户端访问的一致性
-
(可选)NFS共享服务器:用于存储后端真实服务器的共享数据(如Web页面),保证所有Real Server提供的服务内容一致,避免数据不一致问题
核心限制
调度器(Director)与所有真实服务器(Real Server)必须处于同一物理网段(如同一交换机、同一VLAN),依赖二层链路通信实现MAC地址转发,无法跨网段部署;Real Server的网关不可指向调度器IP,否则响应报文会绕行调度器,失去DR模式的性能优势。
LVS-DR群集工作原理
LVS-DR模式的核心是"MAC地址重写",全程不修改IP地址,仅通过数据链路层的MAC地址调整实现请求分发,具体数据包流向分为4个步骤,可类比"餐厅点餐"场景理解:
-
客户端发起请求:客户端通过VIP访问集群,发送的数据包中,源IP=CIP(客户端IP),目标IP=VIP,目标MAC地址为调度器(Director)的物理网卡MAC地址(客户端通过ARP协议解析VIP对应的MAC地址,由调度器响应);
-
调度器分发请求:调度器接收请求后,通过IPVS模块判断为集群服务,根据预设的负载均衡算法(如轮询)选择一台Real Server,仅修改数据包的目标MAC地址(改为选中Real Server的MAC地址),源MAC地址改为调度器自身的MAC地址,IP地址(CIP和VIP)保持不变,然后将数据包转发至该Real Server;
-
Real Server处理请求:Real Server的网卡接收到目标MAC为本机的数据包后,检查目标IP(VIP),由于VIP已绑定在本机的lo接口(回环接口),操作系统认为该IP属于本机,遂接收并处理请求,生成响应数据包(源IP=VIP,目标IP=CIP);
-
Real Server直接响应:Real Server将响应数据包通过物理网卡直接返回客户端,无需经过调度器,客户端收到响应后,仅感知VIP,对后端的调度和节点分布无感知。
LVS-DR群集环境规划
以OpenEuler 24.03系统为例,规划4台主机搭建LVS-DR群集,具体配置如下(可根据实际环境调整IP和组件)
| 主机角色 | 操作系统 | 主IP地址 | VIP地址 | 核心组件 | 核心职责 |
|---|---|---|---|---|---|
| 负载调度器(Director) | OpenEuler 24.03 | 192.168.10.101 | 192.168.10.100 | ipvsadm | 绑定VIP、配置负载策略、分发请求 |
| 真实服务器1(Web1) | OpenEuler 24.03 | 192.168.10.102 | 192.168.10.100 | Apache、NFS(客户端) | 提供Web服务、挂载共享数据、直接响应客户端 |
| 真实服务器2(Web2) | OpenEuler 24.03 | 192.168.10.103 | 192.168.10.100 | Apache、NFS(客户端) | 同Web1,实现服务冗余 |
| NFS共享服务器 | OpenEuler 24.03 | 192.168.10.104 | - | NFS服务 | 存储共享Web内容,保证Web1、Web2内容一致 |
注意:所有节点需关闭防火墙和SELinux(测试环境),生产环境可配置对应的防火墙规则,确保节点间通信正常;VIP的子网掩码需设置为255.255.255.255(全1掩码),确保VIP仅本地可见,避免广播冲突
LVS-DR群集实操
bash
# 1. 关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 2. 安装基础依赖(调度器需安装ipvsadm,Real Server需安装Apache,NFS服务器需安装nfs-utils)
# 调度器安装ipvsadm
yum -y install ipvsadm
# Real Server安装Apache
yum -y install httpd
systemctl start httpd
systemctl enable httpd
# NFS服务器安装nfs-utils
yum -y install nfs-utils rpcbind
systemctl start nfs rpcbind
systemctl enable nfs rpcbind
NFS共享服务器配置
bash
# 1. 创建共享目录并设置权限
mkdir -p /var/www/html
chmod 777 /var/www/html
# 2. 编辑NFS配置文件,允许Real Server访问
vim /etc/exports
# 添加以下内容(允许192.168.10.0/24网段访问,权限为读写)
/var/www/html 192.168.10.0/24(rw,sync,no_root_squash)
# 3. 生效NFS配置
exportfs -r
# 验证共享
showmount -e localhost
集群验证与常见问题排查
集群功能验证
-
客户端访问验证:在客户端(如192.168.10.200)通过浏览器或curl命令访问VIP(192.168.10.100),多次刷新,应交替显示Web1和Web2的测试页面,说明负载均衡生效;
-
调度器状态验证:在调度器上执行
ipvsadm -lnc,查看连接记录,可看到请求被分配到不同的Real Server; -
高可用验证:停止其中一台Real Server的httpd服务,客户端访问VIP仍能正常获取页面(仅显示正常节点的页面),说明集群具备冗余能力。
常见问题及解决方案
问题1:集群无响应或请求丢失
-
可能原因:IP配置冲突(VIP重复配置)、ARP广播冲突、iptables防火墙拦截、调度器与Real Server不在同一网段;
-
解决方案:检查所有节点的VIP配置,确保无重复;确认ARP参数配置正确(arp_ignore=1、arp_announce=2);关闭防火墙或配置允许集群通信的规则;确认所有节点在同一物理网段,网络链路正常。
问题2:负载分配不均
-
可能原因:调度算法配置错误、Real Server性能差异、权重设置不合理;
-
解决方案:更换合适的调度算法(如性能差异大的节点使用wrr加权轮询);调整Real Server的权重(-w参数),性能高的节点设置更高权重;检查Real Server的负载状态,排除节点性能瓶颈。
问题3:Real Server无法响应客户端请求
-
可能原因:Real Server的网关指向调度器、lo接口未绑定VIP、ARP参数配置错误;
-
解决方案:修改Real Server的网关,确保不指向调度器IP;重新配置lo接口的VIP,验证VIP是否生效;检查ARP参数配置,确保arp_ignore和arp_announce设置正确。
性能优化与扩展策略
内核参数调优
-
TCP连接优化:调整TCP连接超时时间、SYN队列大小,提升高并发场景下的连接处理能力;
-
IPVS参数调优:调整IPVS连接超时设置,避免无效连接占用资源,优化请求分发效率。
高可用扩展
-
主备调度器:部署Keepalived与LVS结合,实现调度器的主备切换,避免调度器单点故障;
-
横向扩展Real Server:根据业务压力,增加Real Server节点数量,提升集群整体处理能力;
-
共享存储优化:使用高性能NFS服务器或分布式存储(如GlusterFS),提升共享数据的访问速度,避免存储瓶颈