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。

相关推荐
CPETW23 分钟前
USB TO I2C_(Excel)_Scan ---- 1000KHz总线速率测试_A
c语言·开发语言·网络·科技·单片机
杨云龙UP1 小时前
Oracle 19c RMAN历史备份清理失败:CONTROL_FILE_RECORD_KEEP_TIME 问题排查与整改实战
linux·运维·网络·数据库·oracle·rac
pt10432 小时前
网络自动化Python课程:Netconf与Restconf及Cisco自动化配置实验
网络·python·自动化
神仙别闹2 小时前
基于C++ WinPcap 的网络抓包软件
网络·c++·php
LabVIEW开发2 小时前
使用 LabVIEW 获取文件的创建日期:从内置函数到 Windows API 封装
网络·windows·labview·labview知识·labview功能·labview程序
DevOpenClub2 小时前
全球区域与 IP 定位工作台案例方案
大数据·网络·网络协议·tcp/ip
wuyk5552 小时前
从零吃透 Modbus 通信|第 6 章:线圈功能码 05/0F 实现 & Modbus‑TCP 基础入门
c语言·网络·网络协议·tcp/ip
NJCloud3 小时前
Docker 私有仓库部署:Registry、加密传输与认证鉴权
运维·网络·docker·云原生·容器
CC城子3 小时前
Bootloader + OTA -Ymodem 协议
网络·ymoden
又见情义3 小时前
RK3568 + RTL8211F 网络唤醒(WOL)功能适配全记录
android·网络·驱动开发