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。

相关推荐
hy____12317 小时前
Linux_网络编程套接字
linux·运维·网络
IP搭子来一个17 小时前
爬虫IP地址受限怎么办?附解决方法
网络·爬虫·tcp/ip
EasyGBS17 小时前
GB35114+GB28181:EasyGBS视频融合平台如何构建视频监控 “联网+安全” 双重保障体系
网络·人工智能·国标gb28181·gb35114
IP搭子来一个20 小时前
静态独享IP是什么?在数据采集任务中有哪些作用?
网络·网络协议·tcp/ip
深念Y20 小时前
从焊点加固到设备长寿:电子DIY中的机械强化与防护哲学
网络
皙然1 天前
Socket 与 WebSocket 深度解析
网络·websocket·网络协议
ren049181 天前
网络知识和Servlet重点
网络·servlet
野犬寒鸦1 天前
面试常问:HTTP 1.0 VS HTTP 2.0 VS HTTP 3.0 的核心区别及底层实现逻辑
服务器·开发语言·网络·后端·面试
HalvmånEver1 天前
Linux:初始网络(上)
linux·网络·学习·通信
Hello World . .1 天前
Linux:网络编程-基于HTTP协议的天气预报查询系统开发详解
linux·网络·http