LVS总结

发布时间:2026/7/30 3:32:43
LVS总结 什么是集群Cluster:集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统集群分类LBLoadBalancing负载均衡由多个主机组成每个主机只承担一部分访问HAHigh Availiablity高可用SPOFsingle Point Of failure MTBF:Mean Time Between Failure 平均无故障时间正常时间 MTTR:Mean Time To Restoration repair平均恢复前时间故障时间 AMTBF/MTBFMTTR (0,1)99%, 99.5%, 99.9%, 99.99%, 99.999%SLAService level agreement服务等级协议是在一定开销下为保障服务的性能和可用性服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在常规的领域中总是设定所谓的三个9四个9来进行表示当没有达到这种水平的时候就会有一些列的惩罚措施而运维最主要的目标就是达成这种服务水平。 停机时间又分为两种一种是计划内停机时间一种是计划外停机时间而运维则主要关注计划外停机时间HPCHigh-performance computing高性能计算国家战略资源不在课程范围内lvs的作用LVS:Linux Virtual Server负载调度器内核集成章文嵩阿里的四层SLB(Server LoadBalance)是基于LVSkeepalived实现lvs的4种模式及原理1.NAT 模式原理通过网络地址转换技术实现负载均衡。调度器接收到客户端请求后将数据包的目标 IP 地址VIP修改为选定的 RS 的 RIP将请求转发给后端真实服务器RS 处理完后响应数据包的源 IP 地址RIP再被调度器修改回 VIP返回给客户端。2. DR 模式原理通过修改数据帧的目标 MAC 地址实现请求转发。调度器和所有 RS 都配置同一个 VIP调度器接收到请求后仅修改数据包的目标 MAC 地址为选定 RS 的 MAC 地址然后将帧转发到该 RS。RS 收到后直接处理并将响应数据包直接返回给客户端3 .TUN 模式原理通过 IP 隧道技术实现请求转发。调度器接收到请求后将整个 IP 数据包封装在一个新的 IP 报文中IP-in-IP 封装新报文的目标地址为选定 RS 的 RIP然后发送给 RS。RS 收到后解封装取出原始请求报文处理处理完后直接将响应返回给客户端。4 .FULLNAT 模式原理同时修改数据包的源 IP 和目标 IP。调度器接收到请求后将目标 IPVIP改为 RS 的 RIP同时将源 IPCIP改为 DIP调度器本地地址然后转发给 RS。RS 处理完后响应给 DIP调度器再将源 IP 改回 VIP目标 IP 改回 CIP返回给客户端。lvs的13种算法1.lvs调度算法类型ipvs scheduler根据其调度时是否考虑各RS当前的负载状态被分为两种静态方法和动态方法静态方法仅根据算法本身进行调度不考虑RS的负载情况动态方法主要根据每RS当前的负载状态及调度算法进行调度Overheadvalue较小的RS将被调度 3.5.22.lvs静态调度算法 (4种1、 RRroundrobin 轮询 RS分别被调度当RS配置有差别时不推荐2、 WRRWeighted RR加权轮询根据RS的配置进行加权调度性能差的RS被调度的次数少 3、 SHSource Hashing实现session sticky源IP地址hash将来自于同一个IP地址的请求始终发往 第一次挑中的RS从而实现会话绑定4、 DHDestination Hashing目标地址哈希第一次轮询调度至RS后续将发往同一个目标地址的请求始终转发至第一次挑中的RS典型使用场景是正向代理缓存场景中的负载均衡如宽带运营商3.lvs动态调度算法 6种1、 LCleast connections最少链接发 适用于长连接应用Overhead负载值activeconns活动链接数 x 256inactiveconns非活动链接数2、 WLCWeighted LC权重最少链接 默认调度方法Overhead(activeconns x 256inactiveconns)/weight3、 SEDShortest Expection Delay, 初始连接高权重优先Overhead(activeconns1inactiveconns) x 256/weight 但是当node1的权重为1node2的权重为10经过运算前几次的调度都会被node2承接4、 NQNever Queue第一轮均匀分配后续SED5、 LBLCLocality-Based LC动态的DH算法使用场景根据负载状态实现正向代理6、 LBLCRLBLC with Replication带复制功能的LBLC解决LBLC负载不均衡问题从负载重的复制到负载轻的RS在4.15版本内核以后新增调度算法 2种1.FO(Weighted Fai Over)调度算法常用作灰度发布 在此FO算法中遍历虚拟服务所关联的真实服务器链表找到还未过载(未设置IP_VS_DEST_F OVERLOAD标志)的且权重最高的真实服务器进行调度 当服务器承接大量链接我们可以对此服务器进行过载标记IP_VS_DEST_F OVERLOAD那么vs调度器就不会把链接调度到有过载标记的主机中。2.OVF(Overflow-connection)调度算法基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器直到其活动连接数量超过权重值之后调度到下一个权重值最高的真实服务器,在此OVF算法中遍历虚拟服务相关联的真实服务器链表找到权重值最高的可用真实服务器。lvs的多端口轮询问题解决方案1.在rs主机中同时开始http和https两种协议#在RS1和RS2中开启https [rootRS1RS2 ~]# dnf install mod_ssl -y [rootRS1RS2 ~]# systemctl restart httpd [rootRS1RS2 ~]# systemctl restart httpd2.在vsnode中添加https的轮询策略[rootvsnode boot]# ip^Cadm -A -t 192.168.0.200:80 -s rr [rootvsnode boot]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g [rootvsnode boot]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g [rootvsnode boot]# ipvsadm -A -t 192.168.0.200:443 -s rr [rootvsnode boot]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g [rootvsnode boot]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g [rootvsnode boot]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size4096) Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.0.200:80 rr - 192.168.0.10:80 Route 1 0 0 - 192.168.0.20:80 Route 1 0 0 TCP 192.168.0.200:443 rr - 192.168.0.10:443 Route 1 0 0 - 192.168.0.20:4433.轮询错误展示[rootclient ~]# curl 192.168.0.200;curl -k https://192.168.0.200 RS2 - 192.168.0.20 RS2 - 192.168.0.20解决方案使用火墙标记访问vip的80和443的所有数据包设定标记为6666然后对此标记进行负载[rootvsnode boot]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666 [rootvsnode boot]# ipvsadm -A -f 6666 -s rr [rootvsnode boot]# ipvsadm -a -f 6666 -r 192.168.0.10 -g [rootvsnode boot]# ipvsadm -a -f 6666 -r 192.168.0.20 -g测试在客户端lvs的会话粘滞解决方案在rs1和RS2主机中同时开始http和https两种协议[rootRS1 ~]# dnf install mod_ssl -y [rootRS1 ~]# systemctl restart httpd2 设定ipvs调度策略2 设定ipvs调度策略[rootvsnode ~]# ipvsadm -A -f 6666 -s rr -p 1 [rootvsnode ~]# ipvsadm -a -f 6666 -r 192.168.0.10 -g [rootvsnode ~]# ipvsadm -a -f 6666 -r 192.168.0.20 -g [rootvsnode ~]# ipvsadm -Ln