当前位置: 首页 > article >正文

LVS 负载均衡集群(DR 模式)

一、LVS-DR 模式核心原理

1.1. DR 模式工作原理

LVS-DR(Direct Routing)模式通过 数据链路层(MAC 层) 实现负载均衡,其核心特点是 请求流量经过 Director,响应流量由 Real Server 直接返回客户端,从而突破 Director 的带宽瓶颈。以下是详细工作流程:

1.1.1.数据包流向分解

客户端发起请求

  • 客户端发送 HTTP 请求到 VIP(Virtual IP),目标 MAC 地址为 Director 的 MAC。

  • 关键点:客户端通过 ARP 协议解析 VIP 对应的 MAC 地址,此时应由 Director 响应 ARP 请求。

Director 处理入站请求

  • Director 接收请求后,根据负载均衡算法(如 wrr、lc)选择一个 Real Server。

  • 修改数据帧

    • 保留原始 IP 包头(源 IP= 客户端 IP,目标 IP=VIP)。

    • 仅修改目标 MAC 地址为选中的 Real Server 的 MAC 地址。

  • 转发数据帧到选中的 Real Server。

Real Server 处理请求

  • Real Server 的网卡接收到目标 MAC 为本机的数据帧,检查目标 IP 是否为本地配置的 VIP:

    • 由于 VIP 绑定在 Real Server 的 lo 接口(回环接口),操作系统认为该 IP 属于本机,接收并处理请求。

  • 生成HTTP响应数据包:

    • 源 IP=VIP,目标 IP= 客户端 IP。

    • 直接通过默认网关(不经过 Director) 返回给客户端。

客户端接收响应

  • 客户端收到响应,认为数据来自 VIP(对后端拓扑无感知)。

 

1.1.2.关键特性与优势

  • 高性能:响应流量不经过 Director,避免回程流量成为瓶颈。

  • 低延迟:Real Server 直接与客户端通信,减少中间跳数。

  • 透明性:客户端仅感知 VIP,无需修改应用逻辑。

 

二、环境准备

硬件与网络拓扑

  • 架构图示例:Director + 多台 Real Server(同局域网)。

  • 网络要求:所有节点需在同一物理网络(不支持跨路由)。

软件依赖

  • Director:ipvsadm。

  • Real Server:Web服务(如 Nginx)、VIP 配置工具。

IP规划示例

  • VIP:192.168.67.200

  • Director IP:192.168.67.50

  • Real Server IP:

    • RS1:192.168.67.10

    • RS2:192.168.67.20

  • Router IP:

    • 内网:192.168.67.100

    • 外网:192.168.13.100

  • Client IP:192.168.67.200

 

 

三、详细配置步骤

3.1.配置环境 IP

IP 规划根据上图,Router 需要两块网卡,需要打开内核路由,实现通信。其他主机根据规划的 IP 配置,网关指向规定的位置。

Client 需要吧网络适配器改为仅主机模式,Router 需要增加一块仅主机模式的网络适配器。

各主机配置相应的 IP

Client 主机网关指向 Router 外网仅主机接口

Director 和 RS1/2 主机网关指向 Router 内网 NAT 接口

 

3.1.1.Client

# ens160 需要用 ip a 命令看自己主机的网卡名字进行设置
# Client 主机配置 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.13.200/24 ipv4.gateway 192.168.13.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160

 

3.1.2.Router

# Router 主机配置 IP
ip addr add 192.168.67.100/24 dev ens192    # 新网卡添加 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.100/24 ipv4.gateway 192.168.67.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160
​
# 打开内核路由,实现通信 
vim /etc/sysctl.conf
net.ipv4.ip_forward=1   # 12行改为=1
# 使内核参数更改立即生效
sysctl -p

 

 

3.1.3.Director

需要在 Director,RS1,RS2 主机的环回接口上都添加同样的 VIP,VIP 是一个 IP 地址,所以子网要是 /32

# Director 主机配置 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.50/24 ipv4.gateway 192.168.67.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160
​
# 添加 VIP
ip addr add 192.168.67.200/32 dev lo

 

3.1.4.RS1

# RS1 主机配置 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.10/24 ipv4.gateway 192.168.67.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160
​
# 添加 VIP
ip addr add 192.168.67.200/32 dev lo

 

3.1.5.RS2

# RS2 主机配置 IP
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.67.20/24 ipv4.gateway 192.168.67.100 ipv4.dns 223.5.5.5 connection.autoconnect yes
nmcli connection up ens160
​
# 添加 VIP
ip addr add 192.168.67.200/32 dev lo

 

3.1.6.添加 Hosts 解析(可不做)

添加 Hosts 解析是为了让 Director 主机做的 LVS 策略能够快速保存 save,要做 Hosts 解析,每个主机都需要做。

echo >> /etc/hosts << EOF
192.168.13.200 client
192.168.13.100 router
192.168.67.100 router
192.168.67.50 director
192.168.67.10 rs1
192.168.67.20 rs2
EOF

 

3.2.配置服务

3.2.1.Real Server 节点配置 Nginx 服务

安装 Nginx 服务,配置 Nginx

yum install nginx -y
# 为便于查看结果,在 RS1 和 RS2 上设置不同的 Nginx 访问界面
echo rs1 - 192.168.67.10 > /usr/share/nginx/html/index.html   # RS1
echo rs1 - 192.168.67.10 > /usr/share/nginx/html/index.html   # RS2
systemctl enable --now nginx  # 开启 Nginx 服务

3.2.2. Real Server 节点配置 ARP 抑制

原理

① ARP 问题的根源

在 DR 模式中,Director 和所有 Real Server 都配置了相同的 VIP。若未做特殊处理,会导致以下问题:

ARP 响应冲突

  • 当客户端广播 ARP 请求解析 VIP 的 MAC 地址时,Director 和所有 Real Server 都可能响应,导致客户端记录的 VIP MAC 地址不稳定。

数据包环路

  • Real Server 可能直接收到目标 MAC 为本机的客户端请求(绕过 Director),破坏负载均衡逻辑。

② ARP 抑制的解决方案

通过调整 Linux 内核的 ARP 响应行为,确保:

  • 只有 Director 响应 VIP 的 ARP 请求

  • Real Server 忽略针对 VIP 的 ARP 请求,仅在处理本机服务时使用 VIP。

内核参数作用推荐值(DR模式)
arp_ignore控制是否响应 ARP 请求的条件:1
arp_announce控制 ARP 通告(宣告)的 IP 地址选择策略:2

arp_ignore 详解

  • 定义:控制是否响应 ARP 请求的严格级别。

  • 关键值说明

    • 0(默认):只要本地任意接口有该 IP,就响应 ARP 请求。

    • 1:仅在 ARP 请求的目标 IP 配置在接收 ARP 请求的接口上时,才响应。

DR 模式配置逻辑

  • 将 VIP 绑定在 Real Server 的 lo 接口(非物理接口)。

  • 设置 arp_ignore=1,使得当物理接口(如eth0)收到针对 VIP 的 ARP 请求时,因 VIP 不在该接口上,Real Server 不响应。

  • 只有 Director 的 lo 接口配置 VIP,正常响应 ARP 请求。

arp_announce 详解

  • 定义:控制发送 ARP 通告时使用的源 IP 地址选择策略。

  • 关键值说明

    • 0(默认):允许使用任意本地接口的 IP 作为 ARP 通告的源 IP。

    • 2:优先选择与目标 IP 在同一子网的本地接口 IP,且避免使用非本地主 IP。

DR 模式配置逻辑

  • 设置 arp_announce=2,防止 Real Server 在发送 ARP 通告或响应时,错误地使用 VIP 作为源 IP。

  • 确保 Real Server 的物理接口仅通告其真实 IP,而非 VIP。

配置
# RS1 和 RS2 都需要设置
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 

ARP 抑制永久生效(可不做)

echo >> /etc/sysctl.conf << EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
EOF
​
# sysctl -p 设定
sysctl -p

3.2.3.Director 节点配置 LVS 服务

安装 ipvsadm 服务,配置策略

yum install ipvsadm -y
​
ipvsadm -A -t 192.168.67.200:80 -s wrr
ipvsadm -a -t 192.168.67.200:80 -r 192.168.67.10:80 -g -w 1
ipvsadm -a -t 192.168.67.200:80 -r 192.168.67.20:80 -g -w 2
ipvsadm -Ln

 

四、测试(Client 访问)

测试结果:本次测试成功验证了 LVS 加权轮询算法的准确性与权重配置的有效性,表明集群能够按预设比例(1:2)合理分配请求负载。

 

总结

  • DR 模式适用场景

    • 高性能 Web 服务、对延迟敏感的业务。

  • 优缺点总结

    • 优点:吞吐量高、响应速度快。

    • 缺点:配置复杂、需同局域网。


http://www.kler.cn/a/551260.html

相关文章:

  • ThreadLocal为什么会内存溢出
  • 【deepseek之我问】如何把AI技术与教育相结合,适龄教育,九年义务教育,以及大学教育,更着重英语学习。如何结合,给出观点。结合最新智能体Deepseek
  • 【Docker】ollama部署deepseek
  • HDFS是如何存储和管理大数据
  • 移动通信发展史
  • 【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】
  • mysql多主集群 galera cluster for mysql 8安装配置启动重启集群
  • 动手实现自己的 JVM——Go!(ch03)
  • 烧烤炉出口亚马逊欧盟站CE认证EN1860安全标准
  • Golang的并发编程案例详解
  • LeetCode1287
  • 【SpringBoot苍穹外卖】debugDay04
  • TikTok 多账号管理与自动化运营:矩阵系统功能全解析
  • 国产编辑器EverEdit - 括号匹配检查
  • Unity DeepSeek API 聊天接入教程(0基础教学)
  • 国产编辑器EverEdit - “切换文件类型”的使用场景
  • 使用DeepSeek+本地知识库,尝试从0到1搭建高度定制化工作流(数据分析篇)
  • PiscTrace:让计算机视觉变得简单而高效
  • Oracle视图(基本使用)
  • 解决 `pip install open-webui` 时的编译错误:Microsoft Visual C++ 14.0 或更高版本缺失