LVS 服务器 知识
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 基本不变(只在外层加了个隧道地址),适合服务器分散在不同城市的场景。
Full NAT 模式:解决 “网关依赖” 的问题
Full NAT 模式的核心是:LVS 不仅改目标 IP,还会改源 IP,相当于给数据包 “换头换尾”,让后端服务器彻底 “认不出” 客户端,只认 LVS。
举个生活例子:
- 你(客户端)给 “张三(LVS 的 VIP)” 寄快递,快递单上写着你的地址(源 IP)和张三的地址(目标 IP);
- LVS 收到后,把快递单改成:源地址是 “LVS 自己的内网地址”,目标地址是 “李四(后端服务器)的地址”;
- 李四收到后,看到寄件人是 LVS,自然就把回信寄给 LVS;
- LVS 再把回信的寄件人改回 “张三”,发给你。
这样一来,李四(后端服务器)根本不需要知道你的地址,也不需要把网关设为 LVS—— 它只需要能通 LVS 的内网地址就行,灵活性大大提高。
Full NAT 模式的特点
- 后端服务器更 “省心”:不需要手动配置网关指向 LVS,随便放在哪个网段(只要能和 LVS 通)都能工作,适合大规模集群部署。
- LVS 工作更 “累”:普通 NAT 只改目标 IP(或源 IP),Full NAT 要同时改源 IP 和目标 IP,对 LVS 服务器的性能有一点点额外消耗(但现代服务器基本能忽略)。
- 支持跨网段:后端服务器可以和 LVS 不在同一个局域网(比如 LVS 在公网,后端在另一个机房的内网),只要网络互通就能用。
常用缩写解释
| 名称 | 含义 |
|---|---|
| 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. 修改默认网页内容以区分两台服务器 看具体配置文件默认网页的位置
# 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. 启动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
# 第二部分:在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.11.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
或
while true; do curl http://192.168.11.213; sleep 1; done
使用DR模式搭建负载均衡器
环境准备
- LVS 服务器:一个基础 IP(如 192.168.25.50)
- 虚拟 IP(VIP):192.168.25.11(所有服务器都需要绑定,LVS 绑在实际网卡,后端绑在回环网卡)
- 后端 Nginx 服务器 1:基础 IP(如 192.168.25.51)
- 后端 Nginx 服务器 2:基础 IP(如 192.168.25.52)
- 客户端(测试用):192.168.25.x(任意)
部署步骤(修正版)
1. 通用准备:所有服务器初始化(修正:统一基础环境)
# 1. 关闭UFW防火墙(仅关闭基础规则,后续手动添加ARP防护)
sudo ufw disable
# 2. 清除默认iptables规则(保留空规则表,后续添加ARP防护)
sudo iptables -F && sudo iptables -X
sudo iptables -t nat -F && sudo iptables -t nat -X
# 4. 安装依赖工具
sudo apt update -y && sudo apt upgrade -y
sudo apt install -y iputils-ping ipvsadm nginx tcpdump
2. 后端 Nginx 服务器配置(51/52 均执行,核心修正:ARP 防护规则不被清空)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#nginx所在的服务器
###2.1 配置 Nginx 服务与监听地址(修正:确保监听所有 IP)
# 1. 启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 2. 修正Nginx监听配置(确保监听所有IP,处理VIP请求)
sudo tee /etc/nginx/sites-available/default <<EOF
server {
listen 80 default_server;
listen [::]:80 default_server; # 监听所有IP的80端口
root /var/www/html;
index index.html index.htm;
server_name _;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
# 重启Nginx生效
sudo systemctl restart nginx
# 3. 生成区分页面(便于测试负载均衡)
# 211服务器执行:
echo "<h1>Nginx Server 1 (192.168.25.51)</h1>" | sudo tee /var/www/html/index.html
# 212服务器执行:
echo "<h1>Nginx Server 2 (192.168.25.52)</h1>" | sudo tee /var/www/html/index.html
# 4. 验证Nginx监听(必须显示0.0.0.0:80或:::80)
ss -lntp | grep 80
2.2 回环网卡绑定 VIP(不变,确保本地识别 VIP)
# 删除旧VIP绑定(避免冲突)
sudo ip addr del 192.168.25.11/32 dev lo 2>/dev/null
# 绑定VIP到回环网卡(/32仅本地可见,避免ARP广播)
sudo ip addr add 192.168.25.11/32 dev lo
sudo ip link set lo up
# 验证绑定(需显示192.168.25.11/32)
ip addr show lo | grep 192.168.25.11
#2.3 配置 ARP 抑制(修正:规则不被清空,叠加 iptables 防护)
# 1. 临时生效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
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# 3. LVS 服务器配置(192.168.25.50,核心修正:虚拟机混杂模式 + rc.local 生效)
3.1 配置 VIP 绑定与混杂模式(修正:补充虚拟机混杂模式设置)
# 1. 删除旧VIP绑定(避免冲突)
sudo ip addr del 192.168.25.11/24 dev ens33 2>/dev/null
# 绑定VIP到物理网卡(/24便于对外宣告ARP)
sudo ip addr add 192.168.25.11/24 dev ens33
sudo ip link set ens33 up
# 2. 开启网卡混杂模式(系统级,允许接收非自身MAC的数据包)
sudo ip link set ens33 promisc on
# 验证混杂模式(需显示PROMISC)
ip link show ens33 | grep PROMISC
# 3. 【虚拟机关键配置】在虚拟机软件中开启混杂模式(以VMware为例)
# 操作步骤:关闭LVS虚拟机 → 右键虚拟机→设置→网络适配器→高级→混杂模式→选择“全部允许”→启动虚拟机
# VirtualBox操作:虚拟机设置→网络→高级→混杂模式→选择“允许所有”
3.2 加载 LVS 内核模块与配置规则(不变,确保转发逻辑正确)
# 1. 卸载旧模块(避免冲突)
sudo modprobe -r ip_vs_rr ip_vs
# 加载LVS核心模块与轮询调度算法(rr:轮询,适合负载均衡测试)
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
# 验证模块(需显示ip_vs和ip_vs_rr)
lsmod | grep ip_vs
# 2. 配置LVS DR模式规则(-g表示DR模式)
sudo ipvsadm -C # 清空旧规则
# 添加虚拟服务(VIP:80,轮询算法)
sudo ipvsadm -A -t 192.168.25.11:80 -s rr
# 添加后端Nginx服务器(-g指定DR模式,-w 1为权重)
sudo ipvsadm -a -t 192.168.25.11:80 -r 192.168.25.51:80 -g -w 1
sudo ipvsadm -a -t 192.168.25.11:80 -r 192.168.25.52:80 -g -w 1
# 保存规则(避免重启丢失)
sudo ipvsadm -S > /etc/ipvsadm.rules
# 3. 验证规则(关键:Forward为Route,Scheduler为rr,2台后端)
sudo ipvsadm -Ln
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# 客户端测试(修正:清空 ARP 缓存,确保请求到 LVS)
4.1 基础连通性验证
bash
# 1. 客户端与LVS/VIP连通测试(均需通)
ping 192.168.25.50 -c 2 # LVS物理IP
ping 192.168.25.11 -c 2 # VIP
# 2. 客户端与后端连通测试(均需通)
ping 192.168.25.51 -c 2
ping 192.168.25.52 -c 2
4.2 负载均衡效果测试
# 1. 清空客户端ARP缓存(避免旧映射干扰)
sudo ip neigh flush all
# 2. 循环访问VIP,验证交替显示两台Nginx页面
while true; do curl http://192.168.25.11; sleep 1; done
或
echo "LVS DR模式负载均衡测试(按Ctrl+C停止):"
while true; do
# 提取访问到的服务器IP
SERVER_IP=$(curl -s http://192.168.25.11 | grep -oE "192.168.25.5[12]")
# 显示时间与结果
echo "[$(date +'%H:%M:%S')] 访问到Nginx服务器:$SERVER_IP"
sleep 1
done
使用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.25.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
sudo 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服务器IP
SERVER_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
浙公网安备 33010602011771号