Ubuntu 22.04 LVS(NAT/DR/TUN)三种模式实验手册
核心组件说明
- 调度器(DS,Director Server):集群入口节点,负责接收客户端请求,依据预设调度算法将请求均匀分发至后端真实服务器,核心功能是请求转发与负载调度。
- 真实服务器(RS,Real Server):集群业务节点,部署实际服务(本实验为 Nginx Web 服务),接收并处理 DS 分发的请求,直接或间接向客户端返回响应结果。
- 虚拟 IP(VIP,Virtual IP):客户端访问集群的唯一目标 IP。NAT 模式下仅绑定于 DS 外网网卡;DR/TUN 模式下需在 DS 与所有 RS 的虚拟接口(lo:0/tun0)上共享配置,确保响应源 IP 一致性。
- ipvsadm 工具:LVS 集群核心管理工具,用于创建/删除虚拟服务(VS)、绑定/解绑真实服务器(RS)、指定转发模式、配置调度算法及实现规则持久化,是 LVS 配置的核心依赖。
三种模式核心差异对比
| 模式 | 核心转发逻辑 | 网络拓扑要求 | 性能表现 | 适用场景 |
|---|---|---|---|---|
| NAT | 双重地址转换:DS 改写请求数据包的目标 IP(转发至 RS),RS 响应后 DS 再改写源 IP(回传给客户端),所有流量必经 DS 中转 | DS 需双网卡(外网+内网),RS 与 DS 内网网段互通,RS 默认网关必须指向 DS 内网 IP | 低(DS 是唯一流量瓶颈,需承担全量转发压力) | 小规模集群、低并发场景,硬件资源有限(无需额外网络设备支持) |
| DR | MAC 地址改写:DS 仅修改请求数据包的目标 MAC(指向目标 RS),IP 地址不变;RS 直接以 VIP 为源 IP 响应客户端,响应流量绕开 DS | 所有节点处于同一二层局域网(同一交换机),DS 与 RS 共享 VIP(配置于 lo:0 接口) | 极高(无流量中转瓶颈,DS 仅处理请求分发,不参与响应转发) | 中大规模集群、高并发场景(如 Web 服务集群),生产环境首选 |
| TUN | IPIP 隧道封装:DS 将请求数据包封装在新 IP 包中(目标 IP 为 RS),RS 解封装后处理请求,直接以 VIP 响应客户端,响应流量绕开 DS | DS 与 RS 需支持 IPIP 隧道(加载 ipip 内核模块),可跨网段部署,共享 VIP(配置于 tun0 接口) | 中等(隧道封装/解封装存在轻微性能开销,优于 NAT 但略低于 DR) | 分布式集群、RS 跨网段部署场景(如跨机房负载均衡) |
一、ipvsadm 命令完全详解(核心工具前置)
1.1 命令定位
ipvsadm 是 LVS(Linux Virtual Server)的核心配置工具,用于管理虚拟服务(VS)和真实服务器(RS)的映射规则、转发模式、调度算法等,是实现 LVS 负载均衡的基础。
1.2 基本语法
ipvsadm [子命令] [参数] [目标/值]
核心逻辑:分为「管理虚拟服务(VS)」和「管理真实服务器(RS)」两类操作,通过子命令区分层级。
1.3 核心子命令(必掌握)
| 子命令 | 作用 | 典型示例 |
|---|---|---|
| -A | 添加虚拟服务(VS) | ipvsadm -A -t 192.168.8.30:80 -s rr |
| -E | 编辑已存在的虚拟服务 | ipvsadm -E -t 192.168.8.30:80 -s wrr |
| -D | 删除指定虚拟服务 | ipvsadm -D -t 192.168.8.30:80 |
| -a | 给 VS 添加真实服务器(RS) | ipvsadm -a -t 192.168.8.30:80 -r 192.168.8.21:80 -g |
| -e | 编辑已存在的 RS | ipvsadm -e -t 192.168.8.30:80 -r 192.168.8.21:80 -m |
| -d | 从 VS 删除指定 RS | ipvsadm -d -t 192.168.8.30:80 -r 192.168.8.21:80 |
| -C | 清空所有 LVS 规则 | ipvsadm -C |
| -S | 保存规则到标准输出 | ipvsadm -S > /etc/ipvsadm.rules |
| -R | 从标准输入恢复规则 | ipvsadm -R < /etc/ipvsadm.rules |
| -L/-l | 列出当前 LVS 规则 | ipvsadm -Ln(-n:数字格式显示 IP/端口) |
1.4 关键参数说明
(1)虚拟服务类型参数
| 参数 | 含义 | 适用场景 |
|---|---|---|
| -t | TCP 服务(格式:VIP:PORT) | HTTP/HTTPS/SSH 等 TCP 服务 |
| -u | UDP 服务(格式:VIP:PORT) | DNS/NTP 等 UDP 服务 |
| -f | 防火墙标记(基于标记转发) | 多端口聚合的复杂业务 |
(2)LVS 转发模式参数(核心)
| 参数 | 模式名称 | 全称 | 核心特点 | 性能 |
|---|---|---|---|---|
| -m | NAT | Masquerading | 所有流量经 DS 转发/回传 | 低 |
| -g | DR | Direct Routing | RS 直接响应客户端(绕开 DS) | 高 |
| -i | TUN | IP Tunneling | 隧道封装,RS 可跨网段 | 中 |
(3)调度算法参数(-s)
| 参数值 | 算法名称 | 适用场景 | 核心逻辑 |
|---|---|---|---|
| rr | 轮询(Round Robin) | RS 性能一致 | 按顺序均分请求 |
| wrr | 加权轮询(Weighted RR) | RS 性能不均 | 按权重分配(如权重 2:1 则 2:1 分发) |
| lc | 最小连接(Least Connection) | 长连接业务 | 优先分配给当前连接数最少的 RS |
| wlc | 加权最小连接(Weighted LC) | 性能+连接数不均 | 结合权重和连接数动态分配 |
| sh | 源哈希(Source Hash) | 会话保持需求 | 同一客户端固定访问同一 RS |
(4)规则查看扩展参数
| 参数组合 | 作用 | 示例 |
|---|---|---|
| -Ln | 基础规则(数字格式) | ipvsadm -Ln |
| -Lnc | 规则 + 实时连接数 | ipvsadm -Lnc |
| -Ln --stats | 规则 + 统计信息(总连接/发包) | ipvsadm -Ln --stats |
| -Ln --rate | 规则 + 速率(每秒连接/发包) | ipvsadm -Ln --rate |
1.5 常用实战示例
# 1. 清空旧规则(实验前必做)
ipvsadm -C
# 2. 创建 TCP 虚拟服务(VIP:80,加权轮询)
ipvsadm -A -t 192.168.8.30:80 -s wrr
# 3. 添加 RS(DR 模式,权重 2)
ipvsadm -a -t 192.168.8.30:80 -r 192.168.8.21:80 -g -w 2
# 4. 添加 RS(DR 模式,权重 1)
ipvsadm -a -t 192.168.8.30:80 -r 192.168.8.22:80 -g -w 1
# 5. 保存规则(防止重启丢失)
ipvsadm -S > /etc/ipvsadm.rules
# 6. 查看规则(验证配置)
ipvsadm -Ln
1.6 常见问题与解决方案
- 权限拒绝(Permission denied):所有 ipvsadm 命令必须以 root 权限执行,建议全程添加
sudo前缀,避免权限不足。 - 规则添加失败(Remote address already exists):该 RS 已绑定至当前 VS,需先执行
ipvsadm -d解绑,或用ipvsadm -C清空所有规则后重新配置。 - 查询规则无结果:可能是未创建 VS 或规则被误清空,需重新执行“创建 VS→绑定 RS”流程,完成后再次验证。
- 规则持久化失效:需确认
ipvsadm.service服务已启用(sudo systemctl is-enabled ipvsadm),若未启用需执行sudo systemctl enable --now ipvsadm。
二、实验前置说明
2.1 实验环境规划
| 节点角色 | 数量 | 系统版本 | 核心软件 | 核心网络要求 |
|---|---|---|---|---|
| Director Server(DS) | 1 | Ubuntu 22.04 | ipvsadm、iproute2 | NAT 模式需双网卡(ens33:外网,ens34:内网);DR/TUN 模式单网卡(ens33) |
| Real Server(RS) | 2 | Ubuntu 22.04 | nginx | 能与 DS 通信(NAT 模式用 ens34 内网,DR/TUN 模式用 ens33 外网) |
| 测试客户端 | 1 | 任意 | curl/wget | 能访问 DS 的 VIP(192.168.8.30) |
2.2 环境准备
2.2.1 系统初始化
# 所有Ubuntu服务器都要操作
# 1. 更新apt源
sudo apt update
# 2. 更新系统
sudo apt upgrade -y
# 3. 关闭防火墙(实验简化,生产需精细化配置)
sudo ufw disable
sudo systemctl stop ufw
sudo systemctl disable ufw
# 4. 关闭 swap(优化性能)
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
# 5. 关闭 AppArmor(避免干扰)
sudo systemctl stop apparmor
sudo systemctl disable apparmor
# 6. 配置主机名(可选,便于区分)
# DS 节点:sudo hostnamectl set-hostname lvs-ds
# RS1 节点:sudo hostnamectl set-hostname lvs-rs1
# RS2 节点:sudo hostnamectl set-hostname lvs-rs2
# 7. 配置 hosts 解析(所有节点添加)
sudo tee -a /etc/hosts <<EOF
# LVS 实验节点
192.168.8.20 lvs-ds # DS 节点外网 IP
192.168.8.21 lvs-rs1 # RS1 节点外网 IP(DR/TUN 模式用)
192.168.8.22 lvs-rs2 # RS2 节点外网 IP(DR/TUN 模式用)
10.0.0.1 lvs-ds-inner # DS 节点内网 IP(NAT 模式用)
10.0.0.21 lvs-rs1-inner # RS1 节点内网 IP(NAT 模式用)
10.0.0.22 lvs-rs2-inner # RS2 节点内网 IP(NAT 模式用)
EOF
# 仅在DS调度服务器配置
sudo apt install -y ipvsadm iproute2 net-tools tcpdump
# 8. ipvsadm 规则持久化(Ubuntu 22.04 无默认服务,手动创建)
sudo tee /etc/systemd/system/ipvsadm.service <<EOF
[Unit]
Description=IPVSADM Rule Loader
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/ipvsadm -R < /etc/ipvsadm.rules
ExecStop=/sbin/ipvsadm -S > /etc/ipvsadm.rules
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
# 9. 启用持久化服务
sudo systemctl daemon-reload
sudo systemctl enable ipvsadm
2.2.2 RS 节点配置测试页面(区分不同 RS)
sudo apt install -y iproute2 nginx net-tools tcpdump
# RS1 节点
sudo rm -f /var/www/html/index.nginx-debian.html
sudo tee /var/www/html/index.html <<EOF
<h1>Real Server 1 (192.168.8.21 / 10.0.0.21)</h1>
EOF
# RS2 节点
sudo rm -f /var/www/html/index.nginx-debian.html
sudo tee /var/www/html/index.html <<EOF
<h1>Real Server 2 (192.168.8.22 / 10.0.0.22)</h1>
EOF
# 启动 nginx 并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证 nginx 可用性(本地访问)
curl http://127.0.0.1
三、LVS-NAT 模式实验
3.1 模式原理
-
DS 需双网卡:ens33(外网,VIP)对外提供服务,ens34(内网)与 RS 通信;
-
客户端请求经 DS 转发到 RS,RS 响应数据包必须经 DS 回传(RS 网关指向 DS 内网 IP);
-
所有流量经过 DS,性能瓶颈在 DS。
3.2 网络规划
| 节点 | 外网 IP(ens33) | 内网 IP(ens34) | 网关 |
|---|---|---|---|
| DS | 192.168.8.20/24 | 10.0.0.1/24 | -(无需配置网关) |
| RS1 | -(禁用或不配置) | 10.0.0.21/24 | 10.0.0.1(DS 内网 IP) |
| RS2 | -(禁用或不配置) | 10.0.0.22/24 | 10.0.0.1(DS 内网 IP) |
3.3 分步配置
3.3.1 DS 节点配置
(1)配置双网卡 IP(ens33/ens34)
# 编辑 netplan 配置文件(文件名可能为 00-installer-config.yaml)
sudo tee /etc/netplan/00-installer-config.yaml <<EOF
network:
ethernets:
ens33: # 外网网卡
addresses:
- 192.168.8.20/24
ens34: # 内网网卡
addresses:
- 10.0.0.1/24
version: 2
EOF
# 应用网络配置
sudo netplan apply
# 验证网卡配置
ip addr show ens33
ip addr show ens34
(2)开启 IP 转发(核心)
# 临时开启
sudo sysctl -w net.ipv4.ip_forward=1
# 永久开启
sudo tee -a /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
EOF
sudo sysctl -p
(3)配置 ipvsadm 规则
# 清空旧规则
sudo ipvsadm -C
# 添加 VIP 虚拟服务(ens33 外网 IP:80 端口,轮询算法)
sudo ipvsadm -A -t 192.168.8.20:80 -s rr
# 添加 RS 节点(NAT 模式用 -m 参数,指定 RS 内网 IP)
sudo ipvsadm -a -t 192.168.8.20:80 -r 10.0.0.21:80 -m
sudo ipvsadm -a -t 192.168.8.20:80 -r 10.0.0.22:80 -m
# 保存规则
sudo ipvsadm -S > /etc/ipvsadm.rules
# 验证规则
sudo ipvsadm -Ln
3.3.2 RS 节点配置(网关指向 DS 内网 IP)
注意:Ubuntu 22.04 已废弃 gateway4,改用 routes 配置网关;仅启用内网网卡 ens34,禁用外网网卡 ens33。
# 编辑 RS1 节点 netplan 配置文件
sudo tee /etc/netplan/00-installer-config.yaml <<EOF
network:
ethernets:
ens33: # 禁用外网网卡
dhcp4: no
dhcp6: no
ens34: # 配置内网网卡
addresses:
- 10.0.0.21/24
routes:
- to: 0.0.0.0/0
via: 10.0.0.1 # 指向 DS 内网 IP
version: 2
EOF
# RS2 节点仅需修改 addresses 为 10.0.0.22/24,其余相同
# sudo tee /etc/netplan/00-installer-config.yaml <<EOF
# network:
# ethernets:
# ens33:
# dhcp4: no
# dhcp6: no
# ens34:
# addresses:
# - 10.0.0.22/24
# routes:
# - to: 0.0.0.0/0
# via: 10.0.0.1
# version: 2
# EOF
# 应用配置并验证
sudo netplan apply
ip route show default # 验证网关是否为 10.0.0.1
ip addr show ens34 # 验证内网 IP 配置正确
3.4 验证
测试客户端需处于 192.168.8.0/24 网段(与 DS 外网网卡同网段),执行循环访问验证轮询效果:
for i in {1..5}; do curl http://192.168.8.20; echo -e "\n"; done
预期结果:交替显示 Real Server 1 (192.168.8.21 / 10.0.0.21) 和 Real Server 2 (192.168.8.22 / 10.0.0.22)。
四、LVS-DR 模式实验(生产首选)
4.1 模式原理
-
所有节点在同一局域网(192.168.8.0/24),DS 和 RS 均配置相同 VIP(虚拟 IP);
-
RS 禁用 ARP 响应(避免 VIP 地址冲突);
-
客户端请求经 DS 转发到 RS,RS 直接响应客户端(绕开 DS),性能最优。
4.2 网络规划
| 节点 | 物理 IP(ens33) | VIP(虚拟 IP,lo:0 接口) | 网关 |
|---|---|---|---|
| DS | 192.168.8.20/24 | 192.168.8.30/32 | 192.168.8.1(局域网网关,可选) |
| RS1 | 192.168.8.21/24 | 192.168.8.30/32 | 192.168.8.1(局域网网关) |
| RS2 | 192.168.8.22/24 | 192.168.8.30/32 | 192.168.8.1(局域网网关) |
4.3 分步配置
4.3.1 所有节点配置 VIP(lo:0 接口)
# 配置 VIP(临时生效,重启失效)
sudo ip addr add 192.168.8.30/32 dev lo label lo:0
# 启用 lo 接口(确保接口活跃)
sudo ip link set lo up
# 验证 VIP 配置
ip addr show lo # 查看 lo 接口是否有 192.168.8.30/32 地址
4.3.2 RS 节点禁用 ARP 响应 + 关闭反向路径过滤(核心)
# 临时配置
sudo sysctl -w net.ipv4.conf.all.arp_ignore=1
sudo sysctl -w net.ipv4.conf.all.arp_announce=2
sudo sysctl -w net.ipv4.conf.lo.arp_ignore=1
sudo sysctl -w net.ipv4.conf.lo.arp_announce=2
sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.conf.lo.rp_filter=0
sudo sysctl -w net.ipv4.conf.ens33.rp_filter=0 # 针对外网网卡关闭反向路径过滤
# 永久配置
sudo tee -a /etc/sysctl.conf <<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.ens33.rp_filter = 0
EOF
sudo sysctl -p
4.3.3 DS 节点配置 ipvsadm 规则
# 清空旧规则
sudo ipvsadm -C
# 添加 VIP 虚拟服务(DR 模式用 -g 参数,指定 VIP:80)
sudo ipvsadm -A -t 192.168.8.30:80 -s rr
# 添加 RS 节点(指定 RS 物理 IP,DR 模式 -g)
sudo ipvsadm -a -t 192.168.8.30:80 -r 192.168.8.21:80 -g
sudo ipvsadm -a -t 192.168.8.30:80 -r 192.168.8.22:80 -g
# 保存规则
sudo ipvsadm -S > /etc/ipvsadm.rules
# 验证规则
sudo ipvsadm -Ln
4.4 验证
测试客户端访问 VIP(192.168.8.30),验证轮询效果:
for i in {1..5}; do curl http://192.168.8.30; echo -e "\n"; done
预期结果:交替显示 Real Server 1 (192.168.8.21 / 10.0.0.21) 和 Real Server 2 (192.168.8.22 / 10.0.0.22)。
五、LVS-TUN 模式实验(跨网段场景)
5.1 模式原理
-
DS 与 RS 之间通过 IPIP 隧道通信,RS 可跨网段部署(本实验仍用同网段演示,核心验证隧道配置);
-
需加载 ipip 内核模块,支持隧道封装/解包;
-
RS 直接响应客户端,性能优于 NAT、略低于 DR。
5.2 网络规划
| 节点 | 物理 IP(ens33) | VIP(虚拟 IP,tunl0 接口) | 隧道接口 |
|---|---|---|---|
| DS | 192.168.8.20/24 | 192.168.8.30/32 | tunl0(IPIP 隧道) |
| RS1 | 192.168.8.21/24 | 192.168.8.30/32 | tunl0(IPIP 隧道) |
| RS2 | 192.168.8.22/24 | 192.168.8.30/32 | tunl0(IPIP 隧道) |
5.3 分步配置
5.3.1 所有节点加载 ipip 内核模块
# 临时加载
sudo modprobe ipip
# 验证模块加载成功
lsmod | grep ipip # 输出 ipip 相关内容则成功
# 永久加载(重启生效)
sudo tee -a /etc/modules-load.d/ipip.conf <<EOF
ipip
EOF
5.3.2 DS 节点配置隧道 + ipvsadm 规则
(1)创建 IPIP 隧道(tunl0)
# 创建隧道接口(指定本地物理 IP 为 DS 的 ens33 IP)
sudo ip tunnel add tunl0 mode ipip local 192.168.8.20 remote any
sudo ip link set tunl0 up
sudo ip addr add 192.168.8.30/32 dev tunl0
# 验证隧道配置
ip tunnel show tunl0 # 查看隧道状态
ip addr show tunl0 # 查看 VIP 配置
(2)配置 ipvsadm 规则
# 清空旧规则
sudo ipvsadm -C
# 添加 VIP 虚拟服务(TUN 模式用 -i 参数)
sudo ipvsadm -A -t 192.168.8.30:80 -s rr
# 添加 RS 节点(TUN 模式 -i,指定 RS 物理 IP)
sudo ipvsadm -a -t 192.168.8.30:80 -r 192.168.8.21:80 -i
sudo ipvsadm -a -t 192.168.8.30:80 -r 192.168.8.22:80 -i
# 保存规则
sudo ipvsadm -S > /etc/ipvsadm.rules
# 验证规则
sudo ipvsadm -Ln
5.3.3 RS 节点配置隧道 + ARP 屏蔽
# 1. 创建 IPIP 隧道(RS1 用自身 ens33 IP 作为本地 IP)
sudo ip tunnel add tunl0 mode ipip local 192.168.8.21 remote any
sudo ip link set tunl0 up
sudo ip addr add 192.168.8.30/32 dev tunl0
# RS2 节点创建隧道命令(替换本地 IP 为 192.168.8.22)
# sudo ip tunnel add tunl0 mode ipip local 192.168.8.22 remote any
# sudo ip link set tunl0 up
# sudo ip addr add 192.168.8.30/32 dev tunl0
# 2. 禁用 ARP + 关闭反向路径过滤(适配 tunl0 隧道接口)
sudo sysctl -w net.ipv4.conf.all.arp_ignore=1
sudo sysctl -w net.ipv4.conf.all.arp_announce=2
sudo sysctl -w net.ipv4.conf.tunl0.arp_ignore=1
sudo sysctl -w net.ipv4.conf.tunl0.arp_announce=2
sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sudo sysctl -w net.ipv4.conf.ens33.rp_filter=0
# 3. 永久配置
sudo tee -a /etc/sysctl.conf <<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.ens33.rp_filter = 0
EOF
sudo sysctl -p
# 4. 验证隧道和 VIP
ip tunnel show tunl0
ip addr show tunl0
5.4 验证
测试客户端访问 VIP(192.168.8.30),验证轮询效果:
for i in {1..5}; do curl http://192.168.8.30; echo -e "\n"; done
预期结果:交替显示 Real Server 1 (192.168.8.21 / 10.0.0.21) 和Real Server 2 (192.168.8.22 / 10.0.0.22)。
六、实验注意事项(共 16 条)
6.1 环境准备注意事项
-
Ubuntu 22.04 需关闭 ufw 防火墙和 AppArmor,否则会拦截 LVS 转发的数据包;
-
所有节点需配置 hosts 解析,避免因 DNS 解析失败导致节点间通信异常;
-
RS 节点的 nginx 需确认启动并监听 80 端口(
netstat -tnlp | grep nginx),否则访问会超时; -
实验前需关闭 swap,避免系统内存交换影响 LVS 转发性能;
-
所有节点网卡命名统一为 ens33(外网)、ens34(内网,仅 NAT 模式用),避免因网卡名不一致导致配置失效。
6.2 NAT 模式注意事项
-
DS 必须配置双网卡(ens33 外网、ens34 内网),且开启
net.ipv4.ip_forward=1,否则无法转发数据包; -
RS 节点需禁用外网网卡 ens33,仅启用内网网卡 ens34,避免网络路由冲突;
-
RS 网关必须指向 DS 内网 IP(10.0.0.1),否则 RS 响应数据包无法回传给客户端;
-
Ubuntu 22.04 中禁止使用 gateway4 配置网关,需改用 routes 字段,否则 netplan 应用失败。
6.3 DR 模式注意事项
-
所有节点的 VIP 必须配置在 lo:0 接口(/32 掩码),不能配置在物理网卡 ens33,否则会触发 ARP 冲突;
-
RS 节点必须设置
arp_ignore=1和arp_announce=2,否则客户端会直接访问 RS 物理 IP 而非 VIP; -
需关闭 ens33 和 lo 接口的反向路径过滤(
rp_filter=0),否则 Linux 内核会丢弃「源 IP 与网卡不匹配」的数据包; -
DR 模式要求所有节点在同一二层局域网(同一交换机),跨网段会导致 ARP 屏蔽失效。
6.4 TUN 模式注意事项
-
必须加载 ipip 内核模块,否则无法创建 tunl0 隧道接口;
-
RS 节点的隧道 remote 参数需设为 any,而非指定 DS IP,否则无法适配多 DS 场景;
-
TUN 模式的 VIP 配置在 tunl0 接口,需同步配置该接口的 ARP 屏蔽参数,避免 VIP 冲突。
6.5 通用注意事项
-
ipvsadm 规则默认重启后丢失,需创建 ipvsadm.service 并保存规则到 /etc/ipvsadm.rules,否则重启 DS 后规则失效;
-
实验过程中若修改网络配置,需重新应用 netplan 并验证配置(
ip addr、ip route),避免配置未生效。
七、常见问题排查
7.1 访问 VIP 无响应
-
排查步骤 1:
ipvsadm -Ln检查 DS 规则是否正确(VIP、RS IP、模式参数是否匹配); -
排查步骤 2:
systemctl status nginx检查 RS 节点 nginx 是否运行,curl 127.0.0.1验证本地访问正常; -
排查步骤 3:
ping测试 DS 与 RS 对应网卡 IP 连通性(NAT 模式 ping 内网 IP