LVS-DR 群集部署

一、LVS-DR 核心知识点补充

1. 什么是 LVS-DR

LVS-DR(Linux Virtual Server - Direct Routing,直接路由模式)是生产环境最常用 的 LVS 工作模式,通过二层 MAC 地址改写实现流量分发,响应流量直接由后端 Real Server 返回客户端,不经过调度器,性能极高、延迟极低。

2. LVS-DR 关键特性

  • 调度器与后端节点必须在同一物理网段
  • 仅请求流量经过调度器,响应流量直连客户端
  • 调度器与后端节点共用同一个 VIP
  • 后端节点网关不能指向调度器
  • 通过arp_ignore/arp_announce避免 VIP 的 ARP 冲突

3. 核心参数说明

  • arp_ignore=1:仅响应目标 IP 为本网卡物理 IP的 ARP 请求,拒绝 VIP 的 ARP 请求
  • arp_announce=2:发送 ARP 时仅使用物理网卡主 IP,不使用 VIP
  • send_redirects=0:关闭 ICMP 重定向,防止调度器发送错误路由信息
  • -g:ipvsadm 指定 DR 模式;-s rr:轮询调度算法

一、实验环境说明

  • LVS 调度器(Director):192.168.10.101
  • Web 节点服务器 1(Real Server):192.168.10.102
  • Web 节点服务器 2(Real Server):192.168.10.103
  • 虚拟 IP(VIP):192.168.10.172
  • 工作模式:DR(直接路由)
  • 调度算法:rr(轮询)
  • 对外服务:HTTP 80 端口

二、所有节点统一初始化操作(调度器 + Web 节点均执行)

bash

运行

复制代码
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

📘 知识点LVS-DR 依赖二层网络通信与 ARP 协议,防火墙会拦截转发报文,SELinux 会限制内核参数修改,实验环境必须关闭,保障集群正常通信。


三、LVS 调度器(Director)配置

1. 配置虚拟 IP(VIP)

bash

运行

复制代码
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0

写入配置内容:

plaintext

复制代码
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.172
NETMASK=255.255.255.0

bash

运行

复制代码
nmcli connection reload
nmcli connection up ens33

📘 知识点

  1. VIP 是集群对外统一访问入口,采用子接口 ens33:0 配置,不影响主网卡。
  2. DR 模式核心要求:调度器与所有后端节点必须配置同一个 VIP

2. 关闭内核重定向报文

bash

运行

复制代码
vim /etc/sysctl.conf

末尾添加参数:

plaintext

复制代码
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

bash

运行

复制代码
sysctl -p

📘 知识点

  1. 内核默认会发送重定向报文,导致数据包路由紊乱,无法正常转发。
  2. DR 模式下调度器仅负责转发请求,禁止发送重定向报文,保障流量路径稳定。

3. 安装 ipvsadm 并配置负载均衡策略

bash

运行

复制代码
yum -y install ipvsadm
ipvsadm -C

ipvsadm -A -t 192.168.10.172:80 -s rr
ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.102 -g -w 1
ipvsadm -a -t 192.168.10.172:80 -r 192.168.10.103 -g -w 1

ipvsadm-save
systemctl enable ipvsadm
systemctl start ipvsadm

📘 知识点

  1. ipvsadm:LVS 核心管理工具,负责定义集群规则、分发流量。
  2. 参数解释:
    • -A:添加虚拟服务
    • -t:指定 TCP 协议服务
    • -s rr:采用轮询调度算法
    • -a:添加后端真实服务器
    • -r:指定后端服务器 IP
    • -g:启用 DR 直接路由模式
    • -w 1:设置服务器权重为 1
  3. DR 模式仅修改数据包目标 MAC 地址,不修改 IP 地址,转发效率极高。

4. 查看 LVS 集群状态

bash

运行

复制代码
ipvsadm -ln

📘 知识点可查看虚拟服务、后端节点、转发模式(Route 代表 DR 模式)、连接数等信息,验证规则是否生效。


四、Web 节点服务器配置(两台节点均执行)

1. 回环接口配置 VIP 与本地路由

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

# 永久配置(写入开机自启脚本)
vim /etc/rc.local

添加内容:

plaintext

复制代码
ip addr add 192.168.10.172/32 dev lo label lo:0
ip route add local 192.168.10.172/32 dev lo

bash

运行

复制代码
chmod +x /etc/rc.local

📘 知识点

  1. VIP 配置在 lo 回环接口,不会对外广播,避免 IP 冲突。
  2. 本地路由确保访问 VIP 的报文仅在本机内部处理,防止路由紊乱。
  3. /etc/rc.local 需添加执行权限,否则重启后配置失效。

2. 调整 ARP 内核参数(DR 模式核心)

bash

运行

复制代码
vim /etc/sysctl.conf

添加参数:

plaintext

复制代码
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

📘 知识点

  1. arp_ignore=1:仅当请求 IP 属于当前网卡时,才响应 ARP 请求。
  2. arp_announce=2:发送 ARP 报文时,仅使用物理网卡主 IP,不使用 VIP。
  3. 核心作用:禁止后端节点抢占 VIP,保证只有调度器响应 VIP 的 ARP 请求。

3. 安装 HTTP 服务并创建测试页面

bash

运行

复制代码
yum -y install httpd

# Web 节点 1 执行
echo "<h1>LVS-DR Web Server 01 -- 192.168.10.102</h1>" > /var/www/html/index.html

# Web 节点 2 执行
echo "<h1>LVS-DR Web Server 02 -- 192.168.10.103</h1>" > /var/www/html/index.html

systemctl start httpd
systemctl enable httpd

📘 知识点

  1. 后端节点提供真实 Web 服务,处理客户端请求。
  2. DR 模式下,响应报文直接返回给客户端,不经过调度器,大幅降低调度器压力。

五、客户端测试集群

bash

运行

复制代码
# 单次访问
curl http://192.168.10.172

# 循环 10 次访问,验证负载均衡
for i in $(seq 10); do curl http://192.168.10.172; done

📘 知识点

  1. 频繁刷新或循环访问,页面会交替显示两台 Web 节点内容,说明轮询调度生效。
  2. 若仅显示一台节点内容,需检查 ARP 参数、ipvsadm 规则、防火墙状态。

六、LVS-DR 核心知识总结

  1. 工作原理:请求流量经调度器转发,响应流量由后端节点直接返回客户端,调度器仅修改 MAC 地址。
  2. 模式优势:性能远高于 NAT 模式,适合高并发、大流量 Web 服务,生产环境首选。
  3. 部署前提 :调度器与后端节点必须在同一物理网段
  4. 关键配置:ARP 参数抑制、回环接口 VIP、内核重定向关闭,缺一不可。
  5. 适用场景:电商网站、API 服务、短视频平台等高并发业务。
相关推荐
To_OC3 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
vipbic3 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy4 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志4 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble5 小时前
c端系统,其实更像一个信息展示平台
前端
李姆斯6 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜7 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司7 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
江华森7 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http
IT_陈寒8 小时前
Redis的KEYS命令把我搞崩溃了,改用SCAN才活过来
前端·人工智能·后端