
一、什么是集群集群是指将多台独立的计算机节点通过网络连接协同完成特定任务对外表现为一个统一的服务实体。其核心目标是高可用性HA单点故障不影响整体服务避免服务中断。高性能Performance聚合多机算力提升系统整体吞吐量与并发能力。可伸缩性Scalability可根据业务负载按需动态增减节点灵活扩容。二、集群分类根据集群的核心功能与应用场景可将集群分为以下四类类别英文核心目的典型应用 / 工具负载均衡集群LBLoad Balancing将请求均匀分散到多台后端服务器分摊压力提高并发能力LVS、Nginx、HAProxy高可用性集群HAHigh Availability保证服务不间断运行节点故障时自动切换流量避免单点故障Keepalived、Heartbeat高性能计算集群HPCHigh Performance Computing将大规模计算任务并行拆分到多节点完成超算任务MPI、Slurm存储集群Storage Cluster提供高可用的共享存储或分布式文件系统保证数据可靠性Ceph、GlusterFSLVS 属于负载均衡集群在生产环境中常与 HA 集群如 Keepalived结合实现高可用的负载均衡服务。三、LVS 的作用LVSLinux Virtual Server是 Linux 内核内置的四层传输层负载均衡器由章文嵩博士发起现已成为 Linux 内核标准模块。它的核心作用包括请求分发根据预设的调度算法将客户端的请求转发给后端的真实服务器Real Server简称 RS实现负载分摊。服务屏蔽后端 RS 对客户端完全透明客户端仅需与 LVS 提供的虚拟 IPVIP通信无需感知后端集群的节点变化。高性能扩展工作在内核态转发性能极高可支撑十万、百万级的高并发请求突破单服务器的性能瓶颈。故障容错配合 Keepalived 等工具可自动检测后端 RS 的健康状态自动剔除故障、宕机的节点保障服务的稳定性。四、LVS 四种工作模式及原理LVS 提供了四种不同的转发模式以适配不同的网络环境与业务需求以下是详细说明与图解1. NAT 模式VS-NAT网络地址转换模式核心原理 调度器充当后端 RS 的网关对数据包进行地址转换客户端请求到达调度器时调度器执行DNAT将数据包的目标 IP / 端口从 VIP 转换为选中 RS 的 RIP / 端口。RS 处理完请求后响应数据包返回给调度器调度器执行SNAT将响应包的源 IP 从 RIP 转换为 VIP再返回给客户端。数据流客户端 → DSDNAT→ RS → DSSNAT→ 客户端特点支持端口映射可实现端口转发。请求与响应的所有数据包都必须经过调度器调度器容易成为性能瓶颈。后端 RS 的网关必须指向调度器的内网 IP。简易配置步骤1.开启内核转发 echo 1 /proc/sys/net/ipv4/ip_forward2.创建虚拟服务使用轮询算法 ipvsadm -A -t 192.168.1.100:80 -s rr3.添加后端RS指定NAT模式(-m) ipvsadm -a -t 192.168.1.100:80 -r 10.0.0.10:80 -m ipvsadm -a -t 192.168.1.100:80 -r 10.0.0.11:80 -m2. DR 模式Direct Routing直接路由模式生产最常用核心原理 调度器仅修改数据包的二层 MAC 地址将目标 MAC 改为选中 RS 的网卡 MAC而 IP 层的源 IP、目标 IP 完全不变。 RS 收到数据包后处理请求然后直接将响应数据包返回给客户端响应报文不再经过调度器。数据流客户端 → DS (修改 MAC) → RS → 客户端特点响应数据不经过调度器极大降低了调度器的负载性能是四种模式中最高的。要求调度器与 RS 必须在同一广播域同一局域网。RS 需要在本地 lo 网卡绑定 VIP32 位掩码并抑制 ARP 响应避免 ARP 冲突。简易配置步骤DS调度器配置 ipvsadm -A -t 192.168.1.100:80 -s wrr ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20:80 -g # RS后端服务器配置 # 1. lo网卡绑定VIP ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 # 2. 抑制ARP响应 echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce3. TUN 模式VS-TUNIP 隧道模式核心原理 调度器不修改原始的 IP 数据包而是在原始数据包的外层新增一层 IP 隧道头部将数据包封装后转发给 RS。 RS 收到数据包后解封装得到原始的请求包处理完成后直接将响应返回给客户端无需经过调度器。数据流客户端 → DS (IP 封装) → RS (解包) → 客户端特点支持调度器与 RS 跨网段部署可实现跨机房的负载均衡。RS 需要支持 IPIP 隧道协议。响应数据同样不经过调度器性能较高但存在隧道封装的额外开销。4. FULLNAT 模式完整 NAT阿里扩展模式核心原理 这是对标准 NAT 模式的扩展同时修改数据包的源 IP 和目标 IP请求包客户端 CIP → 调度器 DIPVIP → RS 的 RIP。响应包RS 的 RIP → 调度器 DIPDIP → 客户端 CIP。四种模式的对比模式修改内容响应路径支持跨网段性能NAT目标 IP 端口经过 DS支持低DR目标 MAC直达客户端不支持极高TUNIP 封装包头直达客户端支持高FullNAT源 IP 目标 IP经过 DS支持中五、LVS 的 13 种调度算法LVS 的 IPVS 模块提供了多种调度算法用于根据不同的规则选择后端 RS以下是完整的 13 种算法说明序号算法名称缩写说明内核标准支持1轮询RR依次轮流将请求分配给各个 RS均匀分配不考虑服务器负载✅2加权轮询WRR根据 RS 的权重按比例分配请求性能更高的服务器可配置更高权重承担更多请求✅3最少连接LC将请求分配给当前已建立连接数最少的 RS优先分摊空闲节点的负载✅4加权最少连接WLC结合权重与连接数综合计算是 LVS 的默认调度算法适配性能不均的服务器✅5基于局部性的最少连接LBLC针对目标 IP 的负载均衡常用于缓存集群保证同一目标 IP 的请求优先分配到同一缓存节点✅6带复制的基于局部性最少连接LBLCRLBLC 的改进版可将热门目标的请求复制到多个节点避免单节点过载✅7目标地址散列DH根据目标 IP 的哈希值选择 RS用于正向代理场景保证同一目标的请求转发到固定节点✅8源地址散列SH根据源 IP 的哈希值选择 RS可实现简单的会话粘滞同一客户端的请求固定到同一 RS✅9最短预期延迟SED计算节点的预期延迟(活跃连接数 1)/ 权重选择延迟最低的节点优先分配给高性能节点✅10永不排队NQSED 的改进版若存在空闲节点则直接分配请求否则按 SED 规则调度避免低权重节点长期空闲✅11随机RANDOM随机选择后端 RS早期版本支持现已被更优算法替代❌12加权随机WRANDOM带权重的随机选择早期版本支持现已被更优算法替代❌13增强型最小连接-最小连接调度的变体部分资料单独列出实际与标准 LC/WLC 功能重合❌说明当前 Linux 4.x 内核仅支持前 10 种标准算法后 3 种为历史版本或资料扩展的分类。六、LVS 多端口轮询问题解决方案1. 问题现象默认情况下LVS 会将VIP:80HTTP和VIP:443HTTPS识别为两个独立的虚拟服务两个服务的轮询计数器是独立维护的彼此没有关联。 这会导致用户访问 HTTP 的 80 端口时被调度到 RS1随后跳转到 HTTPS 的 443 端口时被调度到 RS2导致用户的会话数据丢失需要重新登录。2. 解决方案防火墙标记FWMARK核心原理 利用 iptables 的标记功能将 VIP 的多个端口的数据包打上同一个标记然后 LVS 基于这个标记创建统一的虚拟服务不再区分具体的端口将多个端口的流量纳入同一个调度规则中。完整配置步骤1. iptables给80、443端口的流量统一打上标记666 iptables -t mangle -A PREROUTING -d 192.168.1.100 -p tcp --dport 80 -j MARK --set-mark 666 iptables -t mangle -A PREROUTING -d 192.168.1.100 -p tcp --dport 443 -j MARK --set-mark 666 # 2. ipvs基于标记创建虚拟服务不再指定端口 ipvsadm -A -f 666 -s wrr # 3. 添加后端RS ipvsadm -a -f 666 -r 192.168.1.20 -g ipvsadm -a -f 666 -r 192.168.1.21 -g配置完成后同一客户端访问 80 和 443 端口的流量会被纳入同一个调度规则保证分配到同一台 RS解决会话丢失问题。七、LVS 的会话粘滞解决方案1. 问题描述默认的无状态调度算法如 RR 轮询会将同一用户的不同请求随机分发到不同的 RS。如果后端 RS 维护了用户的会话Session数据比如登录状态、购物车信息就会导致用户的请求到了新的 RS 后找不到会话数据需要重新登录也就是会话丢失。会话粘滞Session Stickiness就是要将同一个客户端的所有请求在一定时间内固定到同一台 RS保证会话状态不中断。2. 解决方案方案 1持久连接Persistent推荐使用 ipvs 的-p参数开启持久连接同一源 IP 的所有请求在指定的超时时间内都会固定分配到首次选中的 RS超时时间可自定义。开启持久连接超时时间3600秒1小时 ipvsadm -A -t 192.168.1.100:80 -p 3600 -s rr方案 2源地址散列算法SH直接使用 SH 调度算法根据源 IP 的哈希值直接选择固定的 RS无需超时配置同一 IP 的请求永远固定到同一 RS。ipvsadm -A -t 192.168.1.100:80 -s sh缺点无法结合权重调整负载可能导致部分 IP 段的请求集中到某台 RS造成负载不均。方案 3应用层会话共享在应用层解决后端 RS 使用共享的会话存储如 Redis、Memcached存储 Session 数据无论请求转发到哪台 RS都可以从共享存储中读取会话数据彻底解耦会话与 RS 节点是生产环境的推荐方案。方案 4结合 Keepalived 的持久性在 Keepalived 的配置中设置persistence_timeout参数效果与ipvsadm -p完全一致可统一管理高可用与会话粘滞。3. 完整实践步骤DR 模式部署带会话粘滞的负载均衡环境规划 # LVS调度器IP: 192.168.1.100VIP: 192.168.1.200 # RS1: 192.168.1.10RS2: 192.168.1.11 # ---------- 步骤1: 在LVS上配置VIP ---------- ifconfig eth0:0 192.168.1.200 netmask 255.255.255.255 up route add -host 192.168.1.200 dev eth0:0 # ---------- 步骤2: 开启内核转发 ---------- echo 1 /proc/sys/net/ipv4/ip_forward # ---------- 步骤3: 在RS上配置VIP与ARP抑制 ---------- # 编辑sysctl.conf添加配置 net.ipv4.conf.lo.arp_ignore 1 net.ipv4.conf.lo.arp_announce 2 net.ipv4.conf.all.arp_ignore 1 net.ipv4.conf.all.arp_announce 2 # 应用配置 sysctl -p # 绑定VIP到lo ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 up # ---------- 步骤4: 配置LVS虚拟服务开启会话粘滞 ---------- # 使用WLC算法开启600秒的持久连接 ipvsadm -A -t 192.168.1.200:80 -p 600 -s wlc # 添加RSDR模式(-g)设置权重 ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.10:80 -g -w 1 ipvsadm -a -t 192.168.1.200:80 -r 192.168.1.11:80 -g -w 2 # ---------- 步骤5: 验证 ---------- ipvsadm -Ln # 客户端访问VIP多次刷新验证会话保持与负载均衡八、总结知识点核心要点集群多节点协同工作对外提供统一服务实现高可用、高性能、可伸缩集群分类负载均衡、高可用、高性能计算、存储四类LVS 属于负载均衡集群LVS 作用内核态四层负载均衡实现请求分发、服务透明、高性能扩展、故障容错四种模式NAT地址转换、DR直接路由生产常用、TUNIP 隧道、FULLNAT双向 NAT调度算法内核支持 10 种标准算法常用 RR、WRR、WLC、SH 等可适配不同业务场景多端口轮询使用防火墙标记 FWMARK将多端口流量纳入统一调度解决 HTTP/HTTPS 调度分裂问题会话粘滞可通过持久连接、SH 算法、应用层共享会话等方案实现保证用户会话不中断