LVS(Linux virual server) 📅 发布时间:2026/7/9 19:07:51 👁️ 浏览次数: LVS全称Linux Virtual Server是 Linux 内核层实现的高性能、高可用的负载均衡集群技术由章文嵩博士开发目前是 Linux 内核的标准模块之一。它的核心作用是将前端的请求流量分发到端多台真实服务器Real Server上从而提升服务的并发处理能力和可用性。一、实验环境主机名角色server1调度器VSserver2真实服务器RSserver3真实服务器RSserver4测试机二、集群和分布式简介2.1.系统性能扩展方式Scale UP向上扩展,增强Scale Out向外扩展,增加设备调度分配问题Cluster2.2.集群ClusterCluster: 集群是为了解决某个特定问题将堕胎计算机组合起来形成的单个系统Cluster常见的三种类型LBLoadBalancing负载均衡由多个主机组成每个主机只承担一部分访问HAHigh Availiablity高可用SPOFsingle Point Of failureMTBF: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高性能计算国家战略资源不在课程范围内2.3.分布式分布式存储:CephGlusterFsFastDFSMogileFs分布式计算:hadoopSpark分布式常见应用分布式应用-服务按照功能拆分使用微服务分布式静态资源--静态资源放在不同的存储集群上分布式数据和存储--使用key-value缓存系统分布式计算--对特殊业务使用分布式计算比如Hadoop集群2.4.集群和分布式集群同一个业务系统部署在多台服务器上集群中每一台服务器实现的功能没有差别数据和代码都是一样的分布式一个业务被拆成多个子业务或者本身就是不同的业务部署在多台服务器上。分布式中每一台服务器实现的功能是有差别的数据和代码也是不一样的分布式每台服务器功能加起来才是完整的业务分布式是以缩短单个任务的执行时间来提升效率的而集群则是通过提高单位时间内执行的任务数来提升效率,对于大型网站访问用户很多实现一个群集在前面部署一个负载均衡服务器后面几台服务器完成同一业务。如果有用户进行相应业务访问时负载均衡器根据后端哪台服务器的负载情况决定由给哪一台去完成响应并且台服务器垮了其它的服务器可以顶上来。分布式的每一个节点都完成不同的业务如果一个节点垮了那这个业务可能就会失败三、lvsLinux virtual server运行原理3.1 lvs简介LVS:Linux Virtual Server负载调度器内核集成章文嵩阿里的四层SLB(Server LoadBalance)是基于LVSkeepalived实现LVS 官网: http://www.linuxvirtualserver.org/LVS 相关术语VS: Virtual Server负责调度RS:RealServer负责真正提供服务3.2 lvs集群体系结构工作原理VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS根据调度算法来挑选RS3.3.LVS概念VSVirtual Server调度器RSReal Server 真实业务主机CIPClient IP 客户端主机的ipVIP: Virtual serve IP VS外网的IP 对外开放的让客户访问的ipDIP: Director IP VS内网的IP 调度器负责访问内网的ipRIP: Real server IP 真实业务主机IP访问流程CIP -- VIP DIP -- RIP3.4.lvs集群的类型lvs-nat 修改请求报文的目标IP,多目标IP的DNAT lvs-dr 操纵封装新的MAC地址 lvs-tun 在原请求IP报文之外新加一个IP首部 lvs-fullnat 修改请求报文的源和目标IP3.4.1.nat模式Ivs-nat:本质是多目标IP的DNAT通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发RIP和DIP应在同一个IP网络且应使用私网地址;RS的网关要指向DIP请求报文和响应报文都必须经由Director转发Director易于成为系统瓶颈支持端口映射可修改请求报文的目标PORTVS必须是Linux系统RS可以是任意OS系统3.4.2.nat模式数据逻辑1.客户端发送访问请求请求数据包中含有请求来源cip访问目标地址VIP访问目标端口9000port2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口3.RS1相应请求发送响应数据包包中的相应保温为数据来源RIP1响应目标CIP相应端口9000port4.VS服务器接收到响应数据包改变包中的数据来源RIP1--VIP,响应目标端口9000--805.VS服务器把修改过报文的响应数据包回传给客户端6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机所以lvs的调度机容易阻塞客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通过PREROUTING后被ipvs结果并作nat转发因为ipvs的作用点是在PREROUTING和INPUT链之间所以如果在prerouting中设定规则会干扰ipvs的工作。所以在做lvs时要把iptables的火墙策略全清理掉。3.4.3.DR模式DRDirect Routing直接路由LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发源MAC是DIP所在的接口的MAC目标MAC是某挑选出的RS的RIP所在接口的MAC地址源IP/PORT以及目标IP/PORT均保持不变3.4.4.DR模式数逻辑在DR模式中RS接收到访问请求后不需要回传给VS调度器直接把回传数据发送给client所以RS和vs上都要有vip3.4.6.DR模式数据传输过程1.客户端发送数据帧给vs调度主机帧中内容为客户端IP客户端的MACVIPVIP的MAC2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC此时帧中的数据为客户端IP客户端的MACVIPRS1的MAC3.RS1得到2中的数据包做出响应回传数据包数据包中的内容为VIPRS1的MAC客户端IP客户端IP的MAC3.4.6.DR模式的特点1.Director和各RS都配置有VIP2.确保前端路由器将目标IP为VIP的请求报文发往Director3.在前端网关做静态绑定VIP和Director的MAC地址在RS上使用arptables工具arptables -A IN -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP在RS上修改内核参数以限制arp通告及应答级别/proc/sys/net/ipv4/conf/all/arp_ignore /proc/sys/net/ipv4/conf/all/arp_announce4.RS的RIP可以使用私网地址也可以是公网地址RIP与DIP在同一IP网络5.RIP的网关不能指向DIP以确保响应报文不会经由Director6.RS和Director要在同一个物理网络7.请求报文要经由Director但响应报文不经由Director而由RS直接发往Client8.不支持端口映射端口不能修败9.RS可使用大多数OS系统3.4.7.TUN模式了解转发方式不修改请求报文的IP首部源IP为CIP目标IP为VIP而在原IP报文之外再封装一个IP首部源IP是DIP目标IP是RIP将报文发往挑选出的目标RSRS直接响应给客户端源IP是VIP目标IP是CIP3.4.8.TUN模式数据传输过程1.客户端发送请求数据包包内有源IPvipdport2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头新添加的IP报文头中包含TUNSRCIP(DIP)TUNDESTIP(RSIP1)并发送到RS13.RS收到VS调度器发送过来的数据包做出响应生成的响应报文中包含SRCIP(VIP)DSTIPCIPport响应数据包通过网络直接回传给client3.4.9.TUN模式特点1.DIP, VIP, RIP都应该是公网地址2.RS的网关一般不能指向DIP3.请求报文要经由Director但响应不能经由Director4.不支持端口映射5.RS的OS须支持隧道功能3.4.10.fullnet模式了解fullnat通过同时修改请求报文的源IP地址和目标IP地址进行转发 CIP -- DIP VIP -- RIP1.VIP是公网地址RIP和DIP是私网地址且通常不在同一IP网络因此RIP的网关一般不会指向DIP2.RS收到的请求报文源地址是DIP因此只需响应给DIP但Director还要将其发往Client3.请求和响应报文都经由Director4.支持端口映射注意此类型kernel默认不支持3.4.11.LVS工作模式总结NAT模式TUN模式DR模式RS操作系统不限支持隧道禁用arp调度器和服务器网络可跨网络可跨网络不可跨网络调度服务器数量服务器数量少多多RS服务器网关指向到调度器DIP指向到路由指向到路由lvs-nat与lvs-fullnat请求和响应报文都经由Directorlvs-natRIP的网关要指向DIPlvs-fullnatRIP和DIP未必在同一IP网络但要能通信lvs-dr与lvs-tun请求报文要经由Director但响应报文由RS直接发往Clientlvs-dr通过封装新的MAC首部实现通过MAC网络转发lvs-tun通过在原IP报文外封装新IP头实现转发支持远距离通信3.5.lvs的调度算法3.5.1.lvs调度算法类型ipvs scheduler根据其调度时是否考虑各RS当前的负载状态被分为两种静态方法和动态方法静态方法仅根据算法本身进行调度不考虑RS的负载情况动态方法主要根据每RS当前的负载状态及调度算法进行调度Overheadvalue较小的RS将被调度3.5.2.lvs静态调度算法1、RRroundrobin 轮询 RS分别被调度当RS配置有差别时不推荐2、WRRWeighted RR加权轮询根据RS的配置进行加权调度性能差的RS被调度的次数少3、SHSource Hashing实现session sticky源IP地址hash将来自于同一个IP地址的请求始终发往第一次挑中的RS从而实现会话绑定4、DHDestination Hashing目标地址哈希第一次轮询调度至RS后续将发往同一个目标地址的请求始终转发至第一次挑中的RS典型使用场景是正向代理缓存场景中的负载均衡如宽带运营商3.5.2.lvs动态调度算法主要根据RS当前的负载状态及调度算法进行调度Overheadvalue较小的RS会被调度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负载不均衡问题从负载重的复制到负载轻的RS3.5.3.在4.15版本内核以后新增调度算法1.FO(Weighted Fai Over)调度算法常用作灰度发布在此FO算法中遍历虚拟服务所关联的真实服务器链表找到还未过载(未设置IP_VS_DEST_F OVERLOAD标志)的且权重最高的真实服务器进行调度当服务器承接大量链接我们可以对此服务器进行过载标记IP_VS_DEST_F OVERLOAD那么vs调度器就不会把链接调度到有过载标记的主机中。2.OVF(Overflow-connection)调度算法基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器直到其活动连接数量超过权重值之后调度到下一个权重值最高的真实服务器,在此OVF算法中遍历虚拟服务相关联的真实服务器链表找到权重值最高的可用真实服务器。一个可用的真实服务器需要同时满足以下条件:未过载(未设置IP_VS_DEST_F OVERLOAD标志)真实服务器当前的活动连接数量小于其权重值其权重值不为零四.lvs部署命令介绍4.1.lvs软件相关信息程序包ipvsadmUnit File: ipvsadm.service主程序/usr/sbin/ipvsadm规则保存工具/usr/sbin/ipvsadm-save规则重载工具/usr/sbin/ipvsadm-restore配置文件/etc/sysconfig/ipvsadm-configipvs调度规则文件/etc/sysconfig/ipvsadm4.2.ipvsadm命令核心功能:集群服务管理:增、删、改集群服务的RS管理:增、删、改查看命令参数管理集群服务 ipvsadm -A|E -ttcp|uudp|f防护墙标签 \ service-address(集群地址) \ [-s scheduler(调度算法)] \ [-p [timeout]] \ [-M netmask] \ [--pepersistence_engine] \ [-b sched-flags] ipvsadm -D -t|u|f service-address 删除 ipvsadm –C 清空 ipvsadm –R 重载 ipvsadm -S [-n] 保存 管理集群中的real server ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](权重) ipvsadm -d -t|u|f service-address -r server-address 删除RS ipvsadm -L|l [options] 查看rs ipvsadm -Z [-t|u|f service-address] 清楚计数器4.3.lvs集群中的增删改1.管理集群服务中的增删改ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]-A #添加 -E #修改 -t #tcp服务 -u #udp服务 -s #指定调度算法默认为WLC -p #设置持久连接超时持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver -f #firewall mask 火墙标记是一个数字#增加 [rootDR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr [rootDR-server ~]# ipvsadm -A -f 66 -p 3000 #修改 [rootDR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000 #删除 [rootDR-server ~]# ipvsadm -D -t 172.25.254.100:80 [rootDR-server ~]# ipvsadm -D -f 662.管理集群中RealServer的曾增删改ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]-a #添加realserver -e #更改realserver -t #tcp协议 -u #udp协议 -f #火墙 标签 -r #realserver地址 -g #直连路由模式 -i #ipip隧道模式 -m #nat模式 -w #设定权重 -Z #清空计数器 -C #清空lvs策略 -L #查看lvs策略 -n #不做解析 --rate 输出速率信息#添加 [rootDR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m [rootDR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2 #更改 [rootDR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1 [rootDR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1 #删除 [rootDR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30[rootDR-server ~]# ipvsadm -Ln [rootDR-server ~]# ipvsadm -Ln --rate IP Virtual Server version 1.2.1 (size4096) Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS - RemoteAddress:Port TCP 172.25.254.100:80 0 0 0 0 0 - 192.168.0.30:80 0 0 0 0 0 - 192.168.0.40:80 0 0 0 0 0 #CPS 每秒连接数表示服务器处理新连接的速率 #InPPS每秒入站数据包数量即从客户端发送到负载均衡器的数据包速率 #OutPPS 每秒出站数据包数量即从负载均衡器向后端服务器或客户端发送数据包的速率 #InBPS每秒入站流量字节即从客户端到服务器的流量速率。 #OutBPS每秒出站流量字节即从服务器到客户端的流量速率。 [rootDR-server ~]# ipvsadm -Z -t 172.25.254.20:80 [rootDR-server ~]# ipvsadm -Ln --rate IP Virtual Server version 1.2.1 (size4096) Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS - RemoteAddress:Port TCP 172.25.254.20:80 0 0 0 0 0 - 192.168.0.30:80 0 0 0 0 0 - 192.168.0.40:80 0 0 0 0 0 #清空策略 [rootDR-server ~]# ipvsadm -Cpvs规则/proc/net/ip_vs ipvs连接/proc/net/ip_vs_conn五.LVS实战案例5.1nat模式1.Director 服务器采用双网卡一个是桥接网卡连接外网一个是仅主机网卡与后端Web服务器相连2.Web服务器采用仅主机网卡与director相连3.Web服务器网关指向192.168.0.1004.后端web服务器不需要连接外网5.1.1.nat模式环境设定主机名IPVIP角色node1192.168.0.100172.25.254.100调度器VSnode2192.168.0.101GW 192.168.0.100null真实服务器RSnode3192.168.0.102GW 192.168.0.100null真实服务器RSnode4172.25.254.104测试机配置命令在VS主机中[rootvsnode ~]# vmset.sh eth0 172.25.254.100 vsnode [rootvsnode ~]# vmset.sh eth1 192.168.0.100 vsnode noroute在RS1中vmset.sh为自己做的设定网络的脚本#设定网络 [rootRS1 ~]# vmset.sh eth0 192.168.0.10 RS1 noroute [rootRS1 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 [rootRS1 ~]# nmcli connection reload [rootRS1 ~]# nmcli connection up eth0 [rootRS1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 #设定访问业务真实数据 [rootRS1 ~]# dnf install httpd -y [rootRS1 ~]# systemctl enable --now httpd [rootRS1 ~]# echo RS1 - 192.168.0.10 /var/www/html/index.html在RS2中#设定网络 [rootRS1 ~]# vmset.sh eth0 192.168.0.20 RS1 noroute [rootRS1 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 [rootRS1 ~]# nmcli connection reload [rootRS1 ~]# nmcli connection up eth0 [rootRS1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 #设定访问业务真实数据 [rootRS1 ~]# dnf install httpd -y [rootRS1 ~]# systemctl enable --now httpd [rootRS1 ~]# echo RS2 - 192.168.0.20 /var/www/html/index.html在vs主机中测试环境:[rootvsnode ~]# curl 192.168.0.10 RS1 - 192.168.0.10 [rootvsnode ~]# curl 192.168.0.20 RS2 - 192.168.0.205.1.2NAT模式实现方法lvs#1开启内核路由功能 [rootvsnode ~]# echo net.ipv4.ip_forward1 /etc/sysctl.conf [rootvsnode ~]# sysctl -p net.ipv4.ip_forward 1 #2.编写策略 [rootvsnode ~]# ipvsadm -C [rootvsnode ~]# ipvsadm -A -t 172.25.254.100:80 -s wrr [rootvsnode ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1 [rootvsnode ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1 [rootvsnode ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size4096) Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.25.254.100:80 wrr - 192.168.0.10:80 Masq 1 0 0 - 192.168.0.20:80 Masq 1 0 0 #测试 [rootvsnode ~]# for i in {1..10};do curl 172.25.254.100;done RS2 - 192.168.0.20 RS1 - 192.168.0.10 RS2 - 192.168.0.20 RS1 - 192.168.0.10 RS2 - 192.168.0.20 RS1 - 192.168.0.10 RS2 - 192.168.0.20 RS1 - 192.168.0.10 RS2 - 192.168.0.20 RS1 - 192.168.0.10 #更改权重 [rootvsnode ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2 [rootvsnode ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size4096) Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.25.254.100:80 wrr - 192.168.0.10:80 Masq 2 0 5 - 192.168.0.20:80 Masq 1 0 5 #测试 [rootvsnode ~]# for i in {1..10};do curl 172.25.254.100;done RS2 - 192.168.0.20 RS1 - 192.168.0.10 RS1 - 192.168.0.10 RS2 - 192.168.0.20 RS1 - 192.168.0.10 RS1 - 192.168.0.10 RS2 - 192.168.0.20 RS1 - 192.168.0.10 RS1 - 192.168.0.10 RS2 - 192.168.0.205.1.3规则持久化实验过程可以用过打开另外一个shell的并执行监控命令的方式进行观察[rootvsnode ~]# watch -n 1 ipvsadm -Ln#利用自定义文件进行持久化 [rootvsnode ~]# ipvsadm-save -n -A -t 172.25.254.100:80 -s wrr -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2 -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1 [rootvsnode ~]# ipvsadm-save -n /mnt/ipvs.rule [rootvsnode ~]# ipvsadm -C [rootvsnode ~]# ipvsadm-restore /mnt/ipvs.rule #利用守护进程进行规则持久化 [rootvsnode ~]# ipvsadm-save -n /etc/sysconfig/ipvsadm [rootvsnode ~]# ipvsadm -C [rootvsnode ~]# systemctl enable --now ipvsadm.service Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.5.2DR模式实验过程5.2.1环境流程图5.2.2实验步骤#在路由器中 [rootrouter ~]# systemctl disable --now ipvsadm.service Removed /etc/systemd/system/multi-user.target.wants/ipvsadm.service. [rootrouter ~]# ipvsadm -C #设置ip [rootrouter ~]# vmset.sh eth0 172.25.254.100 vsnode [rootrouter ~]# vmset.sh eth1 192.168.0.100 vsnode noroute、 #设定内核路由功能 [rootrouter ~]# echo net.ipv4.ip_forward1 /etc/sysctl.conf [rootrouter ~]# sysctl -p net.ipv4.ip_forward 1 #数据转发策略 [rootrouter ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100 [rootvsnode ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100#vsnode 调度器 [rootvsnode ~]# vmset.sh eth0 192.168.0.50 vsnode norouter [rootvsnode ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection [connection] ideth0 typeethernet interface-nameeth0 [ipv4] methodmanual address1192.168.0.50/24,192.168.0.100 [rootvsnode ~]# cd /etc/NetworkManager/system-connections/ [rootvsnode system-connections]# cp -p eth0.nmconnection lo.nmconnection [rootvsnode system-connections]# vim lo.nmconnection [connection] idlo typeloopback interface-namelo [ipv4] methodmanual address1127.0.0.1/8 address2192.168.0.200/32 [rootvsnode system-connections]# nmcli connection reload [rootvsnode system-connections]# nmcli connection up eth0 连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/7 [rootRS1 system-connections]# nmcli connection up lo 连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/8 #检测 rootvsnode system-connections]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 [rootvsnode system-connections]# ip a 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.0.200/32 brd 192.168.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:41:e5:8b brd ff:ff:ff:ff:ff:ff altname enp3s0 altname ens160 inet 192.168.0.50/24 brd 192.168.0.255 scope global secondary noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::e40:8975:6b9:fea8/64 scope link noprefixroute valid_lft forever preferred_lft forever#客户端 [rootclient ~]# vmset.sh eth0 172.25.254.99 client norouter 连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/4 2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:e5:75:af brd ff:ff:ff:ff:ff:ff altname enp3s0 altname ens160 inet 172.25.254.99/24 brd 172.25.254.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fee5:75af/64 scope link tentative noprefixroute valid_lft forever preferred_lft forever client [rootclient ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection [connection] ideth0 typeethernet interface-nameeth0 [ipv4] methodmanual address1172.25.254.99/24,172.25.254.100 dns8.8.8.8; [rootclient ~]# nmcli connection reload [rootclient ~]# nmcli connection up eth0 连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/5 [rootclient ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.25.254.100 0.0.0.0 UG 100 0 0 eth0 172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 #检测 [rootclient ~]# ping 192.168.0.200 -c 2 PING 192.168.0.200 (192.168.0.200) 56(84) 比特的数据。 64 比特来自 192.168.0.200: icmp_seq1 ttl128 时间1.10 毫秒 64 比特来自 192.168.0.200: icmp_seq1 ttl128 时间1.07 毫秒#RS1 [rootRS1 ~]# vmset.sh eth0 192.168.0.10 RS1 noroute [rootRS1 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 [rootRS1 ~]# nmcli connection reload [rootRS1 ~]# nmcli connection up eth0 [rootRS1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 #在lo上设定vip [rootRS1 ~]# cd /etc/NetworkManager/system-connections/ [rootRS1 system-connections]# cp -p eth0.nmconnection lo.nmconnection [rootRS1 system-connections]# vim lo.nmconnection [connection] idlo typeloopback interface-namelo [ethernet] [ipv4] address1127.0.0.1/8 address2192.168.0.200/32 methodmanual [rootRS1 system-connections]# nmcli connection reload [rootRS1 system-connections]# nmcli connection up lo 连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/6 [rootRS1 system-connections]# ip a 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.0.200/32 scope global lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever #arp禁止响应 [rootRS1 ~]# echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore [rootRS1 ~]# echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore [rootRS1 ~]# echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce [rootRS1 ~]# echo 2 /proc/sys/net/ipv4/conf/all/arp_announce#RS1 [rootRS2 ~]# vmset.sh eth0 192.168.0.20 RS2 noroute [rootRS2 ~]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 [rootRS2 ~]# nmcli connection reload [rootRS2 ~]# nmcli connection up eth0 [rootRS2 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 #在lo上设定vip [rootRS2 ~]# cd /etc/NetworkManager/system-connections/ [rootRS2 system-connections]# cp -p eth0.nmconnection lo.nmconnection [rootRS2 system-connections]# vim lo.nmconnection [connection] idlo typeloopback interface-namelo [ethernet] [ipv4] address1127.0.0.1/8 address2192.168.0.200/32 methodmanual [rootRS2 system-connections]# nmcli connection reload [rootRS2 system-connections]# nmcli connection up lo 连接已成功激活D-Bus 活动路径/org/freedesktop/NetworkManager/ActiveConnection/6 [rootRS2 system-connections]# ip a 1: lo: LOOPBACK,UP,LOWER_UP mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.0.200/32 scope global lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever #arp禁止响应 [rootRS2 ~]# echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore [rootRS2 ~]# echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore [rootRS2 ~]# echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce [rootRS2 ~]# echo 2 /proc/sys/net/ipv4/conf/all/arp_announce5.2.3DR模式实现根据环境设定实现了全网通如果没有可能是应为重启路由器后iptables没生效再写一遍或者已经导出的话再导入策略[rootrouter ~]# iptables -t nat -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT [rootrouter ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100 [rootrouter ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100 [rootrouter ~]# iptables -t nat -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100 -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100在调度器上加dr策略[rootvsnode ~]# dnf install ipvsadm -y [rootvsnode ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size4096) Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConn [rootvsnode ~]# ipvsadm -A -t 192.168.0.200:80 -s rr [rootvsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g [rootvsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g [rootvsnode ~]# 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 [rootvsnode ~]# ipvsadm-save -n /etc/sysconfig/ipvsadm [rootvsnode ~]# systemctl start ipvsadm # 通过查看状态知道是在这个文件/etc/sysconfig/ipvsadm中读取规则的有规则就可以成功启动没有就报错。 [rootvsnode ~]# systemctl status ipvsadm | grep Process Process: 29026 ExecStart/bin/bash -c exec /sbin/ipvsadm-restore /etc/sysconfig/ipvsadm (codeexited, status0/SUCCESS) [rootVSNode50 ~]#用户端进行测试5.3利用持久连接实现会话粘滞5.3.1设定ipvs调度策略[rootvsnode ~]# ipvsadm -A -f 6666 -s rr -p 1 [rootvsnode ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size4096) Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConn FWM 6666 rr persistent 1 - 192.168.0.10:0 Route 1 0 0 - 192.168.0.20:05.3.2客户端进行测试[rootclient ~]# curl 192.168.0.200 RS1 - 192.168.0.10 [rootclient ~]# curl 192.168.0.200 RS1 - 192.168.0.105.3.3可以开另一个窗口进行观察[rootvsnode ~]# watch -n 1 ipvsadm -Lnc IPVS connection entries pro expire state source virtual destination TCP 01:53 FIN_WAIT 172.25.254.99:42458 192.168.0.200:80 192.168.0.20:80 IP 00:58 ASSURED 172.25.254.99:0 0.0.26.10:0 192.168.0.20:0 TCP 01:54 FIN_WAIT 172.25.254.99:46123 192.168.0.200:80 192.168.0.20:80 TCP 01:56 FIN_WAIT 172.25.254.99:46234 192.168.0.200:80 192.168.0.20:805.4利用火墙标记解决轮询错误5.4.1在rs主机1和2中同时开始http和https两种协议#在RS1和RS2中开启https [rootRS1 ~]# dnf install mod_ssl -y [rootRS1 ~]# systemctl restart httpd [rootRS1 ~]# systemctl restart httpd [rootRS2 ~]# dnf install mod_ssl -y [rootRS2 ~]# systemctl restart httpd [rootRS2 ~]# systemctl restart httpd5.4.2在vsnode中添加https的轮询策略[rootvsnode ~]# ipvsadm -A -t 192.168.0.200:80 -s rr [rootvsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g [rootvsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g [rootvsnode ~]# ipvsadm -A -t 192.168.0.200:443 -s rr [rootvsnode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g [rootvsnode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g [rootvsnode ~]# 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:4435.4.3轮询错误展示#当上述实验步骤设定完成后http和https是独立的service轮询就会出现重复问题 [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 ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666 [rootvsnode ~]# ipvsadm -A -f 6666 -s rr [rootvsnode ~]# ipvsadm -a -f 6666 -r 192.168.0.10 -g [rootvsnode ~]# ipvsadm -a -f 6666 -r 192.168.0.20 -g最后再在客户端进行测试[rootclient ~]# curl 192.168.0.200;curl -k https://192.168.0.200 RS2 - 192.168.0.20 RS1 - 192.168.0.10
水库调洪与同频率放大洪水过程程序探究 水库调洪、同频率放大洪水过程程序在水利工程领域,水库调洪以及同频率放大洪水过程的模拟与计算至关重要。它们对于保障水库安全运行、合理调配水资源以及防洪减灾有着深远意义。今天咱就来唠唠实现这些功能的程序。 水库调洪程序 水库调洪主要是通过水库的蓄泄能力… 2026/5/17 2:06:43
高德车机版9.1.87_退出键_充电桩地图_增加货车模式 增加右上角退出键,增加充电地图,增加货车地图模式。 支持悬浮原包共存_鹰眼预警/ai预测/红绿灯播报/变灯提醒/超速提醒/天气播报等自定义 修改自定义位置/storage/emulated/0/ttsSettings.json 点我下载 2026/7/6 19:01:25
一.Python基础_列表元组 高级数据类型是一种编程语言中提供的用于表示复杂数据结构的数据类型。相比于基础数据类型(如整数、浮点数、布尔值等),高级数据类型可以存储和操作更多的数据,并且具备更丰富的功能和操作方法。 Python的高级数据类型主要包括列表、元组,字典,集合。 1. 列表的概念 在… 2026/7/4 13:40:04
压电警报系统设计与PIC32MZ微控制器应用 1. 压电警报系统的核心组件解析在工业控制和消费电子领域,可靠的声音警报系统是保障设备安全运行和人机交互的重要环节。EPT-14A4005P压电扬声器与PIC32MZ1024EFE144微控制器的组合,为各类环境下的警报需求提供了高性价比解决方案。1.1 EPT-14A4005P压电… 2026/7/9 19:06:05
Pin-Server未来展望:编译器优化框架的技术演进与生态建设 Pin-Server未来展望:编译器优化框架的技术演进与生态建设 【免费下载链接】pin-server Pin (Plug-IN framework) server provides plugin APIs for compiler optimization developers to develop optimization pass. 项目地址: https://gitcode.com/openeuler/pin… 2026/7/9 19:06:05
Vision Transformer (ViT) Patch Embedding 实现对比:Conv2D vs Linear 性能与显存占用实测 Vision Transformer (ViT) Patch Embedding 实现对比:Conv2D vs Linear 性能与显存占用实测 1. 核心问题与背景 在计算机视觉领域,Vision Transformer (ViT) 已成为继卷积神经网络(CNN)之后的新一代骨干架构。与传统CNN不同,ViT将图像分割为… 2026/7/9 19:06:05
TMC7300与STM32F100ZE的有刷直流电机控制方案 1. 项目背景与核心器件选型有刷直流电机作为工业自动化、消费电子和机器人领域最常见的执行机构之一,其控制方案的稳定性和可靠性直接影响整个系统的性能表现。传统H桥驱动方案虽然简单易用,但在应对电机启停冲击、负载突变等工况时往往力不从心。这正是… 2026/7/9 19:04:04
高精度ADC ADS127L11与STM32F410RB的工业级应用方案 1. 项目背景与硬件选型解析在工业测量、医疗设备和精密仪器等领域,高精度模拟信号采集一直是关键挑战。传统8位或12位ADC在动态范围和信噪比方面存在明显局限,而24位Δ-Σ架构的ADS127L11配合STM32F410RB的组合,为需要微伏级精度的应用提供了… 2026/7/9 19:02:04
TCP 与 UDP 协议深度对比:3 大核心差异与 10 个典型应用场景选择指南 TCP 与 UDP 协议深度对比:3 大核心差异与 10 个典型应用场景选择指南在网络通信的世界里,TCP 和 UDP 就像两位性格迥异的信使。一位严谨可靠,确保每封信件准确送达;另一位雷厉风行,追求最快的投递速度。理解它们的本质… 2026/7/9 19:00:03
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08