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 模式的特点

  1. 后端服务器更 “省心”:不需要手动配置网关指向 LVS,随便放在哪个网段(只要能和 LVS 通)都能工作,适合大规模集群部署。
  2. LVS 工作更 “累”:普通 NAT 只改目标 IP(或源 IP),Full NAT 要同时改源 IP 和目标 IP,对 LVS 服务器的性能有一点点额外消耗(但现代服务器基本能忽略)。
  3. 支持跨网段:后端服务器可以和 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

posted @ 2025-09-23 20:23  落无一  阅读(10)  评论(0)    收藏  举报