负载均衡全解析)
LVSLinux Virtual Server负载均衡全解析一、LVS 核心概念1.1 什么是 LVSLVSLinux Virtual Server是 Linux 内核中的四层负载均衡软件由章文嵩博士于 1998 年创建。它工作在内核空间通过 netfilter 框架能将大量并发请求按调度算法分发到后端真实服务器Real Server从而实现高可用、高并发的服务集群。1.2 关键术语术语说明VS(Virtual Server)负载均衡器对外提供虚拟服务VIP虚拟 IP客户端访问的入口 IPDIP与后端 RS 通信的 IPDirector IPRS(Real Server)真正处理业务请求的后端服务器CIP客户端 IPRIP后端服务器的实际 IPipvsadm用户空间工具用于管理 LVS 规则ipvs内核模块真正执行包转发⚠️ LVS 没有统一配置文件所有规则通过ipvsadm命令动态管理。二、LVS 工作原理简述客户端请求到达 Director ServerVS的 VIP。数据包经过内核 PREROUTING 链发现目标是本机送往 INPUT 链。INPUT 链上的 ipvs 模块根据预设的集群服务规则修改数据包的目标地址/端口或封装新头部。修改后的包经 POSTROUTING 链转发给选中的 RS。RS 处理请求后根据工作模式决定响应路径可能经 VS 返回也可能直接返回客户端。三、LVS 三种工作模式对比3.1 NAT 模式Network Address Translation特点请求和响应都经过 VSVS 需做源/目标 NAT。优点RS 可使用私有 IP支持端口映射配置简单。缺点VS 容易成为瓶颈适合小规模集群。关键要求RS 的网关必须指向 DIP。3.2 DR 模式Direct Routing ★★★★★特点请求经 VS 转发响应直接由 RS 返回客户端。优点性能最高VS 几乎无瓶颈生产环境最常用。缺点VS 与 RS 必须在同一二层网络同一交换机不支持端口映射。关键要求RS 的 lo 或 dummy 网卡配置 VIP掩码 32。关闭 RS 对 VIP 的 ARP 响应修改内核参数。3.3 TUN 模式Tunneling特点VS 封装 IP 隧道额外 IP 头将请求转发给 RS。优点VS 和 RS 可以跨网段。缺点隧道开销大配置复杂很少使用。四、调度算法静态算法不关心后端负载RRRound Robin轮询WRRWeighted RR加权轮询SHSource Hashing源地址哈希DHDestination Hashing目标地址哈希动态算法依据后端连接数等LCLeast Connections最少连接数WLCWeighted LC默认算法加权最少连接SEDShortest Expected Delay最短期望延迟NQNever Queue永不排队LBLCLocality-Based LC基于局部性的最少连接LBLCRLBLC with Replication带复制的局部性最少连接五、实验环境总览实验使用 VMware 虚拟机划分两个网段10.1.1.0/24模拟外网客户端网段10.1.8.0/24内网服务器网段路由器router负责双网段互通开启 IP 转发。六、NAT 模式实验含注释6.1 网络拓扑与角色主机名IP 地址网关角色client210.1.1.2110.1.1.10客户端lvs10.1.1.10 (ens36)10.1.8.10 (ens33)10.1.8.2LVSDirectorweb1~web310.1.8.11~1310.1.8.10Real ServerNginx⚠️ NAT 模式下RS 的网关必须指向 LVS 的 DIP10.1.8.10。6.2 基础配置省略重复部分① 开启 LVS 的 IP 转发及防火墙# 开启路由转发echonet.ipv4.ip_forward 1/etc/sysctl.confsysctl-p# 配置防火墙允许伪装systemctlenablefirewalld--nowfirewall-cmd --set-default-zonetrusted firewall-cmd --add-masquerade--permanentfirewall-cmd --add-masquerade② 部署后端 Nginxweb1~web3# 安装 Nginxyuminstall-ynginx# 生成测试主页显示主机名echowelcome to$(hostname)/usr/share/nginx/html/index.html systemctlenablenginx--now③ 安装 ipvsadmLVS 上yuminstall-yipvsadmtouch/etc/sysconfig/ipvsadm systemctlenableipvsadm--now6.3 配置 LVS NAT 负载均衡带注释# 1. 添加一个虚拟服务VIP 10.1.1.10端口 80使用轮询算法rripvsadm-A-t10.1.1.10:80-srr# 2. 添加真实服务器使用 NAT 模式-m权重为 1默认ipvsadm-a-t10.1.1.10:80-r10.1.8.11-mipvsadm-a-t10.1.1.10:80-r10.1.8.12-mipvsadm-a-t10.1.1.10:80-r10.1.8.13-m# 3. 保存规则到文件以便开机恢复ipvsadm-save-n/etc/sysconfig/ipvsadm# 4. 查看规则ipvsadm-Ln输出示例Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward weight ActiveConn InActConn TCP 10.1.1.10:80 rr - 10.1.8.11:80 Masq 1 0 0 - 10.1.8.12:80 Masq 1 0 0 - 10.1.8.13:80 Masq 1 0 06.4 验证 NAT 模式在客户端10.1.1.21执行循环测试foriin{1..90};docurl-s10.1.1.10;done|sort|uniq-c结果示例轮询30 welcome to web1.laogao.cloud 30 welcome to web2.laogao.cloud 30 welcome to web3.laogao.cloud6.5 动态修改调度算法为 WRR# 修改虚拟服务的调度算法为加权轮询ipvsadm-E-t10.1.1.10:80-swrr# 修改权重web2 权重 2web3 权重 3web1 保持默认 1ipvsadm-e-t10.1.1.10:80-r10.1.8.12-m-w2ipvsadm-e-t10.1.1.10:80-r10.1.8.13-m-w3再次测试请求比例应为 1:2:3web1:web2:web3。6.6 NAT 模式的坑 解决问题client110.1.8.21无法通过 VIP 10.1.1.10 访问后端原因client1 发出的请求经过 LVS 转发到 RSRS 看到源 IP 是 10.1.8.21同网段会直接将响应发回 client1而不是经过 LVS。client1 收到的响应源 IP 是 RS 的真实 IP10.1.8.11而非 VIP导致连接混乱。解决方法在每台 RS 上添加静态路由强制将发往 client1 的响应包路由到 LVSnmcli connection modify ens33 ipv4.routes10.1.8.21 255.255.255.255 10.1.8.10nmcli connection up ens33更通用的做法是让 RS 的默认网关指向 LVS这样所有响应包都经过 LVS 做源 NAT。七、DR 模式实验生产环境首选含详细注释7.1 网络拓扑与角色主机名IP 地址网关VIP角色client210.1.1.2110.1.1.20无外网客户端client110.1.8.2110.1.8.20无内网客户端lvs10.1.8.1010.1.8.2010.1.8.100Directorweb1~web310.1.8.11~1310.1.8.2010.1.8.100Real Server路由器配置略类似 NAT 模式需开启转发。7.2 Real Server 关键配置所有 RS 执行① 创建 dummy 网卡并绑定 VIP掩码 32# 添加 dummy 虚拟网卡设置 IP 为 10.1.8.100/32仅自己可见nmcli connectionaddtypedummy ifname dummy con-name dummy\ipv4.method manual ipv4.addresses10.1.8.100/32 nmcli connection up dummy② 修改 ARP 内核参数防止 RS 响应 VIP 的 ARP 请求cat/etc/sysctl.confEOF net.ipv4.conf.all.arp_ignore 1 net.ipv4.conf.all.arp_announce 2 net.ipv4.conf.dummy.arp_ignore 1 net.ipv4.conf.dummy.arp_announce 2 EOFsysctl-p参数解释参数值含义arp_ignore1仅当 ARP 请求的目标 IP 与接收网卡的主 IP 完全匹配时才响应arp_announce2发送 ARP 通告时使用与目标 IP 同子网的本地 IP 作为源 IP否则不发送 目的避免 RS 上的 VIP 被广播出去导致路由器将流量直接发给 RS 而非 LVS。7.3 DirectorLVS配置① 绑定 VIP可选用于本机接收报文# 同样添加 dummy 网卡绑定 VIP也可直接配置在物理网卡上nmcli connectionaddtypedummy ifname dummy con-name dummy\ipv4.method manual ipv4.addresses10.1.8.100/32 nmcli connection up dummy② 安装 ipvsadm 并配置 DR 模式规则yuminstall-yipvsadmtouch/etc/sysconfig/ipvsadm systemctlenableipvsadm--now# 清除旧规则ipvsadm-C# 添加虚拟服务VIP:80调度算法 rripvsadm-A-t10.1.8.100:80-srr# 添加真实服务器使用 DR 模式-g权重默认 1ipvsadm-a-t10.1.8.100:80-r10.1.8.11-gipvsadm-a-t10.1.8.100:80-r10.1.8.12-gipvsadm-a-t10.1.8.100:80-r10.1.8.13-g# 保存规则ipvsadm-save-n/etc/sysconfig/ipvsadm查看规则ipvsadm-Ln# Forward 列显示 Route 表示 DR 模式Prot LocalAddress:Port Scheduler -RemoteAddress:Port Forward weight ActiveConn InActConn TCP10.1.8.100:80 rr -10.1.8.11:80 Route100-10.1.8.12:80 Route100-10.1.8.13:80 Route1007.4 验证 DR 模式从客户端client1 或 client2访问 VIPforiin{1..90};docurl-s10.1.8.100;done|sort|uniq-c输出应为均匀轮询每个 RS 30 次。此时用tcpdump抓包可见请求包源 IP 为客户端目标 IP 为 VIP10.1.8.100MAC 目标为 LVS 的 MAC响应包直接从 RS 返回客户端源 IP 为 VIP不经过 LVS。7.5 DR 模式一键脚本RS 端#!/bin/bash# 文件名: rs_dr.sh# 描述: 配置 Real Server 的 VIP 及 ARP 参数VIP10.1.8.100case$1instart)echo-nStart LVS Real Server ... # 添加 dummy 网卡绑定 VIPifnmcli connection|grep-qdummy;thennmcli connection modify dummy ipv4.method manual ipv4.addresses$VIP/32elsenmcli connectionaddtypedummy ifname dummy con-name dummy\ipv4.method manual ipv4.addresses$VIP/32finmcli connection up dummy# 关闭 ARP 响应和通告echo1/proc/sys/net/ipv4/conf/all/arp_ignoreecho2/proc/sys/net/ipv4/conf/all/arp_announceecho1/proc/sys/net/ipv4/conf/dummy/arp_ignoreecho2/proc/sys/net/ipv4/conf/dummy/arp_announceechoOK;;stop)echo-nStop LVS Real Server ... nmcli connection delete dummyecho0/proc/sys/net/ipv4/conf/all/arp_ignoreecho0/proc/sys/net/ipv4/conf/all/arp_announceechoOK;;*)echoUsage:$0{start|stop}exit1esac7.6 DR 模式一键脚本Director 端#!/bin/bash# 文件名: lvs_dr.sh# 描述: 配置 LVS Director 的 VIP 和 ipvs 规则VIP10.1.8.100PORT80RS_LIST10.1.8.11 10.1.8.12 10.1.8.13SCHEDULERrr# 可改为 wrr, wlc 等# 安装 ipvsadm若未安装rpm-qipvsadm||yuminstall-yipvsadmcase$1instart)echo-nStart LVS Director Server ... # 绑定 VIP 到 dummy 网卡或物理网卡别名if!ipaddr|grep-q$VIP;thennmcli connection modify ens33 ipv4.addresses$VIP/32 nmcli connection up ens33fi# 清空所有规则ipvsadm-C# 添加虚拟服务ipvsadm-A-t${VIP}:${PORT}-s$SCHEDULER# 添加真实服务器DR 模式 -gforrsin$RS_LIST;doipvsadm-a-t${VIP}:${PORT}-r$rs-gdoneechoOK;;stop)echo-nStop LVS Director Server ... ipvsadm-Cnmcli connection modify ens33-ipv4.addresses$VIP/32 nmcli connection up ens33echoOK;;*)echoUsage:$0{start|stop}exit1esac八、LVS 常用命令速查表命令说明ipvsadm -A -t VIP:port -s rr添加 TCP 虚拟服务调度算法 rripvsadm -a -t VIP:port -r RIP -g添加 DR 模式真实服务器ipvsadm -a -t VIP:port -r RIP -m添加 NAT 模式真实服务器ipvsadm -E -t VIP:port -s wrr修改调度算法为 wrripvsadm -e -t VIP:port -r RIP -w 2修改某 RS 权重为 2ipvsadm -d -t VIP:port -r RIP删除某 RSipvsadm -D -t VIP:port删除整个虚拟服务ipvsadm -C清空所有规则ipvsadm -Ln查看当前规则数字格式ipvsadm -Lcn查看持久连接表ipvsadm-save -n保存规则标准输出九、总结与最佳实践生产环境首选 DR 模式性能最高配置也最复杂需处理 ARP 问题。NAT 模式适合小规模或混合云场景RS 可以私有 IP但 LVS 压力大。调度算法选择长连接服务如数据库 → WLC / LC短连接无状态服务如 HTTP → RR / WRR需要会话保持 → SH源地址哈希或启用持久连接-p高可用LVS 自身需配合 Keepalived 实现主备VRRP否则 LVS 单点故障会导致整个集群不可用。监控建议对 LVS 的ipvsadm -Ln输出、连接数、后端 RS 健康状态进行监控。通过本实验可以完全掌握 LVS 的核心原理和两种主流模式的部署方法为搭建高并发、高可用的 Web 或数据库集群打下坚实基础。