LVS原理详解及部署

news2024/11/15 4:33:57

目录

一、LVS原理

1.LVS简介

2.LVS结构

3.IP负载均衡技术

4.LVS相关术语

二、LVS负载均衡四种工作模式

1.LVS-DR模式

2.LVS-NAT模式

3.LVS-TUN模式(了解)

4.FULL-NAT模式(了解)

三、LVS负载均衡十种调度算法

四、LVS部署

1.LVS软件相关信息

2.ipvsadm命令

3.LVS集群中的参数

4.部署NAT模式集群案例

5.部署DR模式集群案例

6.防火墙标签解决轮询错误


一、LVS原理

1.LVS简介

LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器集群,它具有良好可靠性、可扩展性和可操作性,从而以低廉的成本实现最优的服务性能。目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。

2.LVS结构

使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用Load Balancer表示,中间的服务器群组层,用Server Cluster表示,最底端的数据共享存储层,用Storage表示,在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务

LVS各个组成部分详解:

Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server 管理服务器)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。


Server Cluster层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色


Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。

3.IP负载均衡技术

        负载均衡技术有很多实现方案,有基于DNS域名轮流解析的方法、有基于客户端调度访问的方法、有基于应用层系统负载的调度方法,还有基于IP地址的调度方法,在这些负载调度算法中,执行效率最高的是IP负载均衡技术。

        LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。
  当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术,IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR.

4.LVS相关术语

  • VS:Virtual Server ,虚拟服务
  • Director: Balancer ,也叫DS(Director Server)负载均衡器、分发器
  • RS:Real Server ,后端请求处理服务器,真实服务器
  • CIP: Client IP ,客户端IP
  • VIP:Director Virtual IP ,负载均衡器虚拟IP
  • DIP:Director IP ,负载均衡器IP
  • RIP:Real Server IP ,后端请求处理的服务器IP

二、LVS负载均衡四种工作模式

1.LVS-DR模式

简介

 全称:Virtual Server via Direct Routing(VS-DR),也叫直接路由模式,用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此方法,控制管理的计算机接收到请求包时直接送到参与集群的节点。直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。

具体工作流程:

说明:

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP;
  2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链;
  3. IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址;
  4. 由于DS和RS在同一个网络中,所以是通过二层,数据链路层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server;
  5. RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP;
  6. 响应报文最终送达至客户端。
地址变化过程
DR 模式的特点
1.Director 和各 RS 都配置有 VIP
2. 确保前端路由器将目标 IP VIP 的请求报文发往 Director
3. 在前端网关做静态绑定 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_announce
4.RS RIP 可以使用私网地址,也可以是公网地址; RIP DIP 在同一 IP 网络;
5.RIP 的网关不能指向 DIP ,以确保响应报文不会经由 Director
6.RS Director 要在同一个物理网络
7. 请求报文要经由 Director ,但响应报文不经由 Director ,而由 RS 直接发往 Client
8. 不支持端口映射(端口不能修败)
9.RS 可使用大多数 OS 系统

2.LVS-NAT模式

简介

  NAT模式称为全称Virtualserver via Network address translation(VS/NAT),是通过网络地址转换的方法来实现调度的。首先调度器(Director)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为DS服务器。)把响应后的数据包发送给DS,DS再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

具体工作流程:

说明:

(1)当用户请求到达DirectorServer,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。

(2) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。

(3) IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP ,在这个过程完成了目标IP的转换(DNAT)。

(4) POSTROUTING链通过选路,将数据包发送给Real Server。

(5) Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP 。

(6) Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址(SNAT),然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。 

地址变化过程:

NAT模式优缺点:

  1. NAT技术将请求的报文和响应的报文都需要通过DS进行地址改写,因此网站访问量比较大的时候DS负载均衡调度器有比较大的瓶颈,一般要求最多之能10-20台节点。
  2. 节省IP,只需要在DS上配置一个公网IP地址就可以了。
  3. 每台内部的节点服务器的网关地址必须是调度器LB的内网地址。
  4. NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。

3.LVS-TUN模式(了解)

介绍

    在VS/NAT 的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数 Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直 接返回给客户,将极大地提高整个集群系统的吞吐量。

    IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技 术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。

    在TUN模式下,利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择 一台服务器,将请求报文封装和转发给选出的服务器。

工作流程

  1. 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
  2. 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
  3. RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。注意:需要设置lo接口的VIP不能在共网上出现

地址变化过程

TUN 模式特点
1.DIP, VIP, RIP 都应该是公网地址
2.RS 的网关一般不能指向 DIP
3. 请求报文要经由 Director ,但响应不能经由 Director
4. 不支持端口映射
5.RS OS 须支持隧道功能

4.FULL-NAT模式(了解)

介绍

    FULL-NAT模式可以实际上是根据LVS-NAT模式的一种扩展。在NAT模式下DS需要先对请求进行目的地址转换(DNAT),然后对响应包进行源地址转换(SNAT),先后进行两次NAT,而 FULL-NAT则分别对请求进行和响应进行DNAT和SNAT,进行4次NAT,当然这样多次数的NAT会对性能大大削减,但是由于对请求报文的目的地址和源地址都进行了转换,后端的RS可以不在同一个VLAN下。

工作流程

说明:

  1. 首先client 发送请求package给VIP;
  2. VIP 收到package后,会根据LVS设置的LB算法选择一个合适的RS,然后把package 的目地址修改为RS的ip地址,把源地址改成DS的ip地址;
  3. RS收到这个package后发现目标地址是自己,就处理这个package ,处理完后把这个包发送给DS;
  4. DS收到这个package 后把源地址改成VIP的IP,目的地址改成CIP(客户端ip),然后发送给客户端;

优缺点:

  1. RIP,DIP可以使用私有地址;
  2. RIP和DIP可以不再同一个网络中,且RIP的网关未必需要指向DIP;
  3. 支持端口映射;
  4. RS的OS可以使用任意类型;
  5. 请求报文经由Director,响应报文也经由Director;
  6. FULL-NAT因为要经过4次NAT,所以性能比NAT还要低;
  7. 由于做了源地址转换,RS无法获取到客户端的真实IP; 
LVS工作模式总结
NAT 模式
TUN 模式
DR 模式
RS 操作系统
不限
支持隧道
禁用 arp
调度器和服务器网络
可跨网络
可跨网络
不可跨网络
调度服务器数量服务器数量
RS 服务器网关
指向到调度器 DIP
指向到路由
指向到路由
lvs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-nat:RIP的网关要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

三、LVS负载均衡十种调度算法

lvs静态调度算法

1.  RR(轮询:Round Robin), 算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。特点是将收到的访问请求按顺序轮流分配给集群中的各节点真实服务器中,不管服务器实际的连接数和系统负载。轮询 RS分别被调度,当RS配置有差别时不推荐

2.  WRR(加权轮询:Weighted Round Robin),算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少

3.  SH( 源地址散列调度:Source Hashing )算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。

4.  DH(目标地址散列调度:Destination Hashing )算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。

lvs动态调度算法


5.  LC(最小连接调度:Least Connections )算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。

适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)

(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)

6.  WLC(加权最少连接:(Weight Least Connections )算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight

7.  LBLC(基于局部的最少连接调度:Locality-Based Least Connections )算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。

8.  LBLCR(带复制的基于局部性的最少连接:Locality-Based Least Connections with Replication )算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

9.  SED (最短的期望的延迟调度:Shortest Expected Delay )算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算
A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。
预期的延迟时间为(Ci +1)/ Ui,其中 Ci 是第 i 个服务器上的连接数,而 Ui 是第 i 个服务器的固定服务速率(权重)

初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight
但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接


10.  NQ(最少队列调度:Never Queue )算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。

四、LVS部署

1.LVS软件相关信息

程序包: ipvsadm
Unit File: ipvsadm.service
主程序: /usr/sbin/ipvsadm
规则保存工具: /usr/sbin/ipvsadm-save
规则重载工具: /usr/sbin/ipvsadm-restore
配置文件: /etc/sysconfig/ipvsadm-config
ipvs 调度规则文件: /etc/sysconfig/ipvsadm

2.ipvsadm命令

ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存
ipvsadm -Z [-t|u|f service-address] 清楚计数器

3.LVS集群中的参数

1.管理集群服务中的增删改

-A         #添加
-E         #修改
-t          #tcp服务
-u         #udp服务
-s         #指定调度算法,默认为 WLC
-p         #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一 Realserver
-f         #firewall mask 火墙标记,是一个数字
2. 管理集群中 RealServer 的增删改
-a         #添加 realserver
-e         #更改 realserver
-t          #tcp协议
-u         #udp协议
-f          #火墙 标签
-r          #realserver地址
-g         #直连路由模式
-i          #ipip隧道模式
-m         #nat模式
-w         #设定权重
-Z         #清空计数器
-C         #清空 lvs 策略
-L         #查看 lvs 策略
-n         #不做解析
--rate :输出速率信息

示例:

管理虚拟服务

  • 添加一个虚拟服务192.168.1.100:80,使用轮询算法

ipvsadm -A -t 192.168.1.100:80 -s rr

  • 修改虚拟服务的算法为加权轮询

ipvsadm -E -t 192.168.1.100:80 -s wrr

  • 删除虚拟服务

ipvsadm -D -t 192.168.1.100:80

管理真实服务

  • 添加一个真实服务器192.168.1.123,使用DR模式,权重2

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2

  • 修改真实服务器的权重

ipvsadm -e -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5

  • 删除真实服务器

ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123

查看统计

  • 查看当前配置的虚拟服务和各个RS的权重 

ipvsadm -Ln

  • 查看当前ipvs模块中记录的连接(可用于观察转发情况)

  ipvsadm -lnc

  • 查看ipvs模块的转发情况统计

ipvsadm -Ln --stats | --rate

4.部署NAT模式集群案例

1.Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端 Web 服务器相连
2.Web 服务器采用仅主机网卡与 director 相连
3.Web 服务器网关指向 192.168.0.100
4. 后端 web 服务器不需要连接外网
实验环境
主机名
ip
vip
角色
lvs
仅主机-eth1::192.168.0.100
nat-eth0:172.25.254.100
调度器( VS
webserver1
仅主机:192.168.0.10 GW 192.168.0.100
null
真实服务器( RS
webserver2
仅主机:192.168.0.20 GW 192.168.0.100
null
真实服务器( RS
client
nat:172.25.254.10
测试机

实验步骤

1.实验环境配置
client:
lvs:
webserver1:
webserver2:
2. . lvs 中启用内核路由功能
[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1

3.lvs中安装ipvsadm

[root@lvs ~]# yum install ipvsadm -y

4.在webserver1和webserver2中安装httpd包,并关闭防火墙

webserver1:

[root@webserver1 ~]# yum install httpd -y 
[root@webserver1 ~]# echo "welcome to webserver1 - 192.168.0.10" > /var/www/html/index.html
[root@webserver1 ~]# systemctl restart httpd
[root@webserver1 ~]# systemctl stop firewalld

webserver2:

[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo "welcome to webserver2 - 192.168.0.20" > /var/www/html/index.html
[root@webserver2 ~]# systemctl restart httpd
[root@webserver2 ~]# systemctl stop firewalld

在lvs中检测:

[root@lvs ~]# curl 192.168.0.10
welcome to webserver1 - 192.168.0.10
[root@lvs ~]# curl 192.168.0.20
welcome to webserver2 - 192.168.0.20

5.在lvs中添加调度策略

[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 192.168.0.10:80              Masq    1      0          0         
  -> 192.168.0.20:80              Masq    1      0          0   

6.保存规则

[root@lvs ~]# ipvsadm -Sn
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1

7.删除所有规则

[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

8..重新加载规则

[root@lvs ~]# ipvsadm -R < /etc/sysconfig/ipvsadm
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 192.168.0.10:80              Masq    1      0          0         
  -> 192.168.0.20:80              Masq    1      0          0  

9.以上操作均为临时,如果想开机启动

[root@lvs ~]#  systemctl enable --now ipvsadm.service
#启动服务需要/etc/sysconfig/ipvsadm目录,如果启动不了可以先创这个目录,不写内容也可以
#lvs也需要关闭防火墙
[root@lvs ~]# systemctl stop firewalld

10.测试

[root@client ~]# for i in {1..10}; do curl 172.25.254.100; done
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10

11.修改为权重调用算法

[root@lvs ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 2
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
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    2      0          0         

测试:
[root@client ~]# for i in {1..10}; do curl 172.25.254.100; done
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver2 - 192.168.0.20
welcome to webserver1 - 192.168.0.10
welcome to webserver2 - 192.168.0.20
welcome to webserver2 - 192.168.0.20

5.部署DR模式集群案例

实验环境

主机名ipvip角色
client
172.25.254.10 vmware NAT
null
测试主机
router
NAT-eth0:172.25.254.100
仅主机 - eth1:192.168.0.100
null
路由器
lvs
192.168.0.50
GW 192.168.0.100  仅主机
lo:192.168.0.200
调度器
RS1
192.168.0.10
GW 192.168.0.100  仅主机
lo:192.168.0.200
web 服务
1
RS2
192.168.0.20,
GW 192.168.0.100  仅主机
lo:192.168.0.200
web 服务
2

实验步骤

1.实验环境配置

client:

router:

lvs:

RS1:

RS2:

2.在router中启用内核路由功能

[root@router ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1

3.RS1RS2中解决响应问题

DR 模型中各主机上均需要配置 VIP ,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各 RS 使用 arptables
(3) 在各 RS 修改内核参数,来限制 arp 响应和通告的级别
限制响应级别 :arp_ignore
0: 默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 仅在请求的目标 IP 配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别 :arp_announce
0: 默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1: 尽量避免将接口信息向非直接连接网络进行通告
2: 必须避免将接口信息向非本网络进行通告
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 

[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 

4.在RS1和RS2中安装httpd包,并关闭防火墙

RS1:

[root@RS1 ~]# yum install httpd -y 
[root@RS1 ~]# echo "welcome to RS1 - 192.168.0.10" > /var/www/html/index.html
[root@RS1 ~]# systemctl restart httpd
[root@RS1 ~]# systemctl stop firewalld

RS2:

[root@RS2 ~]# yum install httpd -y
[root@RS2 ~]# echo "welcome to RS2 - 192.168.0.20" > /var/www/html/index.html
[root@RS2 ~]# systemctl restart httpd
[root@RS2 ~]# systemctl stop firewalld

5.lvs中安装ipvsadm,并添加策略

[root@lvs ~]# yum install ipvsadm -y

[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0         
  -> 192.168.0.20:80              Route   2      0          0 

[root@lvs ~]# systemctl stop firewalld

6.测试

[root@client ~]# for i in {1..10}; do curl 192.168.0.200; done
welcome to RS2 - 192.168.0.20
welcome to RS1 - 192.168.0.10
welcome to RS2 - 192.168.0.20
welcome to RS2 - 192.168.0.20
welcome to RS1 - 192.168.0.10
welcome to RS2 - 192.168.0.20
welcome to RS2 - 192.168.0.20
welcome to RS1 - 192.168.0.10
welcome to RS2 - 192.168.0.20
welcome to RS2 - 192.168.0.20

6.防火墙标签解决轮询错误

1.轮询规则中可能会遇到的错误
http https 为例,当我们在 RS 中同时开放 80 443 端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题
当我第一次访问 80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1
问题呈现
RS1 RS2 中安装 mod_ssl 并重启 apache
]# yum install mod_ssl -y
]# systemctl restart httpd
lvs 中设置调度,因为我们要调度 80 443 两个端口所以我们需要设定两组策略
]# ipvsadm -C
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:443 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 rr
-> 192.168.0.101:80 Route 1 0 0
-> 192.168.0.102:80 Route 1 0 0
TCP 192.168.0.100:443 rr
-> 192.168.0.101:443 Route 1 0 0
-> 192.168.0.102:443 Route 1 0 0
测试问题
[root@node10 ~]# curl http://192.168.0.100;curl -k https://192.168.0.100
RS1 server - 192.168.0.101
RS1 server - 192.168.0.101
当访问 vip 时两次调度都到了
2. 防火墙标记解决轮询调度问题
FWM:FireWall Mark
MARK target 可用于给特定的报文打标记 ,
--set-mark value
其中 :value 可为 0xffff 格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服务: 可将多个不同的应用使用同一个集群服务进行调度
实现方法 :
Director 主机打标记 :
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports
$portl,$port2,..-i MARK --set-mark NUMBER
Director 主机基于标记定义集群服务 :
ipvsadm -A -f NUMBER [options]
示例如下:
vs 调度器中设定端口标签,人为 80 443 是一个整体
]# iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport --dports
80,443 -j MARK --set-mark 6666
设定调度规则
[root@lvs ~]# ipvsadm -A -f 6666 -s rr
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.101 -g
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.102 -g
测试结果
[root@node10 ~]# curl -k https://192.168.0.100
RS2 server - 192.168.0.102
[root@node10 ~]# curl -k https://192.168.0.100;curl 192.168.0.100
RS1 server - 192.168.0.101
RS2 server - 192.168.0.102
3.lvs 持久链接
在我们客户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们可以用sh 算法,但是 sh 算法比较简单粗暴,可能会导致调度失衡
解决方案
在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把这个源的主机调度到了那个RS
如果在短期(默认 360S )内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到同一台RS 上。
如果过了比较长的时间(默认最长时间 360s )同源访问再次来访,那么就会被调度到其他的 RS
ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]] 默认 360
lvs 调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]
[root@lvs ~]# ipvsadm -LnC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1996625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Open3D 使用Jet颜色映射渲染点云

目录 一、概述 1.1Jet颜色映射的定义 1.2Jet颜色映射的应用 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2渲染后点云 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&am…

书生大模型实战营闯关记录----第六关:大语言模型微调实战,LoRA和QLoRA微调,理论+Xtuner微调实操

文章目录 大语言模型微调基础1 基本概念1.1 Finetune简介1.1.1 Finetune的两种范式 1.2 微调技术1.2.1 LoRA简介1.2.2 QLoRA简介 1 微调前置基础2 准备工作2.2 创建虚拟环境2.3 安装 XTuner2.4 模型准备 3 快速开始3.1 微调前的模型对话3.2 指令跟随微调3.2.1 准数据文件3.2.2 …

ELK架构介绍

一、ELK简介 ELK 是由三个开源软件组成的&#xff0c;分别是&#xff1a;Elasticsearch、Logstash和Kibana&#xff0c;这三个软件各自在日志管理和数据分析领域发挥着重要作用。Elasticsearch提供分布式存储和搜索能力&#xff1b;Logstash负责数据收集和处理&#xff0c;而K…

如何简单粗暴的下载m3u8视频并转换为mp4格式

m3u8文件介绍 M3U&#xff08;Moving Picture Experts Group Audio Layer 3 Uniform Resource Locator&#xff09;这种文件格式是音视频文件的列表文件&#xff0c;是纯文本文件。你下载下来打开它&#xff0c;播放软件并不是播放它&#xff0c;而是根据它的记录找到网络地址…

react+taro的文字粘贴识别功能

效果图 <View className"components-page"><Textareastyle"font-size:12PX"className"textareaStyle"placeholderClass"placeholderStyle"placeholder"例&#xff1a;公司&#xff1a;xxxx公司, 电话:13*********, 地址…

MybatisPlus——service批量新增

Service接口 批量新增 批量插入10万条用户数据&#xff0c;并作出对比&#xff1a; 普通for循环插入IService的批量插入 Test void testSaveOneByOne() {long b System.currentTimeMillis();for (int i 1; i < 100000; i) {userService.save(buildUser(i));}long e Sy…

leetcode递归(LCR 024. 反转链表)

前言 经过前期的基础训练以及部分实战练习&#xff0c;粗略掌握了各种题型的解题思路。现阶段开始专项练习。 描述 给定单链表的头节点 head &#xff0c;请反转链表&#xff0c;并返回反转后的链表的头节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&am…

2024年6月scratch图形化编程等级考试四级真题

202406 青少年软件编程等级考试Scratch四级真题 试卷总分数&#xff1a;100分 考试时长&#xff1a;60 分钟 第 1 题 运行下列程序&#xff0c;输入单词“PLAY”&#xff0c;最后角色说&#xff1f;&#xff08; &#xff09; A&#xff1a;LY4AP B&#xff1a;AP4LY C&am…

【Linux】【git】创建使用+分支管理+场景模拟

文章目录 引子1. 创建 提交 删除init - - 创建一个初始化的本地仓库config - - 对本地仓库的配置add - - 新增commit - - 提交rm - - 删除 2. 状态查看 和 版本回退log - - 日志status - - 查看diff - - 比较reset - - 版本回退场景模拟1_1 reflog - - 参考日志场景模拟1_2 3. …

K短路(A*算法)

K短路&#xff1a; 在图论中&#xff0c;K短路问题是指在一个图中找到从起点s到终点t的第K短的路径。其中&#xff0c;第1短路径即为最短路径。K短路算法在实际应用中有着广泛的用途&#xff0c;如在通信网络中找到替代的最短路径等。 基本概念 K短路&#xff1a;从起点s到终…

美国服务器稳定么?影响服务器稳定性的6个因素

美国服务器稳定么&#xff1f;美国服务器的稳定性是相当不错的&#xff0c;这主要得益于其先进的技术、成熟的基础设施以及严格的管理措施。美国拥有众多知名的服务器提供商&#xff0c;这些提供商通常会采用顶级的硬件设施&#xff0c;如英特尔、AMD等知名品牌的处理器&#x…

Chromium编译指南2024 - Android篇:前置要求(一)

1.引言 欢迎阅读《Chromium编译指南2024 - Android篇》。本指南旨在帮助开发者理解和掌握在Android平台上编译Chromium的全过程。Chromium是一个开源的浏览器项目&#xff0c;由Google主导开发&#xff0c;并为多个现代浏览器提供基础代码。Android作为全球使用最广泛的移动操…

DirectX_web_setup.exe

F:\Downloads\录屏软件\OBS DirectX_web_setup.exe

IP实现https访问的简易方式

很多项目怕麻烦不愿意申请域名&#xff0c;也不想备案&#xff0c;所以直接用服务器IP地址做WEB项目更快一些&#xff0c;但又想给IP地址申请SSL证书&#xff0c;这种情况下需要用到IP类型的专用SSL证书。 IP SSL证书是支持IP地址实现HTTPS加密的SSL证书&#xff0c;为不能提供…

Linux服务管理(五)Apache服务优化

CustomLog "|/bin/rotatelogs -l /wwwlogs/access_%Y%m%d.log 86400" combined日志旋转可参考这篇文章&#xff1a; https://blog.csdn.net/weixin_43576565/article/details/139989701 要优化首先你得有Apache yum -y install httpd启动 service httpd start写入…

[Qt][按钮类控件]详细讲解

目录 0.按钮状态说明1.Push Button2.Radio Button3.Check Box4.Tool Button 0.按钮状态说明 clicked&#xff1a;⼀次 ⿏标按下⿏标释放 触发pressed&#xff1a;鼠标按下时触发released&#xff1a;鼠标释放时触发toggled&#xff1a;checked属性改变时触发 1.Push Button QP…

seaborn与pandas绘图入门

导入环境 import numpy as np import pandas as pd from numpy.random import randn import matplotlib.pyplot as plt 若是在jupyter notebook编译&#xff0c;需要额外执行下列语句 %matplotlib notebook 该语句在Jupyter Notebook或JupyterLab中使用的IPython魔法命令&…

最新版的AutoGPT,我搭建好了

最近AutoGPT不是更新了嘛 安装 我按照官方的教程 在本地搭建好了 改动 可见的改动&#xff0c;主要是把原来的纯命令行改成前后端的形式 看下前端界面 界面比较简单&#xff0c;主要分3个大块 监控 第一个是监控 主要是看你在 build 里构建的Agents的运行情况 build 第一个是Ag…

C++笔试练习笔记【7】:力扣 91. 解码方法 动态规划练习

文章目录 题目题目分析思路解法正常解法优化解法 题目 题目链接&#xff1a;力扣 91. 解码方法 备用链接&#xff1a;https://leetcode.cn/problems/decode-ways/description/ 题目分析 1.首先我们知道题目给定A~Z编码为1 ~26 &#xff0c;而数字十一字符串的形式给出所以…

js构造函数的prototype赋值总结

我们知道通过构造函数的prototype,可以生成让所有实例对象访问的通用属性和方法,下面通过代码来解释这个过程 function Person(name){this.name name; }Person.prototype.sex man我们定义了一个构造函数Person,然后给它的prototype添加了一个sex的属性,下面我们来看看Person…