LVS 服务器
集群
集群分类
-
按分发器类型分 – LVS集群 – Nginx集群 – haproxy集群 – F5集群
-
按业务类型分 – web集群 – 数据库集群 – 缓存集群 – …
-
按功能分类:
- 负载均衡集群 – LBC: 分担服务的总体压力
- 高可用集群 – HAC: 尽可能的保障服务状态的可用性
- 高性能运算集群 – HPC: 提供单台服务器提供不了的计算能力
LVS
LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器。
实现四层负载均衡,性能强大,适合日常处理大并发的大型网络架构使用;
所谓四层负载均衡 ,也就是主要通过报文中的目标地址和端口,实现负载均衡;
七层负载均衡 ,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容;
LVS四种模式
- NAT模式:
- 使用IP地址转换实现负载均衡;
- 请求(入)和响应(出)都会经过负载均衡器;
- 负载均衡器会成为一个流量的瓶颈,建议10台以内的服务器使用;
- TUN模式:
- 隧道模式,报文封装,实现负载均衡;
- 请求会经过负载均衡器,响应直接返回给客户端;
- 但是需要每台后端真实服务器都要有独立的公网IP;
- 适合跨机房,跨网段的负载均衡;
- DR模式(最常用):
- 直接路由模式,使用的MAC替换,实现负载均衡;
- 可以实现100+服务器的负载均衡;
- 请求会经过负载均衡器,响应直接返回给客户端;
- 不需要独立IP;
- FULLNAT模式:多层地址转换,超大型架构的负载均衡;(基于NAT实现,LVS 本身不支持,需要额外对内核打补丁后才能使用。)
- 通过双重地址转换实现负载均衡,客户端和后端服务器双向请求都经过负载均衡器。
- 提供了跨网段负载均衡功能。
NAT模式(网络地址转换)—— 相当于 “代收代发点”
场景:你(客户端)要寄快递给 “北京仓库”(后端服务器),但不知道仓库地址,只能先寄到 “本地代收点”(LVS 服务器)。
- 客户端发请求时(寄快递):
- 源 IP:你的地址(客户端 IP)
- 目标 IP:代收点地址(LVS 的虚拟 IP,VIP)
- LVS 的转换:收到后,把 “目标 IP” 改成实际仓库地址(后端服务器的真实 IP,RIP),源 IP 不变(还是你的地址),然后转发给仓库。
- 后端服务器回响应时(仓库寄回包裹):
- 源 IP:仓库地址(RIP)
- 目标 IP:你的地址(客户端 IP)
- LVS 的转换:仓库必须先把包裹寄回代收点(因为仓库的网关设为 LVS),LVS 收到后,把 “源 IP” 改成自己的 VIP,再发给你。
特点:所有进出数据都经过 LVS,LVS 会改两次 IP(转发时改目标 IP,回传时改源 IP)。
DR 模式(直接路由)—— 相当于 “小区门口的指路牌”
场景:你知道小区门口有个 “总指路牌”(LVS 的 VIP),它会告诉你具体哪家快递柜(后端服务器)能收你的快递。
- 客户端发请求时(寄快递):
- 源 IP:你的地址(客户端 IP)
- 目标 IP:总指路牌地址(VIP)
- LVS 的转换:只改数据包里的 “目标 MAC 地址”(相当于告诉你快递柜的具体位置),IP 不变(源 IP 还是你,目标 IP 还是 VIP),然后直接发给后端服务器(因为服务器也认识 VIP 这个 “总地址”)。
- 后端服务器回响应时(取件后通知你):
- 源 IP:直接用 VIP(总指路牌地址),假装自己是 LVS
- 目标 IP:你的地址(客户端 IP)
- LVS 的转换:完全不经过 LVS,服务器直接把响应发给你(因为 MAC 地址已经正确指向你)。
特点:LVS 只改 MAC 地址,不改 IP;回包不经过 LVS,速度快。但要求 LVS 和服务器在同一个局域网(相当于都在一个小区里)。
TUN 模式(隧道模式)—— 相当于 “跨城专用快递通道”
场景:你在上海,要寄快递给北京的仓库,但北京的仓库藏在 “专用隧道” 后面,只有 LVS 知道怎么进去。
- 客户端发请求时(寄快递):
- 源 IP:你的地址(客户端 IP)
- 目标 IP:上海的 LVS 地址(VIP)
- LVS 的转换:把整个数据包装进一个 “隧道包裹” 里,外层目标 IP 写成北京仓库的真实 IP(RIP),内层源 IP 和目标 IP 不变(还是你和 VIP),通过隧道发给北京仓库。
- 后端服务器回响应时(北京仓库寄回):
- 源 IP:直接用 VIP(假装自己是上海的 LVS)
- 目标 IP:你的地址(客户端 IP)
- LVS 的转换:不经过 LVS,服务器直接从隧道把响应发给你。
特点:通过隧道跨网段转发,IP 基本不变(只在外层加了个隧道地址),适合服务器分散在不同城市的场景。
常用缩写解释
名称 | 含义 |
---|---|
LB(Load Balancer) | 负载均衡 |
HA(High Available) | 高可用 |
Cluster | 集群 |
DS(Director Server) | 前端负载均衡节点服务器 |
RS(Real SERVER) | 后端真实服务器 |
CIP(Client IP) | 客户端IP地址 |
VIP(Virtual IP) | 负载均衡对外提供访问的IP地址,一般负载均衡IP都会通过Viirtual IP实现高可用 |
RIP(RealServer IP) | 负载均衡后端的真实服务器IP地址 |
DIP(Director IP) | 主要用于和内部主机通讯的 IP 地址 |
LVS的安装
#检查内核是否支持 LVS
# 检查 ip_vs 内核模块是否加载
lsmod | grep ip_vs# 若未加载,手动加载(临时生效)
modprobe ip_vs
modprobe ip_vs_rr # 加载轮询调度算法模块(根据需要加载其他算法,如 ip_vs_wrr、ip_vs_sh 等)---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#安装 ipvsadm 管理工具# centos安装 ipvsadm
yum install -y ipvsadm# 启动时自动加载 ip_vs 模块(避免重启后模块丢失)
echo "modprobe ip_vs" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local # 确保 rc.local 可执行#对于 Ubuntu/Debian 系统
# 更新软件源
apt update# 安装 ipvsadm
apt install -y ipvsadm# 启动时自动加载 ip_vs 模块
echo "modprobe ip_vs" >> /etc/rc.local
chmod +x /etc/rc.local---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#验证安装
# 查看 ipvsadm 版本
ipvsadm --version# 查看当前 LVS 规则(初始为空)
ipvsadm -Ln
使用该命令工具来配置LVS和算法
#用法
ipvsadm 选项 服务器地址 -s 算法
ipvsadm 选项 服务器地址 -r 真是服务器地址 [工作模式] [权重]#选项
-A 添加一个虚拟服务器
-E 编辑一个虚拟服务器
-D 删除一个虚拟服务器
-C 清空虚拟服务器列表
-R 从标准输入中还原虚拟服务器规则
-S 将虚拟服务器规则保存至标准输出
-a 添加一个真实服务器
-e 编辑一个真实服务器
-d 删除一个真实服务器
-l/L 查看分发列表
-t 使用tcp协议
-u 使用udp协议
-s 指定算法
-r 设置真实服务器的IP地址和端口信息
-g DR模式
-i tun模式
-m nat模式
-w 设置真实服务器的权重
-c 查看连接状态,需要配合L使用
-n 以数字形式输出# 比如,添加一个虚拟服务器,算法为rr,所有使用tcp协议访问192.168.1.100:80的请求,最终都被NAT模式转发给了192.168.2.210和2.220的80端口
#设置入口ip(vip):
ipvsadm -A -t 192.168.1.100:80 -s rr
#设置真实IP
ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.210:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.2.220:80 -m
使用NAT模式搭建负载均衡器
环境准备
- 三台 Ubuntu 服务器:
- LVS 服务器:需要两块网卡,内网 IP 192.168.25.213(连接 Nginx 服务器),外网 IP 192.168.11.213(供客户端访问)
- Nginx 服务器 1:IP 192.168.25.211,网关设置为 LVS 服务器的内网 IP 192.168.25.213
- Nginx 服务器 2:IP 192.168.25.212,网关设置为 LVS 服务器的内网 IP 192.168.25.213
- 客户端:与 LVS 服务器外网网卡同网段(192.168.16.x)
# 1. 安装Nginx
sudo apt update
sudo apt install -y nginx# 2. 修改默认网页内容以区分两台服务器 看具体配置文件默认网页的位置
# 在服务器192.168.25.211上执行
echo "<h1>这是Nginx服务器 1 (192.168.25.211)</h1>" | sudo tee /data/html/index.html# 在服务器192.168.25.212上执行
echo "<h1>这是Nginx服务器 2 (192.168.25.212)</h1>" | sudo tee /data/html/index.html# 3. 启动Nginx并设置开机自启 (两台nginx机)
sudo systemctl start nginx
sudo systemctl enable nginx# 4. 设置网关为LVS服务器的内网IP(关键步骤)(两台nginx机)
sudo ip route del default
sudo ip route add default via 192.168.25.213 dev ens33
# 假设网卡为ens33# 5. 永久设置网关(避免重启后失效)(可选)
# 先查看当前网络接口名称
INTERFACE=$(ip -br link show | awk '{print $1}' | grep -v lo | head -n 1)
# 修改netplan配置
sudo tee /etc/netplan/01-netcfg.yaml <<EOF
network:version: 2renderer: networkdethernets:$INTERFACE:addresses:- $(hostname -I | awk '{print $1}')/24gateway4: 192.168.25.213nameservers:addresses: [8.8.8.8, 8.8.4.4]
EOF
# 应用配置
sudo netplan apply# 第二部分:在LVS服务器上操作(192.168.25.213/192.168.11.213)# 1. 安装ipvsadm工具
sudo apt update
sudo apt install -y ipvsadm# 2. 加载LVS内核模块
sudo modprobe ip_vs
sudo modprobe ip_vs_rr # 加载轮询调度算法# 3. 启用IP转发(NAT模式核心)
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward# 永久生效
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sudo sysctl -p# 4. 配置NAT转发规则(关键步骤)
# 清除现有规则
sudo iptables -F
sudo iptables -t nat -F# 添加NAT转换规则,将外网IP的80端口转发到内网
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE# 5. 配置LVS规则(NAT模式)
# 清除现有LVS规则
sudo ipvsadm -C# 添加虚拟服务,使用轮询调度算法(-t指定外网IP和端口)
sudo ipvsadm -A -t 192.168.11.213:80 -s rr# 添加后端真实服务器(NAT模式使用-m参数)
sudo ipvsadm -a -t 192.168.11.213:80 -r 192.168.25.211:80 -m
sudo ipvsadm -a -t 192.168.11.213:80 -r 192.168.25.212:80 -m# 保存配置
sudo ipvsadm -S > /etc/ipvsadm.rules# 6. 设置开机自动加载LVS配置
sudo tee -a /etc/rc.local <<EOF
ipvsadm -R < /etc/ipvsadm.rules
EOF
sudo chmod +x /etc/rc.local# 第三部分:测试负载均衡效果
在客户端电脑上打开浏览器,访问 http://192.168.11.213
# 多次刷新页面,应该能看到交替显示两台Nginx服务器的页面内容# 也可以使用curl命令测试
curl http://192.168.11.213
使用DR模式搭建负载均衡器
环境准备
- LVS 服务器:一个基础 IP(如 192.168.25.213)
- 虚拟 IP(VIP):192.168.25.11(所有服务器都需要绑定,LVS 绑在实际网卡,后端绑在回环网卡)
- 后端 Nginx 服务器 1:基础 IP(如 192.168.25.211)
- 后端 Nginx 服务器 2:基础 IP(如 192.168.25.212)
- 客户端(测试用):192.168.25.x(任意)
# 环境说明
# 所有服务器在同一网段(192.168.25.x),均使用单网卡
# LVS服务器:192.168.25.213(单网卡,如ens33) 虚拟IP(VIP):192.168.25.11
# Nginx服务器1:192.168.25.211(单网卡)
# Nginx服务器2:192.168.25.212(单网卡)# 第一部分:后端Nginx服务器配置(211和212均执行)# 1. 安装并启动Nginx
sudo apt update
sudo apt install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx# 2. 修改默认页面(区分两台服务器)
# 服务器211执行:
echo "<h1>Nginx Server 1 (192.168.25.211)</h1>" | sudo tee /var/www/html/index.nginx-debian.html# 服务器212执行:
echo "<h1>Nginx Server 2 (192.168.25.212)</h1>" | sudo tee /var/www/html/index.nginx-debian.html# 3. # 临时生效ARP抑制参数
echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 | sudo tee /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 | sudo tee /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 | sudo tee /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 | sudo tee /proc/sys/net/ipv4/conf/ens33/arp_ignore
echo 2 | sudo tee /proc/sys/net/ipv4/conf/ens33/arp_announce# 永久生效(写入sysctl.conf)
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.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
EOF
# 加载配置
sudo sysctl -p# 4.# 删除旧VIP绑定(避免冲突)
sudo ip addr del 192.168.25.11/32 dev lo 2>/dev/null
# 绑定VIP到回环网卡(仅本地可见)
sudo ip addr add 192.168.25.11/32 dev lo
sudo ip link set lo up
# 验证绑定
ip addr show lo | grep 192.168.25.11# 5.拦截以VIP为源的ARP响应(避免后端对外宣告VIP)
sudo iptables -A OUTPUT -p arp --arp-op 2 -s 192.168.25.11 -j DROP
# 拦截以VIP为目标的ARP请求(避免后端响应VIP的请求)
sudo iptables -A INPUT -p arp --arp-op 1 -d 192.168.25.11 -j DROP#开机自启
sudo tee -a /etc/rc.local <<EOF
# 绑定VIP到回环网卡
ip addr add 192.168.25.11/32 dev lo
ip link set lo up
# 拦截ARP包
iptables -A OUTPUT -p arp --arp-op 2 -s 192.168.25.11 -j DROP
iptables -A INPUT -p arp --arp-op 1 -d 192.168.25.11 -j DROP
EOF# 赋予执行权限
sudo chmod +x /etc/rc.local# 6. 关闭防火墙(避免拦截)
sudo ufw disable
sudo iptables -F && sudo iptables -X# 第二部分:LVS服务器配置(192.168.25.213)# 1. 安装ipvsadm工具
sudo apt update
sudo apt install -y ipvsadm# 2. 加载LVS内核模块
# 卸载旧模块(避免冲突)
sudo modprobe -r ip_vs_rr ip_vs
# 加载LVS核心模块
sudo modprobe ip_vs
# 加载轮询调度算法模块(负载均衡核心)
sudo modprobe ip_vs_rr
# 验证模块加载(需显示ip_vs和ip_vs_rr)
lsmod | grep ip_vs# 3.# 删除旧VIP绑定
sudo ip addr del 192.168.25.11/24 dev ens33 2>/dev/null
# 绑定VIP到物理网卡(与基础IP同网段)
sudo ip addr add 192.168.25.11/24 dev ens33
sudo ip link set ens33 up
# 开启网卡混杂模式(解决虚拟机ARP广播问题)
sudo ip link set ens33 promisc on
# 验证绑定
ip addr show ens33 | grep 192.168.25.11# 4. 配置LVS DR模式规则
# 清空旧规则
sudo ipvsadm -C
# 添加虚拟服务(VIP:80,轮询算法rr)
sudo ipvsadm -A -t 192.168.25.11:80 -s rr
# 添加后端Nginx服务器(-g表示DR模式)
sudo ipvsadm -a -t 192.168.25.11:80 -r 192.168.25.211:80 -g
sudo ipvsadm -a -t 192.168.25.11:80 -r 192.168.25.212:80 -g
# 保存规则(避免重启丢失)
sudo ipvsadm -S > /etc/ipvsadm.rules
# 验证规则(需显示两台后端,Forward为Route)
sudo ipvsadm -Ln# 5. 设置开机自动加载配置
sudo tee -a /etc/rc.local <<EOF
# 加载LVS模块
modprobe ip_vs
modprobe ip_vs_rr
# 绑定VIP到网卡
ip addr add 192.168.25.11/24 dev ens33
ip link set ens33 up
ip link set ens33 promisc on
# 加载LVS规则
ipvsadm -R < /etc/ipvsadm.rules
EOFsudo chmod +x /etc/rc.local# 6. 关闭防火墙(避免拦截)
sudo ufw disable
sudo iptables -F && sudo iptables -X# 第三部分:测试负载均衡
# 在任意客户端(需与192.168.25.x网段互通)执行:
# 清除旧ARP缓存
sudo ip neigh flush allwhile true; do curl http://192.168.25.11; sleep 1; done
curl http://192.168.25.11
# 多次执行应交替显示两台Nginx服务器内容
使用TUN模式搭建负载均衡器
环境准备
核心功能 | |||
---|---|---|---|
LVS 服务器 | Ubuntu 20.04/22.04 | 物理网卡:192.168.25.213/24(公网 / 局域网 IP)隧道网卡(tun0):VIP 192.168.25.233/32 | 接收客户端请求,封装隧道包转发后端 |
Nginx 服务器 1 | Ubuntu 20.04/22.04 | 物理网卡:192.168.25.211/24隧道网卡(tun0):VIP 192.168.25.233/32 | 解封装隧道包,提供 Web 服务 |
Nginx 服务器 2 | Ubuntu 20.04/22.04 | 物理网卡:192.168.25.212/24隧道网卡(tun0):VIP 192.168.25.233/32 | 同 Nginx 服务器 1 |
客户端(测试用) | Windows/Linux | IP:192.168.11.x/24(与 LVS/Nginx 同网段) | 访问 VIP(192.168.25.233)验证负载均衡 |
### 所有服务器初始化(通用操作)# 关闭UFW防火墙(避免拦截隧道包与80端口)
sudo ufw disable
# 清除iptables旧规则(防止冲突)
sudo iptables -F && sudo iptables -X
sudo iptables -t nat -F && sudo iptables -t nat -X
# 关闭NetworkManager(防止自动修改网络配置)
sudo systemctl stop NetworkManager && sudo systemctl disable NetworkManagersudo apt update -y && sudo apt upgrade -y
# 安装IP隧道工具(iproute2)、LVS管理工具(ipvsadm)、Nginx(Web服务)
sudo apt install -y iproute2 ipvsadm nginx
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
### 后端 Nginx 服务器配置(211/212 均执行)#配置 IP 隧道(tun0)与绑定 VIP
# 1. 加载IPIP隧道内核模块(TUN模式必需)
sudo modprobe ipip
# 验证模块加载(需显示ipip)
lsmod | grep ipip# 2. 创建并配置隧道网卡tun0(绑定VIP)
# 删除旧隧道(避免冲突)
sudo ip tunnel del tun0 2>/dev/null
# 创建IPIP隧道(本地IP为后端自身物理IP)
sudo ip tunnel add tun0 mode ipip local 192.168.25.211 # 212服务器替换为192.168.25.212
# 激活隧道网卡
sudo ip link set tun0 up
# 绑定VIP到隧道网卡(/32表示仅本机使用,避免ARP广播)
sudo ip addr add 192.168.25.233/32 dev tun0
# 验证隧道与VIP(需显示tun0状态UP,且有192.168.25.233/32)
ip addr show tun0#关闭 ARP 响应(避免 VIP 冲突)# 临时生效ARP抑制参数
echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 | sudo tee /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 | sudo tee /proc/sys/net/ipv4/conf/tun0/arp_ignore
echo 2 | sudo tee /proc/sys/net/ipv4/conf/tun0/arp_announce
echo 1 | sudo tee /proc/sys/net/ipv4/conf/ens33/arp_ignore # ens33为物理网卡名
echo 2 | sudo tee /proc/sys/net/ipv4/conf/ens33/arp_announce# 永久生效(写入sysctl.conf)
sudo tee -a /etc/sysctl.conf <<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tun0.arp_ignore = 1
net.ipv4.conf.tun0.arp_announce = 2
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
EOF
# 加载配置
sudo sysctl -p#配置 Nginx 服务与区分页面# 1. 启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证Nginx状态(需显示active (running))
sudo systemctl status nginx# 2. 生成区分页面(便于测试负载均衡)
# Nginx服务器1(211)执行:
echo "<h1>Nginx Server 1 (192.168.25.211)</h1>" | sudo tee /var/www/html/index.nginx-debian.html
# Nginx服务器2(212)执行:
echo "<h1>Nginx Server 2 (192.168.25.212)</h1>" | sudo tee /var/www/html/index.nginx-debian.html# 3. 验证本地访问VIP(应显示自身页面)
curl http://192.168.25.233### 开机自动配置隧道与 VIP#添加以下内容(212 服务器替换 local IP 为 192.168.25.212):#!/bin/sh -e
# 加载IPIP模块
modprobe ipip
# 创建隧道网卡tun0
ip tunnel add tun0 mode ipip local 192.168.25.211
ip link set tun0 up
# 绑定VIP
ip addr add 192.168.25.233/32 dev tun0
# 启动Nginx
systemctl start nginx
exit 0#保存退出
#赋权限
sudo chmod +x /etc/rc.local
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#### LVS 服务器配置(192.168.25.213)#配置 IP 隧道(tun0)与绑定 VIP
# 1. 加载IPIP隧道内核模块
sudo modprobe ipip
# 验证模块(需显示ipip)
lsmod | grep ipip# 2. 创建并配置隧道网卡tun0(绑定VIP,对外宣告ARP)
sudo ip tunnel del tun0 2>/dev/null
# 创建IPIP隧道(本地IP为LVS物理IP)
sudo ip tunnel add tun0 mode ipip local 192.168.25.213
# 激活隧道网卡
sudo ip link set tun0 up
# 绑定VIP到隧道网卡(/24便于对外ARP宣告)
sudo ip addr add 192.168.25.233/24 dev tun0
# 验证配置(tun0状态UP,有192.168.25.233/24)
ip addr show tun0#启用 IP 转发(TUN 模式需转发隧道包)
# 临时启用IP转发
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
# 永久启用
sudo tee -a /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
EOF
# 加载配置
sudo sysctl -p
# 验证(应输出1)
cat /proc/sys/net/ipv4/ip_forward# 加载 LVS 内核模块与配置 TUN 模式规则# 1. 卸载旧LVS模块(避免冲突)
sudo modprobe -r ip_vs_rr ip_vs
# 2. 加载LVS核心模块与轮询调度算法(rr:轮询)
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
# 验证模块(需显示ip_vs和ip_vs_rr)
lsmod | grep ip_vs# 3. 配置LVS TUN模式规则(-i表示TUN模式,指向后端物理IP)
# 清空旧规则
sudo ipvsadm -C
# 添加虚拟服务(VIP:80,轮询算法rr)
sudo ipvsadm -A -t 192.168.25.233:80 -s rr
# 添加后端Nginx服务器(-i表示TUN模式,-w 1为权重)
sudo ipvsadm -a -t 192.168.25.233:80 -r 192.168.25.211:80 -i -w 1
sudo ipvsadm -a -t 192.168.25.233:80 -r 192.168.25.212:80 -i -w 1# 4. 保存规则(避免重启丢失)
sudo ipvsadm -S > /etc/ipvsadm.rules
# 验证规则(关键:Forward为Tunnel(TUN模式标识),后端为211/212)
sudo ipvsadm -Ln# 开机自动配置隧道与 LVS 规则 # 编辑rc.local
sudo nano /etc/rc.local #!/bin/sh -e
# 加载IPIP和LVS模块
modprobe ipip
modprobe ip_vs
modprobe ip_vs_rr
# 启用IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 创建隧道网卡tun0并绑定VIP
ip tunnel add tun0 mode ipip local 192.168.25.213
ip link set tun0 up
ip addr add 192.168.25.233/24 dev tun0
# 加载LVS规则
ipvsadm -R < /etc/ipvsadm.rules
exit 0#赋予权限sudo chmod +x /etc/rc.local-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------###. 客户端测试负载均衡# 客户端执行(ping VIP,应通)
ping 192.168.25.233 -c 4# 1. 浏览器测试:打开浏览器访问 http://192.168.25.233,多次刷新,应交替显示两台Nginx页面
http://192.168.25.233
# 2. 命令行测试(客户端执行,更直观):
while true; do curl http://192.168.25.233; sleep 1; done#或echo "LVS TUN模式负载均衡测试(按Ctrl+C停止):"
while true; do# 提取访问到的Nginx服务器IPSERVER_IP=$(curl -s http://192.168.25.233 | grep -oE "192.168.11.21[12]")# 显示时间与结果echo "[$(date +'%H:%M:%S')] 访问到Nginx服务器:$SERVER_IP"sleep 1
done