一、什么是集群Cluster随着互联网的发展越来越多的网站每天需要处理成千上万甚至数百万用户的访问。如果只有一台服务器当访问量过大时就会出现服务器响应缓慢甚至宕机的问题。为了提高服务器的性能、可靠性和可用性人们将多台服务器组合在一起共同对外提供服务这种技术称为集群Cluster。简单来说集群就是由多台服务器共同完成同一项服务对用户来说就像访问一台服务器一样。集群具有以下优点提高系统性能提高系统稳定性提高系统可扩展性提高系统可靠性避免单点故障例如用户 │ ▼ 负载均衡服务器 │ │ ▼ ▼ Web服务器1 Web服务器2 │ │ └──数据库──┘用户访问网站时不需要知道后端有多少台服务器只需要访问一个IP地址即可。二、集群的分类集群根据用途不同可以分为三种。1、负载均衡集群Load Balance Cluster负载均衡集群用于解决服务器压力过大的问题。工作原理当大量用户访问网站时请求首先到达负载均衡服务器再由负载均衡服务器按照一定算法将请求分配给后端多台服务器。例如Client │ ▼ ---------------- | LVS/Nginx | ---------------- │ │ │ ▼ ▼ ▼ Web1 Web2 Web3特点提高并发能力提高访问速度防止单台服务器压力过大典型软件LVSHAProxyNginx2、高可用集群High Availability高可用集群主要解决服务器宕机的问题。例如主服务器 │ Keepalived │ 备用服务器当主服务器发生故障时备用服务器自动接管业务实现业务不中断。特点自动故障切换服务连续运行提高系统可靠性常见软件KeepalivedHeartbeatPacemaker3、高性能计算集群High Performance Computing高性能计算集群主要用于大量计算。例如科学计算人工智能深度学习天气预报基因分析工作方式大型任务 │ 拆分成多个小任务 │ 多台服务器同时计算 │ 合并计算结果特点运算速度快CPU利用率高常用于科研领域三、LVS简介什么是LVSLVSLinux Virtual Server是Linux平台上一款高性能、高可用的负载均衡软件。它工作在OSI七层模型中的第四层传输层根据IP地址和端口号对数据进行转发因此效率非常高。LVS本身不处理网页内容只负责把客户端请求分发到后端真实服务器Real Server。工作流程如下Client │ ▼ VIP虚拟IP │ ▼ LVS Director │ ┌──────┬──────┐ ▼ ▼ ▼ RS1 RS2 RS3LVS的组成一个完整的LVS集群主要包括三个部分。1、Client客户端用户访问网站的设备可以是电脑、手机等。例如浏览器 curl APP2、Director Server调度器Director Server就是LVS服务器。主要作用接收客户端请求根据调度算法选择服务器将请求转发给Real Server它相当于整个集群的大脑。3、Real Server真实服务器Real Server是真正提供Web服务的服务器。例如Web01 Web02 Web03这些服务器通常运行ApacheNginxTomcatPHPJava四、LVS的作用LVS主要具有以下作用1、负载均衡将大量用户请求平均分配给多台服务器。例如用户1 → Web01 用户2 → Web02 用户3 → Web03这样可以避免某一台服务器压力过大。2、提高系统性能假设每台服务器每秒可处理1000个请求。如果部署3台服务器1000 × 3 3000 QPS整体性能提升约3倍。3、提高可靠性当某台服务器故障时Web01故障 Web02正常 Web03正常LVS会自动停止向故障服务器分配请求保证业务继续运行。4、便于扩展如果业务访问量增加只需要新增服务器即可。例如原来 Web01 Web02 增加 Web03 Web04无需修改客户端配置。LVS的优点开源免费性能高可支持百万级并发连接工作在四层转发效率高支持多种负载均衡算法支持健康检查可与Keepalived结合实现高可用广泛应用于互联网企业五、LVS的四种工作模式及原理LVS目前常见有四种工作模式分别是工作模式英文性能是否修改IP使用场景NAT模式LVS-NAT★★修改源IP、目标IP小型网络DR模式LVS-DR★★★★★修改MAC地址企业最常用TUN模式LVS-TUN★★★★IP隧道封装跨地区部署FULLNAT模式LVS-FULLNAT★★★★★双向NAT云平台、大规模集群5.1 NAT模式Network Address Translation工作原理客户端访问VIP后请求先到达LVS服务器。LVS修改目标IP地址将数据包发送到后端Real Server。Real Server处理完成后再把数据返回给LVS。最后LVS再返回给客户端。整个通信过程如下Client │ ▼ VIP192.168.100.100 │ ▼ ------------- | LVS | ------------- │ 修改目标IP地址 │ ┌─────────┴─────────┐ ▼ ▼ ----------- ----------- | Web01 | | Web02 | ----------- ----------- │ │ └─────────┬─────────┘ │ 返回LVS │ ▼ ClientNAT模式特点优点配置简单Real Server无需公网IP部署方便缺点所有流量都经过LVSLVS容易成为性能瓶颈不适合大型网站适用场景小型企业实验环境学习环境5.2 DR模式Direct RoutingDR模式是企业中使用最多的一种模式。工作原理客户端访问VIP。LVS只修改数据包的MAC地址。数据直接发送给Real Server。Real Server收到请求后直接回复客户端不再经过LVS。流程如下Client │ ▼ VIP │ ▼ -------------- | LVS | -------------- │ │ ▼ ▼ Web01 Web02 │ │ └────┬────┘ │ ▼ Client返回数据Web01 ---------- Client Web02 ---------- ClientDR模式特点优点返回流量不经过LVS性能最高企业最常用可支持百万并发缺点Real Server必须配置VIP同一局域网内使用配置相对复杂适用场景大型互联网公司Web集群企业生产环境5.3 TUN模式IP TunnelTUN模式采用IP隧道技术。LVS收到客户端请求后将数据包封装后发送到远程服务器。服务器解封装后处理请求并直接返回客户端。原理如下Client │ ▼ LVS │ IP Tunnel ═══════════════ │ ▼ Remote Server │ ▼ ClientTUN模式特点优点支持跨地域部署返回流量不经过LVS性能高缺点配置复杂Real Server必须支持IP Tunnel使用较少适用场景异地机房跨地区负载均衡5.4 FULLNAT模式FULLNAT是在NAT模式基础上的增强版。客户端请求进入LVS后不仅修改目标IP还修改源IP。因此Real Server无需知道客户端真实地址。工作流程Client │ ▼ LVS 修改源IP 修改目标IP │ ▼ Real Server │ ▼ LVS │ ▼ ClientFULLNAT特点优点部署灵活支持跨网段支持云计算平台扩展性强缺点配置较复杂对内核要求较高四种模式对比模式返回数据经过LVS性能常用程度NAT是★★★★DR否★★★★★★★★★★TUN否★★★★★★FULLNAT是★★★★★★★★★六、LVS的13种调度算法LVS支持13种负载均衡算法不同算法适用于不同业务场景。1、RRRound Robin轮询按照顺序依次分配请求。例如用户1 → Web01 用户2 → Web02 用户3 → Web03 用户4 → Web01特点简单每台服务器机会均等不考虑服务器性能2、WRRWeighted Round Robin加权轮询根据权重分配请求。例如Web01 weight3 Web02 weight2 Web03 weight1分配结果Web01 Web01 Web01 Web02 Web02 Web03适用于服务器性能不同的场景。3、LCLeast Connection最少连接优先把请求分配给连接数最少的服务器。例如Web01 当前连接50 Web02 当前连接20 Web03 当前连接10下一位用户→ Web03适用于连接持续时间较长的业务如数据库、长连接。4、WLCWeighted Least Connection加权最少连接在最少连接基础上加入权重。性能高的服务器可承担更多连接。这是企业中使用非常广泛的一种算法。5、LBLCLocality-Based Least Connection基于局部性的最少连接算法。主要用于缓存服务器如Web Cache会尽量将访问同一目标地址的请求分配到同一台服务器提高缓存命中率。6、LBLCRLocality-Based Least Connection with ReplicationLBLC的改进版。当服务器压力过大时会自动复制热点数据到其他服务器提高访问效率。7、DHDestination Hashing目标地址哈希。根据目标IP进行哈希计算相同目标地址的请求始终分配到同一台服务器。适用于缓存集群。8、SHSource Hashing源地址哈希。根据客户端IP进行哈希计算同一客户端通常访问同一台服务器。常用于需要保持用户状态的业务。9、SEDShortest Expected Delay最短期望延迟算法。综合考虑服务器当前连接数和权重将请求分配给预计响应最快的服务器。10、NQNever Queue永不排队算法。如果有空闲服务器则立即分配若全部繁忙再按SED算法处理。适合高并发业务。11、FOFail Over故障转移算法。优先使用指定服务器当其不可用时自动切换到其他服务器。12、OVFOverflow溢出算法。优先将请求发送到主服务器当主服务器达到设定连接数后再将新请求分配给其他服务器。13、MHMaglev Hashing一致性哈希算法Maglev。能够在服务器增加或减少时尽量减少请求重新分配广泛用于大型云平台和容器集群。13种算法总结算法中文名称适用场景RR轮询服务器性能相同WRR加权轮询性能不同LC最少连接长连接业务WLC加权最少连接企业生产环境LBLC基于局部性的最少连接缓存服务器LBLCR带复制的局部性最少连接热点缓存DH目标地址哈希缓存集群SH源地址哈希会话保持SED最短期望延迟高并发NQ永不排队高并发低延迟FO故障转移主备架构OVF溢出主服务器优先MHMaglev哈希云计算、Kubernetes七、LVS多端口轮询问题解决方案1、什么是多端口轮询问题在实际生产环境中一个网站通常不仅提供 HTTP80服务还可能同时提供 HTTPS443、FTP21、SSH22等多个端口。例如VIP192.168.100.100 80 → Web集群 443 → HTTPS集群 3306 → MySQL如果每个端口都单独配置LVS规则会导致配置繁琐修改困难管理复杂容易出错例如ipvsadm -A -t 192.168.100.100:80 -s rr ipvsadm -A -t 192.168.100.100:443 -s rr ipvsadm -A -t 192.168.100.100:8080 -s rr当端口很多时需要重复编写大量配置。2、解决方案一使用防火墙Firewall MarkFWMLVS支持**Firewall Mark防火墙标记**功能。其原理是先使用iptables或nftables为多个端口打上相同的标记Mark然后LVS根据该标记统一进行负载均衡。流程如下Client │ ▼ 80端口 443端口 8080端口 │ iptables打Mark10 │ ▼ LVS │ ▼ Web01 Web02例如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然后创建LVS规则ipvsadm -A -f 10 -s rr ipvsadm -a -f 10 -r 192.168.100.11 -g ipvsadm -a -f 10 -r 192.168.100.12 -g这样80、443等多个端口都共享同一套负载均衡规则。3、解决方案二Keepalived配置Keepalived支持在配置文件中统一管理多个虚拟服务。例如virtual_server 192.168.100.100 80 { } virtual_server 192.168.100.100 443 { }优点配置简单易维护支持健康检查自动同步LVS规则因此在企业中通常会结合Keepalived进行管理。八、LVS会话粘滞Session Persistence解决方案1、什么是会话粘滞很多网站登录后用户信息保存在服务器内存中。例如用户登录到Web01Client │ 登录成功 │ Web01下一次请求如果被LVS分配到Web02Client │ ▼ Web02由于Web02没有用户登录信息就会提示请重新登录这种现象称为会话丢失。2、解决方案一Session保持PersistenceLVS支持会话保持。例如ipvsadm -A -t 192.168.100.100:80 -s rr -p 300其中-p 300表示300秒内同一个客户端始终访问同一台服务器。例如ClientA 第一次 → Web01 第二次 → Web01 第三次 → Web01这样登录信息不会丢失。3、解决方案二Source HashSH采用源地址哈希算法。同一个客户端IP始终访问同一台服务器。例如192.168.1.10 ↓ Hash ↓ Web02特点不需要Session同步简单高效企业使用较多4、解决方案三Session共享所有Web服务器共享Session。例如Redis Session ┌────┴─────┐ │ │ Web01 Web02或者Memcached NFS共享 数据库共享这样即使请求切换到其他服务器也能读取相同的Session数据。目前企业中最常用的是RedisSpring SessionTomcat Session共享九、LVS Keepalived高可用为什么需要KeepalivedLVS只有一台时存在单点故障问题。例如Client ↓ LVS ↓ Web集群如果LVS宕机整个网站将无法访问。因此需要Keepalived实现双机热备。Keepalived工作原理Keepalived通过VRRP协议实现主备切换。正常情况下VIP │ Master LVS │ Backup LVS当Master发生故障VIP │ Backup LVSVIP自动漂移到备用服务器。整个过程用户几乎无感知。Keepalived优点自动故障切换自动恢复支持健康检查管理LVS配置提高系统可用性十、LVS实验环境主机IP地址作用Client192.168.100.10客户端LVS192.168.100.100负载均衡器Web01192.168.100.11Web服务器Web02192.168.100.12Web服务器十一、实验步骤1、安装LVSdnf install ipvsadm -y查看版本ipvsadm -v2、添加VIPip addr add 192.168.100.100/24 dev ens160查看ip addr3、创建虚拟服务使用轮询算法ipvsadm -A -t 192.168.100.100:80 -s rr4、添加Real Serveripvsadm -a -t 192.168.100.100:80 -r 192.168.100.11 -g ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.12 -g5、查看规则ipvsadm -Ln示例输出TCP 192.168.100.100:80 rr - 192.168.100.11 Route - 192.168.100.12 Route6、验证负载均衡客户端连续访问VIPcurl http://192.168.100.100多次访问结果Welcome Web01 Welcome Web02 Welcome Web01 Welcome Web02说明轮询算法生效。十二、总结LVS是Linux平台最经典的四层负载均衡软件具有高性能、低资源消耗和高可靠性的特点。通过合理选择工作模式NAT、DR、TUN、FULLNAT和调度算法如RR、WLC等可以有效提升系统的并发处理能力。同时结合Keepalived实现高可用可以避免单点故障保证业务连续运行。在企业生产环境中LVS Keepalived Nginx/Apache是一种成熟且广泛应用的负载均衡解决方案。