尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

LVS(Linux Virtual Server)负载均衡全解析

LVS(Linux Virtual Server)负载均衡全解析 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 或数据库集群打下坚实基础。
返回列表