LVS实验

一、基础介绍

1.1 LVS 简介

LVS(Linux Virtual Server)即 Linux 虚拟服务器,是内核级别的负载调度器,由章文嵩博士开发。阿里云四层 SLB(Server Load Balance)正是基于 LVS + Keepalived 实现。

1.2 LVS 核心术语

术语 全称 含义
VS Virtual Server 负载调度器,负责请求分发
RS Real Server 真实服务器,提供实际业务服务
CIP Client IP 客户端 IP 地址
VIP Virtual IP 对外提供服务的虚拟 IP(客户端访问的 IP)
DIP Director IP 调度器内网 IP(用于和 RS 通信)
RIP Real Server IP 真实服务器的 IP 地址

1.3 LVS 集群类型

模式 核心原理 特点
LVS-NAT 修改请求报文的目标 IP(多目标 DNAT) 请求 / 响应均经 VS 转发,支持端口映射,RS 网关需指向 DIP
LVS-DR 封装新的 MAC 地址(直接路由) LVS 默认模式,性能最优,仅修改 MAC 不修改 IP
LVS-TUN 原 IP 报文外新增 IP 首部 跨网段部署,RS 需支持隧道协议
LVS-FULLNAT 修改请求报文的源 / 目标 IP 解决 NAT 模式瓶颈,VS 和 RS 可跨网段

二、实验环境说明

本次实验使用两个网段:

  • NAT 网段:192.168.0.0/24(对外访问)

  • 仅主机网段:192.168.0.0/24(VS 与 RS 内网通信)

三、LVS-NAT 模式实验

3.1 环境部署

(1)VS 调度器配置
复制代码
# 配置双网卡 IP(eth0:对外 VIP,eth1:对内 DIP)
[root@vsnode ~]# vmset.sh eth0 192.168.0.100 vsnode
[root@vsnode ~]# vmset.sh eth1 192.168.0.100 vsnode noroute
​
# 开启内核转发(核心:NAT 模式必须开启)
[root@vsnode ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@vsnode ~]# sysctl -p
(2)RS1 真实服务器配置
复制代码
# 配置内网 IP,网关指向 VS 的 DIP
[root@RS1 ~]# vmset.sh eth0 192.168.0.10 RS1 noroute
[root@RS1 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100
[root@RS1 ~]# nmcli connection reload
[root@RS1 ~]# nmcli connection up eth0
​
# 验证路由(网关需为 192.168.0.100)
[root@RS1 ~]# route -n
​
# 部署 HTTP 服务(用于测试)
[root@RS1 ~]# dnf install httpd -y
[root@RS1 ~]# systemctl enable --now httpd
[root@RS1 ~]# echo "RS1 - 192.168.0.10" > /var/www/html/index.html
(3)RS2 真实服务器配置
复制代码
# 修正原文笔误:RS2 配置需替换 IP 和主机名
[root@RS2 ~]# vmset.sh eth0 192.168.0.20 RS2 noroute
[root@RS2 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100
[root@RS2 ~]# nmcli connection reload
[root@RS2 ~]# nmcli connection up eth0
​
# 验证路由
[root@RS2 ~]# route -n
​
# 部署 HTTP 服务
[root@RS2 ~]# dnf install httpd -y
[root@RS2 ~]# systemctl enable --now httpd
[root@RS2 ~]# echo "RS2 - 192.168.0.20" > /var/www/html/index.html
(4)环境连通性测试(VS 节点执行)
复制代码
[root@vsnode ~]# curl 192.168.0.10  # 应返回 RS1 内容
[root@vsnode ~]# curl 192.168.0.20  # 应返回 RS2 内容

3.2 配置 LVS-NAT 策略

复制代码
# 安装 ipvsadm 工具
[root@vsnode ~]# dnf install ipvsadm -y
​
# 清空原有规则
[root@vsnode ~]# ipvsadm -C
​
# 添加虚拟服务(VIP:80,调度算法 wrr 加权轮询)
[root@vsnode ~]# ipvsadm -A -t 192.168.0.100:80 -s wrr
​
# 添加 RS1 节点(-m 表示 NAT 模式,-w 1 权重)
[root@vsnode ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.10:80 -m -w 1
​
# 添加 RS2 节点
[root@vsnode ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.20:80 -m -w 1
​
# 查看规则(验证配置)
[root@vsnode ~]# ipvsadm -Ln

3.3 测试验证

(1)基础轮询测试
复制代码
# 连续访问 10 次,验证轮询效果
[root@vsnode ~]# for i in {1..10};do curl 192.168.32.100;done
# 预期结果:RS1/RS2 交替返回(权重均为 1)
(2)调整权重测试
复制代码
# 修改 RS1 权重为 2(-e 编辑规则)
[root@vsnode ~]# ipvsadm -e -t 192.168.0.100:80 -r 192.168.0.10:80 -m -w 2
​
# 再次测试(RS1 出现频率应为 RS2 的 2 倍)
[root@vsnode ~]# for i in {1..10};do curl 192.168.0.100;done
(3)故障转移测试

停止 RS2 的 httpd 服务或断开网络,再次访问 VIP,请求会全部转发到 RS1,验证集群可用性。

四、LVS-DR 模式实验

4.1 环境部署逻辑

DR 模式核心:

  1. VS 和所有 RS 都配置相同的 VIP(仅 VS 的 VIP 对外可见,RS 的 VIP 绑定在 lo 回环口);

  2. RS 需禁用 ARP 响应(避免 VIP 地址冲突);

  3. 仅修改报文 MAC 地址,请求经 VS 转发,响应直接从 RS 返回客户端。

4.2 详细配置

(1)路由器(可选,用于网段转发)
复制代码
# 清空原有 ipvsadm 规则
[root@router ~]# systemctl disable --now ipvsadm.service
[root@router ~]# ipvsadm -C
​
# 配置双网卡 IP
[root@router ~]# vmset.sh eth0 172.25.254.100 vsnode
[root@router ~]# vmset.sh eth1 192.168.0.100 vsnode noroute
​
# 开启内核转发
[root@router ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@router ~]# sysctl -p
​
# 配置 SNAT 转发(让 RS 能访问外网)
[root@router ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100
[root@router ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100
(2)VS 调度器配置
复制代码
# 配置内网 IP(DIP)
[root@vsnode ~]# vmset.sh eth0 192.168.0.50 vsnode noroute

# 编辑网卡配置
[root@vsnode ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
method=manual
address1=192.168.0.50/24,192.168.0.100

# 配置 lo 回环口绑定 VIP(192.168.0.200)
[root@vsnode ~]# cp -p /etc/NetworkManager/system-connections/eth0.nmconnection /etc/NetworkManager/system-connections/lo.nmconnection
[root@vsnode ~]# vim /etc/NetworkManager/system-connections/lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo
[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.200/32

# 重载并激活连接
[root@vsnode ~]# nmcli connection reload
[root@vsnode ~]# nmcli connection up eth0
[root@vsnode ~]# nmcli connection up lo

# 配置 LVS-DR 规则(-g 表示 DR 模式,rr 轮询算法)
[root@vsnode ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g
[root@vsnode ~]# ipvsadm -Ln  # 验证规则
(3)客户端配置
复制代码
# 配置 IP 并指向网关
[root@client ~]# vmset.sh eth0 192.168.0.99 client noroute
[root@client ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
[ipv4]
method=manual
address1=192.168.0.99/24,192.168.0.100
dns=8.8.8.8;

# 重载连接
[root@client ~]# nmcli connection reload
[root@client ~]# nmcli connection up eth0

# 测试连通性(ping VIP)
[root@client ~]# ping 192.168.0.200
(4)RS1 配置
复制代码
# 配置内网 IP 和网关
[root@RS1 ~]# vmset.sh eth0 192.168.0.10 RS1 noroute
[root@RS1 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100
[root@RS1 ~]# nmcli connection reload
[root@RS1 ~]# nmcli connection up eth0

# lo 回环口绑定 VIP(和 VS 一致)
[root@RS1 ~]# cp -p /etc/NetworkManager/system-connections/eth0.nmconnection /etc/NetworkManager/system-connections/lo.nmconnection
[root@RS1 ~]# vim /etc/NetworkManager/system-connections/lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo
[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.200/32

# 重载连接
[root@RS1 ~]# nmcli connection reload
[root@RS1 ~]# nmcli connection up lo

# 禁用 ARP 响应(核心:避免 VIP 冲突)
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

# 部署 HTTP 服务(同 NAT 模式)
[root@RS1 ~]# dnf install httpd -y
[root@RS1 ~]# systemctl enable --now httpd
[root@RS1 ~]# echo "RS1 - DR Mode" > /var/www/html/index.html
(5)RS2 配置
复制代码
# 重复 RS1 配置
[root@RS2 ~]# vmset.sh eth0 192.168.0.20 RS2 noroute
[root@RS2 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100
[root@RS2 ~]# nmcli connection reload
[root@RS2 ~]# nmcli connection up eth0

# lo 绑定 VIP
[root@RS2 ~]# cp -p /etc/NetworkManager/system-connections/eth0.nmconnection /etc/NetworkManager/system-connections/lo.nmconnection
[root@RS2 ~]# vim /etc/NetworkManager/system-connections/lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo
[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.200/32

# 重载连接
[root@RS2 ~]# nmcli connection reload
[root@RS2 ~]# nmcli connection up lo

# 禁用 ARP 响应
[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

# 部署 HTTP 服务
[root@RS2 ~]# dnf install httpd -y
[root@RS2 ~]# systemctl enable --now httpd
[root@RS2 ~]# echo "RS2 - DR Mode" > /var/www/html/index.html

4.3 测试验证

客户端访问 VIP(192.168.0.200),验证轮询效果:

复制代码
[root@client ~]# for i in {1..10};do curl 192.168.0.200;done
# 预期结果:RS1/RS2 交替返回(RR 算法)

总结

  1. LVS-NAT 模式:核心是修改请求目标 IP,RS 网关必须指向 VS 的 DIP,请求 / 响应均经 VS 转发,易成瓶颈但配置简单;

  2. LVS-DR 模式:核心是修改 MAC 地址,VIP 绑定在 VS 外网和 RS 回环口,RS 需禁用 ARP 响应,性能最优(响应直连客户端);

  3. 关键配置:NAT 模式需开启 ip_forward,DR 模式需禁用 ARP 响应,ipvsadm 规则中 -m 对应 NAT、-g 对应 DR。

相关推荐
楷哥爱开发2 小时前
如何使用 Claude Fable 5 进行网页抓取?2026最新实战教程
大数据·网络·人工智能
Sirius Wu3 小时前
OpenClaw Skill:Matplotlib 可视化技能 + 沙箱双层隔离完整详解
服务器·网络·人工智能·安全·ai·架构·aigc
酣大智3 小时前
常用 IP 协议号大全(IP 层承载的上层协议)
网络·网络协议·tcp/ip
大公产经晚间消息6 小时前
《寻访独角兽》首期走进太仓,探访小科智行的硬科技“突围”
网络·人工智能·科技
JoyCong19987 小时前
ToDesk新功能科普:屏幕墙、协作模式、设备别名、USB映射...
网络·科技·电脑·远程工作·远程操作
数智化管理手记8 小时前
智能财务如何减少财务加班?智能财务落地需要哪些工具支撑?
大数据·网络·数据库·数据挖掘·精益工程
其实防守也摸鱼12 小时前
运维--安全与数据库
网络·数据库·学习·安全·安全威胁分析·数据库架构·软件安全
wbs_scy12 小时前
仿 muduo 高并发服务器项目:实现 Connection 连接管理模块,并整合 Any 上下文
运维·服务器·网络
熬夜苦读学习13 小时前
基于websocket的多用户五子棋网页游戏
linux·服务器·网络·websocket·网络协议·游戏·五子棋
蝶恋舞者13 小时前
Wireshark 抓包工具
网络·测试工具·wireshark