lvs相关

lvs相关
一、什么是集群集群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二、集群分类云计算环境下集群按照业务目标主要分为高可用集群、负载均衡集群、高性能计算集群、分布式存储集群、容器编排集群五大类。1. HA 高可用集群High‑Availability核心作用消除单点故障实现业务故障自动转移保证服务持续可用主备 / 主主模式故障时自动切换。典型技术Keepalived、PacemakerCorosync、VRRP应用场景数据库主备、VIP 虚拟 IP 漂移、网关、核心中间件业务不允许中断故障秒级切换。例如Nginx 网关、MySQL 主备、企业内部核心业务。2. LB 负载均衡集群Load Balance核心作用把用户请求分发到多台后端节点分摊压力横向扩展并发能力提升吞吐量。典型技术LVS、HAProxy、Nginx、SLB 云负载均衡应用场景Web 网站、接口服务、业务网关访问量大单台服务器扛不住流量。多台 web 服务器对外统一提供服务。实际环境经常LBHA 组合负载均衡节点本身再做高可用KeepalivedLVS/HAProxy。3. HPC 高性能计算集群High Performance Computing核心作用把大量服务器算力合并并行计算完成海量运算任务追求计算速度。典型技术Slurm、MPI应用场景科学计算、仿真建模、基因测序、渲染、气象预报CPU 密集型大规模计算任务对外不提供 Web 访问。4. 分布式存储集群核心作用多节点组成存储池统一对外提供存储容量横向扩展、数据多副本保障数据可靠性。典型技术Ceph、GlusterFS云平台块 / 对象存储应用场景云盘、对象存储、虚拟机镜像、大数据文件存储需要大容量存储防止磁盘损坏丢失数据虚拟机、容器持久化数据。5. 容器编排集群核心作用管理大量容器应用实现容器调度、自愈、滚动升级、扩缩容。典型技术Kubernetes(K8s)应用场景微服务业务、云原生应用快速发布、弹性伸缩互联网业务、企业微服务系统。三、lvs的作用lvs简介LVS:Linux Virtual Server负载调度器内核集成章文嵩阿里的四层SLB(Server LoadBalance)是基于LVSkeepalived实现LVS 官网: http://www.linuxvirtualserver.org/LVS 相关术语VS: Virtual Server负责调度RS:RealServer负责真正提供服务lvs集群体系结构工作原理VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS根据调度算法来挑选RS四、lvs的4种模式及原理4.1 nat模式Ivs-nat:本质是多目标IP的DNAT通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发RIP和DIP应在同一个IP网络且应使用私网地址;RS的网关要指向DIP请求报文和响应报文都必须经由Director转发Director易于成为系统瓶颈支持端口映射可修改请求报文的目标PORTVS必须是Linux系统RS可以是任意OS系统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的火墙策略全清理掉。4.2 DR模式DRDirect Routing直接路由LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发源MAC是DIP所在的接口的MAC目标MAC是某挑选出的RS的RIP所在接口的MAC地址源IP/PORT以及目标IP/PORT均保持不变Temp%5C1785409206464.pngpos_idimg-FN695xzd-1785411290928)在DR模式中RS接收到访问请求后不需要回传给VS调度器直接把回传数据发送给client所以RS和vs上都要有vip1.客户端发送数据帧给vs调度主机帧中内容为客户端IP客户端的MACVIPVIP的MAC2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC此时帧中的数据为客户端IP客户端的MACVIPRS1的MAC3.RS1得到2中的数据包做出响应回传数据包数据包中的内容为VIPRS1的MAC客户端IP客户端IP的MACDR模式特点1.Director和各RS都配置有VIP2.确保前端路由器将目标IP为VIP的请求报文发往Director3.在前端网关做静态绑定VIP和Director的MAC地址4.RS的RIP可以使用私网地址也可以是公网地址RIP与DIP在同一IP网络5.RIP的网关不能指向DIP以确保响应报文不会经由Director6.RS和Director要在同一个物理网络7.请求报文要经由Director但响应报文不经由Director而由RS直接发往Client8.不支持端口映射端口不能修败9.RS可使用大多数OS系统4.3 TUN模式转发方式不修改请求报文的IP首部源IP为CIP目标IP为VIP而在原IP报文之外再封装一个IP首部源IP是DIP目标IP是RIP将报文发往挑选出的目标RSRS直接响应给客户端源IP是VIP目标IP是CIP1.客户端发送请求数据包包内有源IPvipdport2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头新添加的IP报文头中包含TUNSRCIP(DIP)TUNDESTIP(RSIP1)并发送到RS13.RS收到VS调度器发送过来的数据包做出响应生成的响应报文中包含SRCIP(VIP)DSTIPCIPport响应数据包通过网络直接回传给clientTUN特点1.DIP, VIP, RIP都应该是公网地址2.RS的网关一般不能指向DIP3.请求报文要经由Director但响应不能经由Director4.不支持端口映射5.RS的OS须支持隧道功能4.4 fullnet模式ullnat通过同时修改请求报文的源IP地址和目标IP地址进行转发CIP -- DIPVIP -- RIP1.VIP是公网地址RIP和DIP是私网地址且通常不在同一IP网络因此RIP的网关一般不会指向DIP2.RS收到的请求报文源地址是DIP因此只需响应给DIP但Director还要将其发往Client3.请求和响应报文都经由Director4.支持端口映射lvs-nat与lvs-fullnat请求和响应报文都经由Directorlvs-natRIP的网关要指向DIPlvs-fullnatRIP和DIP未必在同一IP网络但要能通信lvs-dr与lvs-tun请求报文要经由Director但响应报文由RS直接发往Clientlvs-dr通过封装新的MAC首部实现通过MAC网络转发lvs-tun通过在原IP报文外封装新IP头实现转发支持远距离通信五、lvs的13种算法LVS 分为静态算法4 种、动态算法9 种静态不看后端服务器负载只根据调度策略分发动态会参考后端真实服务器负载状态。一、静态调度算法4 种不感知 RS 负载1. RR 轮询Round‑Robin介绍请求依次轮流分配给每台 RS平均分配不考虑服务器性能、负载。适用场景后端服务器硬件性能完全一致请求处理耗时差不多。示例RS1、RS2、RS3请求 1→RS1请求 2→RS2请求 3→RS3请求 4→RS1 循环。2. WRR 加权轮询Weight Round‑Robin介绍给 RS 设置权重权重越高分配请求越多按权重比例轮流分发。适用场景后端服务器硬件配置性能不一致。性能好机器权重调大。示例RS1 权重 3RS2 权重 1分配序列RS1,RS1,RS1,RS2循环分配。3. LC 目标地址散列Destination Hashing介绍根据客户端访问的目标 IP做 hash 计算算出固定 RS同一个目标 IP 始终调度到同一台 RS。适用场景缓存代理场景访问同一个目标站点固定走同一台代理缓存服务器。示例客户端都访问外网目标203.0.113.10hash 后固定交给 RS2 处理。###4. SH 源地址散列Source Hashing介绍根据客户端源 IP做 hash同一个客户端 IP永远调度到同一台 RS。适用场景会话保持客户端会话需要固定落在一台后端。示例客户端 IP192.168.1.100hash 计算后永久分配给 RS1。二、动态调度算法9 种会读取 RS 负载负载包含活跃连接数 非活跃连接数###5. LC 最小连接Least‑Connection介绍把新请求分配给当前连接数最少的 RS。适用场景请求处理时间长短差异大的业务比如长连接业务。示例RS1 连接 10RS2 连接 5新请求分给 RS2。###6. WLC 加权最小连接Weight Least‑Connection⭐最常用默认算法介绍综合权重与连接数。(活跃连接数*2非活跃连接数)/权重计算值最小接收请求。适用场景后端服务器性能不一样长短请求混合业务企业最常用。示例RS1 权重 5RS2 权重 2同样 10 连接RS1 负载值更小优先分配。###7. LBLC 基于局部性的最少连接Locality‑Based Least‑Connection介绍目标 IP 哈希 最小连接。先按目标 IP 哈希找 RSRS 未超载就分配给它超载则选连接数最小 RS。适用场景代理缓存集群。尽量保证相同访问目标落在同一缓存缓存命中率优先。示例访问目标 A 优先给 RS1RS1 连接爆满则转发给连接少的 RS3。###8. LBLCR 带复制的基于局部性最少连接 (Locality‑Based Least‑Connection with Replication)介绍LBLC 改进版支持目标 IP 缓存复制同一个目标 IP 流量可分发至多台 RS分担热点压力。适用场景代理缓存热点访问量极高单台缓存扛不住。示例热点网站目标 IP同时分发到 RS1、RS2 两台缓存节点。###9. DH 目的地址哈希 (Destination Hash)注意和静态 DH 名字一样动态版 DH 会感知后端服务器是否可用RS 宕机会自动重 hash静态 DH 不检测后端存活。介绍对目标 IP 哈希映射 RS后端故障自动重新 hash 映射其他节点。场景缓存集群需要故障自动容错。###10. SH 源地址哈希 (Source Hash)动态 SH 对比静态 SH后端 RS 宕机会自动重新 hash不会一直把请求发给故障节点。静态 SH 后端宕机依旧 hash 到故障机器。介绍源 IP 哈希绑定 RS后端故障自动重算 hash 切换其他 RS。场景需要源 IP 会话保持同时要容忍后端节点故障。###11. SED 最短期望延迟 (Shortest Expected Delay)介绍公式(active*2inactive 1)/weight取数值最小服务器。在 WLC 基础上空连接服务器也参与排序优先分配给空闲机器。适用场景希望优先调度空闲服务器减少请求等待延迟。示例RS1 无连接权重 2RS2 有连接权重 5SED 优先给到 RS1。###12. NQ 永不排队 (Never Queue)介绍如果有 RS 空闲 (连接数 0)直接分配给空闲节点没有空闲节点使用 SED 算法。适用场景尽可能利用空闲机器避免请求排队堆积。示例只要有一台 RS 完全空闲请求直接丢给空闲机器全部忙再用 SED。###13. FO 加权故障轮询 (Fault‑Over)介绍按权重设置主备优先级高权重节点活着全部流量给它只有它故障才把流量切到次权重节点。类似主备模式。适用场景主备集群优先使用主服务器故障才启用备用服务器。示例RS1 权重 10RS2 权重 5RS1 正常所有请求走 RS1RS1 故障全部切 RS2。六、lvs的多端口轮询问题解决方案6.1 NAT模式实现方法VS主机中[rootvsnode ~]# vmset.sh eth0 172.25.254.100 vsnode [rootvsnode ~]# vmset.sh eth1 192.168.0.100 vsnode norouteRS1#设定网络 [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.htmlRS2#设定网络 [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.201.vs#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.20规则持久化实验过程可以用过打开另外一个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.6.2 DR实现方法二 环境设定方式#在路由器中 [rootrouter ~]# systemctl disable --now ipvsadm.service Removed /etc/systemd/system/multi-user.target.wants/ipvsadm.service. [rootrouter ~]# ipvsadm -C #在路由器中 [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.100vsnode 调度器 [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 [rootRS1 system-connections]# nmcli connection reload [rootRS1 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 PING 192.168.0.200 (192.168.0.200) 56(84) 比特的数据。 64 比特来自 192.168.0.200: icmp_seq1 ttl128 时间1.08 毫秒#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_announce七、lvs的会话粘滞解决方案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:02测试[rootclient ~]# curl 192.168.0.200 RS1 - 192.168.0.10 [rootclient ~]# curl 192.168.0.200 RS1 - 192.168.0.103.观察[rootvsnode ~]# watch -n 1 ipvsadm -Lnc IPVS connection entries pro expire state source virtual destination TCP 01:56 FIN_WAIT 172.25.254.99:42420 192.168.0.200:80 192.168.0.20:80 IP 00:57 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:46216 192.168.0.200:80 192.168.0.20:80 TCP 01:55 FIN_WAIT 172.25.254.99:46222 192.168.0.200:80 192.168.0.20:80Forward Weight ActiveConn InActConnFWM 6666 rr persistent 1- 192.168.0.10:0 Route 1 0 0- 192.168.0.20:02测试[rootclient ~]# curl 192.168.0.200RS1 - 192.168.0.10[rootclient ~]# curl 192.168.0.200RS1 - 192.168.0.103.观察[rootvsnode ~]# watch -n 1 ipvsadm -LncIPVS connection entriespro expire state source virtual destinationTCP 01:56 FIN_WAIT 172.25.254.99:42420 192.168.0.200:80 192.168.0.20:80IP 00:57 ASSURED 172.25.254.99:0 0.0.26.10:0 192.168.0.20:0TCP 01:54 FIN_WAIT 172.25.254.99:46216 192.168.0.200:80 192.168.0.20:80TCP 01:55 FIN_WAIT 172.25.254.99:46222 192.168.0.200:80 192.168.0.20:80