LVS负载均衡集群指南
一、什么是集群集群Cluster 是指将多台独立的计算机服务器通过高速网络连接起来协同完成特定任务的计算系统。从外部看整个集群就像一台性能超强的超级计算机。为什么需要集群高可用性HA单点故障时自动切换保证服务7×24小时在线高性能HP将请求分散到多台服务器提升整体处理能力高可扩展性HS通过增加节点即可线性扩展性能二、集群分类根据功能和目标集群主要分为三大类类型英文缩写核心目标典型产品负载均衡集群LBLoad Balancing将请求流量分发到多个后端服务器LVS、Nginx、HAProxy高可用集群HAHigh Availability保证服务持续在线故障自动切换Keepalived、Heartbeat高性能集群HPHigh Performance并行计算解决大规模科学计算问题Hadoop、MPI关系图解三、LVS的作用LVSLinux Virtual Server是Linux内核自带的四层负载均衡软件由章文嵩博士开发现已成为Linux内核标准组件。核心作用请求分发将用户请求按规则分发到后端真实服务器RealServer服务隐藏后端服务器的真实IP对内网可见对外只暴露VIP虚拟IP水平扩展通过增加后端服务器提升服务能力高可用性配合Keepalived实现故障自动切换LVS vs Nginx七层负载对比项LVS四层Nginx七层工作层级传输层TCP/UDP应用层HTTP/HTTPS处理速度极快内核态较快用户态协议支持所有TCP/UDP协议仅HTTP/HTTPS等配置复杂度相对简单灵活但复杂典型场景大流量入口、数据库负载Web应用、API网关四、LVS的4种模式及原理图解LVS通过修改数据包来实现流量转发主要有4种工作模式1. NAT模式网络地址转换原理请求包到达LVS后将目标IPVIP改为RealServer的IPDNATRS处理请求后将响应包发回LVSLVS再将源IP改为VIP后返回客户端SNAT特点优支持端口映射RS可以使用任何操作系统缺进出流量都经过LVS成为瓶颈性能最低需修改IP和端口2. DR模式直接路由-最常用原理LVS和RS必须在同一物理网段二层可达RS的lo接口配置VIP非ARP响应LVS仅修改请求包的目标MAC地址IP和端口不变RS直接响应客户端不经过LVS特点优性能最高响应不走LVS可处理大规模流量缺LVS和RS必须在同一VLANRS需要配置VIP和抑制ARPRS配置示例# 在RS上配置VIP到lo ifconfig lo:0 172.25.254.100 netmask 255.255.255.255 up # 抑制ARP响应 echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce3. TUN模式隧道原理LVS将原始请求包封装在IPIP隧道中发送给RSRS解封装后处理请求直接响应客户端RS需要配置tunl接口和VIP特点优支持跨网段部署响应流量不经过LVS缺有隧道封装开销RS需要支持IPIP隧道4. FULLNAT模式全网络地址转换— 阿里开源原理同时修改源IP和目标IPLVS和RS可以跨网段部署RS默认网关指向LVS的内网IP特点优LVS和RS可跨网段解决了DR模式的网络限制缺进出流量都经过LVS性能折中五、LVS的13种调度算法LVS内核支持丰富的调度算法可分为静态算法和动态算法两类。静态算法不检查RS负载状态算法缩写原理适用场景轮询rr按顺序轮流分配RS性能一致时加权轮询wrr按权重比例分配RS性能有差异时目标地址散列dh同一目标IP固定到同一RS缓存服务器源地址散列sh同一源IP固定到同一RS需要会话保持动态算法检查RS负载状态算法缩写原理适用场景最小连接lc分配给连接数最少的RS长连接服务加权最小连接wlc按权重比例优先给连接数少的通用推荐最短期望延迟sed特殊wlc算法除以权重高性能场景永不排队nqsed优化版无空闲时不排队防止空闲RS等待局部最小连接lblc同一目标IP到同一RS的lc带缓存的Web带复制的局部最小连接lblcr先找目标IP找不到再用lc大规模缓存目标地址散列dh目标IP哈希防火墙集群源地址散列sh源IP哈希会话保持最少队列调度seq等待队列最短的优先算法选择建议# 最常用组合 # 短连接HTTPwlc 或 rr ipvsadm -A -t VIP:80 -s wlc # 长连接数据库lc ipvsadm -A -t VIP:3306 -s lc # 有缓存场景sh源地址哈希 ipvsadm -A -t VIP:80 -s sh六、LVS多端口轮询问题解决方案问题描述当后端服务有多个端口如HTTP的80和HTTPS的443我们需要将两种流量都负载均衡但LVS的传统做法是每个端口单独配置# 80端口 ipvsadm -A -t VIP:80 -s rr ipvsadm -a -t VIP:80 -r RS1:80 -m ipvsadm -a -t VIP:80 -r RS2:80 -m # 443端口 ipvsadm -A -t VIP:443 -s rr ipvsadm -a -t VIP:443 -r RS1:443 -m ipvsadm -a -t VIP:443 -r RS2:443 -m缺端口越多配置越繁琐且无法实现一组RS同时支持多个端口的策略统一。解决方案一防火墙标记FWM利用iptables给多个端口打上相同的防火墙标记LVS基于标记进行调度# 1. 用iptables给80和443端口打标记66 iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 80 -j MARK --set-mark 66 iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 443 -j MARK --set-mark 66 # 2. LVS使用-f指定防火墙标记而非端口 ipvsadm -A -f 66 -s rr # 3. 添加RS使用实际端口 ipvsadm -a -f 66 -r RS1:80 -m ipvsadm -a -f 66 -r RS2:80 -m # 443同理 ipvsadm -a -f 66 -r RS1:443 -m ipvsadm -a -f 66 -r RS2:443 -m优多个端口共享同一组调度策略和会话保持。解决方案二配置文件中统一管理# /etc/sysconfig/ipvsadm 配置示例 -A -f 66 -s wlc -a -f 66 -r 192.168.0.10:80 -m -w 2 -a -f 66 -r 192.168.0.10:443 -m -w 2 -a -f 66 -r 192.168.0.20:80 -m -w 1 -a -f 66 -r 192.168.0.20:443 -m -w 1七、LVS会话粘滞解决方案问题描述会话粘滞Session Sticky用户登录后后续请求必须转发到同一台RS否则会出现未登录或购物车丢失等问题。LVS默认的轮询算法会导致同一用户的请求被分发到不同RS造成会话失效。解决方案方案一源地址哈希sh算法 — 简单有效# 使用源地址哈希同一源IP始终到同一RS ipvsadm -A -t VIP:80 -s sh ipvsadm -a -t VIP:80 -r RS1 -m ipvsadm -a -t VIP:80 -r RS2 -m优点配置简单无额外开销缺点若RS宕机该IP的所有用户都会受影响无法解决NAT网络下多用户共享IP的问题方案二持久连接-p参数# 指定持久超时时间单位秒 ipvsadm -A -t VIP:80 -s rr -p 300 ipvsadm -a -t VIP:80 -r RS1 -m ipvsadm -a -t VIP:80 -r RS2 -m原理LVS在内存中维护一个连接跟踪表记录源IP→选定RS的映射超时时间内同一源IP的请求都发往同一RS。适用配合其他调度算法如wlc使用兼顾负载均衡和会话保持。方案三防火墙标记 持久连接解决多端口会话# 80和443标记为66 iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 80 -j MARK --set-mark 66 iptables -t mangle -A PREROUTING -d VIP -p tcp --dport 443 -j MARK --set-mark 66 # LVS使用标记并开启持久 ipvsadm -A -f 66 -s rr -p 600 ipvsadm -a -f 66 -r RS1 -m ipvsadm -a -f 66 -r RS2 -m效果用户从HTTP跳转到HTTPS时仍然保持在同一台RS不会丢失会话。方案四应用层会话共享终极方案将Session存储在Redis/Memcached等共享缓存中后端RS无论哪台处理都能读取到用户会话。优点彻底解决粘滞问题后端RS可随意扩缩容缺点需要修改应用程序代码八、一键配置脚本实战以下是一个规范化的Bash脚本涵盖了LVS四种模式配置、算法切换、防火墙标记和会话保持等所有核心功能。#!/bin/bash # LVS 四种模式及高级功能完整配置脚本 (重构版) # 适用场景学习/测试 LVS 各项核心配置 # 基于截图内容整理添加了环境检查与逻辑控制 # 1. 基础环境变量 (按需修改) VIP172.25.254.100 RS1172.25.254.10 RS2172.25.254.11 INTERFACEeth0 # 若VIP绑定的网卡名称不一致请修改这里 # 2. 基础环境安装 (所有模式通用) install_env() { echo 开始安装 LVS 基础环境... # 截图中的 yum 或 apt此处用最通用的判断 if command -v yum /dev/null; then yum install -y ipvsadm elif command -v apt /dev/null; then apt update apt install -y ipvsadm else echo 不支持的系统包管理器请手动安装 ipvsadm exit 1 fi # 开启 IP 转发 (NAT 模式必须) echo 1 /proc/sys/net/ipv4/ip_forward echo 环境安装完成。 } # 3. 规则清理 (每次切换模式前执行) clear_rules() { echo 清空所有已有的 LVS 规则和绑定... ipvsadm -C ip addr del $VIP/32 dev $INTERFACE 2/dev/null echo 规则已清空。 } # 4. 四种核心模式配置函数 # 模式 A: NAT 模式 (配置 VIP 在 Director 上后端 RS 网关指向 Director) conf_nat() { clear_rules echo 配置 NAT 模式... ip addr add $VIP/32 dev $INTERFACE ipvsadm -A -t $VIP:80 -s rr ipvsadm -a -t $VIP:80 -r $RS1:80 -m ipvsadm -a -t $VIP:80 -r $RS2:80 -m # NAT 模式下后端 RS 的网关必须指向 Director 的 DIP需在 RS 手动配置 echo 注意NAT 模式请确保 RS 的默认网关指向本机内网 IP。 } # 模式 B: DR 模式 (企业常用VIP 绑定在 Lo 网卡抑制 ARP) conf_dr() { clear_rules echo 配置 DR 模式... # Director 上绑定 VIP ip addr add $VIP/32 dev $INTERFACE ipvsadm -A -t $VIP:80 -s rr ipvsadm -a -t $VIP:80 -r $RS1:80 -g ipvsadm -a -t $VIP:80 -r $RS2:80 -g echo 注意DR 模式需要在 RS 上执行以下命令 echo ip addr add $VIP/32 dev lo:0 echo echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore echo echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce echo echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore echo echo 2 /proc/sys/net/ipv4/conf/all/arp_announce } # 模式 C: TUN 模式 (IP 隧道) conf_tun() { clear_rules echo 配置 TUN (隧道) 模式... ip addr add $VIP/32 dev $INTERFACE ipvsadm -A -t $VIP:80 -s rr ipvsadm -a -t $VIP:80 -r $RS1:80 -i ipvsadm -a -t $VIP:80 -r $RS2:80 -i echo 注意TUN 模式需要 RS 支持隧道并配置 tunl0。 } # 模式 D: FULLNAT 模式 conf_fullnat() { clear_rules echo 配置 FULLNAT 模式 (需内核支持)... ip addr add $VIP/32 dev $INTERFACE ipvsadm -A -t $VIP:80 -s rr ipvsadm -a -t $VIP:80 -r $RS1:80 -f ipvsadm -a -t $VIP:80 -r $RS2:80 -f echo 注意FULLNAT 需要特殊的内核补丁 (如 LVS 全 NAT 版本)。 } # 5. 调度算法切换 (常用: 轮询 rr / 加权 wlc) # 用法示例change_algo wlc change_algo() { local new_algo$1 echo 正在将调度算法切换为: $new_algo # 需要先用 -E 编辑虚拟服务来修改调度算法 ipvsadm -E -t $VIP:80 -s $new_algo # 用 -e 编辑真实服务器保持后端权重等属性 ipvsadm -e -t $VIP:80 -r $RS1:80 -m -w 1 ipvsadm -e -t $VIP:80 -r $RS2:80 -m -w 2 echo 算法切换完成。 } # 6. 端口轮询 / FWMARK (防火墙标记) # 示例标记 80 和 443 为一组 conf_fwmark() { clear_rules echo 配置 FWMARK 标准解决多端口轮询问题... # 1. 配置 iptables 进行端口标记 iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 10 iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 10 # 2. 配置 LVS 按 FWMARK 转发 ipvsadm -A -f 10 -s rr ipvsadm -a -f 10 -r $RS1:80 -m ipvsadm -a -f 10 -r $RS2:80 -m echo FWMARK 配置完成。 } # 7. 会话保持 (粘滞 Persistent) # 方案 1: SH (源地址哈希) conf_sh_affinity() { clear_rules echo 配置 SH 哈希会话保持... ipvsadm -A -t $VIP:80 -s sh ipvsadm -a -t $VIP:80 -r $RS1:80 -g -w 1 ipvsadm -a -t $VIP:80 -r $RS2:80 -g -w 2 } # 方案 2: 持久化超时 (LVS 原生) conf_timeout_persistence() { clear_rules local persist_time300 # 设置 300 秒持久化 echo 配置 LVS 持久化超时 ($persist_time 秒)... ipvsadm -A -t $VIP:80 -s rr -p $persist_time ipvsadm -a -t $VIP:80 -r $RS1:80 -m ipvsadm -a -t $VIP:80 -r $RS2:80 -m } # 方案 3: Redis 共享会话 (仅提示LVS 只负责转发) conf_redis_session() { echo Redis 共享会话方案 (无需修改 LVS) echo 此方案不依赖 LVS 配置而是修改后端 Web 应用 (如 PHP/Java) 的 Session 存储。 echo LVS 无需特意配置持久化只需用轮询 rr/wlc应用层通过 Redis 共享 Session 即可。 echo 这样故障时也无需担心 Session 丢失。 } # 8. 策略保存与开机自启 save_rules() { echo 保存当前 LVS 规则... ipvsadm-save /etc/sysconfig/ipvsadm echo 规则已保存至 /etc/sysconfig/ipvsadm echo 启用开机自启动... systemctl enable ipvsadm --now 2/dev/null || echo 请手动执行: systemctl enable ipvsadm } # 9. 查看当前规则 show_rules() { echo 当前 LVS 配置: ipvsadm -Ln echo 连接统计: ipvsadm -Ln --stats } # 10. 使用示例菜单 show_menu() { echo LVS 一键配置脚本菜单 echo 1. 安装基础环境 echo 2. 配置 NAT 模式 echo 3. 配置 DR 模式 echo 4. 配置 TUN 模式 echo 5. 配置 FULLNAT 模式 echo 6. 切换调度算法 (需指定算法名) echo 7. 配置 FWMARK 多端口负载均衡 echo 8. 配置 SH 源地址哈希会话保持 echo 9. 配置持久连接会话保持 echo 10. 保存规则并设置开机自启 echo 11. 查看当前规则 echo 12. 清空所有规则 echo 0. 退出 } # 主程序 (支持命令行参数和交互菜单) main() { # 如果带了参数直接执行对应功能 case $1 in install) install_env ;; nat) conf_nat ;; dr) conf_dr ;; tun) conf_tun ;; fullnat) conf_fullnat ;; algo) change_algo $2 ;; fwmark) conf_fwmark ;; sh) conf_sh_affinity ;; persist) conf_timeout_persistence ;; save) save_rules ;; show) show_rules ;; clear) clear_rules ;; *) # 没有参数则显示交互菜单 while true; do show_menu read -p 请输入选项编号: choice case $choice in 1) install_env ;; 2) conf_nat ;; 3) conf_dr ;; 4) conf_tun ;; 5) conf_fullnat ;; 6) read -p 请输入算法名 (rr/wlc/wrr/sed/nq等): algo; change_algo $algo ;; 7) conf_fwmark ;; 8) conf_sh_affinity ;; 9) conf_timeout_persistence ;; 10) save_rules ;; 11) show_rules ;; 12) clear_rules ;; 0) echo 退出...; exit 0 ;; *) echo 无效选项请重新输入 ;; esac echo done ;; esac } # 执行主程序 main $

相关新闻

STM32驱动OLED进阶指南:从基础显示到动态图与动画实现

STM32驱动OLED进阶指南:从基础显示到动态图与动画实现

1. 项目概述:为什么STM32与OLED是绝配?玩过单片机开发的朋友,尤其是从51、Arduino转到STM32的,肯定都经历过一个阶段:想让手里的板子“说点啥”,显示点信息。数码管太简陋,LCD1602字符型又不够酷…

2026/7/29 11:46:18 阅读更多 →
SpringBoot高校就业管理系统设计与实现

SpringBoot高校就业管理系统设计与实现

1. 项目概述毕业就业信息管理系统是高校信息化建设中的重要组成部分,它直接关系到毕业生就业工作的效率和质量。这个基于SpringBoot的系统设计,主要解决传统就业信息管理中存在的数据分散、统计困难、流程繁琐等问题。我在实际开发中发现,一个…

2026/7/29 11:45:18 阅读更多 →
Scroll Reverser终极指南:彻底解决Mac触控板与鼠标滚动方向冲突

Scroll Reverser终极指南:彻底解决Mac触控板与鼠标滚动方向冲突

Scroll Reverser终极指南:彻底解决Mac触控板与鼠标滚动方向冲突 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你是否曾经在MacBook触控板上习惯性地向上滑动浏览网…

2026/7/29 11:45:18 阅读更多 →

最新新闻

终极免费激活指南:KMS智能激活工具完整使用教程

终极免费激活指南:KMS智能激活工具完整使用教程

终极免费激活指南:KMS智能激活工具完整使用教程 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活和Office办公软件激活而烦恼吗?KMS_VL_ALL_AIO是一…

2026/7/29 11:56:23 阅读更多 →
小白也能懂的 ML.NET:手把手带你落地第一个 AI 功能

小白也能懂的 ML.NET:手把手带你落地第一个 AI 功能

经常有刚入行的.NET朋友问我:想做点AI相关的功能,是不是必须先学Python?数学不好是不是就入不了门? 其实真不是。对于绝大多数业务场景的AI需求——比如判断用户会不会流失、预测产品合不合格、给工单自动分类,我们完全…

2026/7/29 11:56:23 阅读更多 →
产品经理 开需求会:2026年3款VIVO录音转文字哪个更好用

产品经理 开需求会:2026年3款VIVO录音转文字哪个更好用

按人群先给建议 针对2026年VIVO机型上的三款录音转文字工具,我们不做单一万能排名,按场景给明确结论:如果只要基础免费转写,优先选系统自带的录音转文字助手;如果是开发者需要集成转写能力,可考虑Assembly…

2026/7/29 11:56:23 阅读更多 →
Neo4j与Docker容器化部署实战指南

Neo4j与Docker容器化部署实战指南

1. Neo4j与Docker的黄金组合在数据爆炸式增长的时代,图数据库凭借其强大的关联数据处理能力脱颖而出。作为图数据库领域的标杆产品,Neo4j通过节点、关系和属性来存储数据,特别适合处理复杂的关系网络。而Docker作为轻量级的容器化技术&#x…

2026/7/29 11:56:23 阅读更多 →
免费下载Sketchfab 3D模型的终极指南:Firefox用户脚本完整教程

免费下载Sketchfab 3D模型的终极指南:Firefox用户脚本完整教程

免费下载Sketchfab 3D模型的终极指南:Firefox用户脚本完整教程 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 想要免费获取Sketchfab平台上的高质量3D…

2026/7/29 11:56:23 阅读更多 →
LinkSwift网盘直链助手:九大平台文件下载的终极解决方案

LinkSwift网盘直链助手:九大平台文件下载的终极解决方案

LinkSwift网盘直链助手:九大平台文件下载的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…

2026/7/29 11:55:22 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻