本帖最后由 新手592964 于 2021-10-25 16:13 编辑
零信任aTrust控制中心、代理网关集群模式下使用的集群原理分别是什么?
先说答案— LVS
综合网关使用的是LVS的NAT模式(地址转换模式)
分离式控制中心使用的是LVS的NAT模式(地址转换模式)
分离式代理网关使用的是LVS的DR模式(直接路由模式)
原理简述:
LVS 是Linux Virtual Server的简写,也就是linux虚拟服务器。LVS负载均衡常见的有三种工作模式,分别是
1.地址转换(简称NAT模式):集群主节点把用户的请求数据包的目的IP地址,修改为从节点IP并把该数据包分发到从节点,从节点处理完毕后把响应数据包交给主节点,主节点再把响应数据包的源IP地址修改为集群IP地址并发送至客户端;
2.直接路由(简称DR模式):集群主节点把用户的请求数据包的目的mac地址修改为从节点的mac地址并分发给从节点,从节点处理完成后以集群IP为源IP把响应数据包直接发送至客户端(注意这里请求和响应数据的IP没进行修改); 3.IP隧道(简称TUN模式):主节点不修改数据包的IP或mac等内容,而是直接将该数据包封装到隧道中并发送到从节点,从节点接到数据包后拆开原报文头部进行处理,处理完成后以集群IP为源IP把响应报文发送至客户端。 其实企业中最常用的是 DR 实现方式,而 NAT 配置上比较简单和方便。下面进一步总结各模式的详细原理和特点。
首先了解下集群用到的基本概念: 1.真实IP(RIP):各个节点物理网卡上的IP地址,不随节点角色切换而变化,对用户不可见;
2.集群IP(VIP):即浮动IP,对外提供服务的IP,绑定在分发器角色的节点上;
3.真实MAC(RMAC):各个节点物理网卡的MAC地址,对应节点的真实IP地址;
4.虚拟MAC(VMAC):对应节点的集群mac地址,由集群软件生成,不存在使用虚拟MAC的物理网卡,跟随集群IP地址一起在节点间浮动;
5.IPVS: LVS的主要组成部分,在网络层实现基于IP的连接分发,连接分发记录保持、同步 。
6.权值(WEIGHT):节点性能指标,为0时表示不接收服务。
7.真实服务器(RealServer):提供服务的节点,接收分发器的数据同步,也就是我们设备中的从节点;
8.分发器 (Director):分发内容请求的节点,并向真实服务器同步数据,也就是我们设备中的主节点。 LVS提供了3种IP负载均衡技术:
一、NAT模式(地址转换)
数据流分析:
1.用户发送请求到分发器,请求的数据报文(源IP是客户端IP,目标IP是集群IP)到达内核空间。
2.内核空间判断数据包的目标IP是本机,此时IPVS比对数据包请求的服务是集群服务,因此修改数据包的目标IP地址为真实服务器IP,重新封装数据包(源IP为客户端IP,目标IP为真实服务器IP),然后根据负载算法把数据包发送给真实服务器。
3.真实服务器比对发现目标IP是本机的IP,重新封装报文(源IP为真实IP,目标IP为客户端IP)发回给分发器。
4.分发器重新封装数据包,将源IP地址修改为集群IP,然后发送给客户端。 此时报文的源IP为集群IP,目标IP为客户端IP。
本模式的特点:
1.真实服务器的IP必须使用私有IP地址,网关指向分发器IP;
2.分发器与真实服务器必须在同一网段内;
3.分发器作为所有服务器节点的网关,也就是说请求和响应报文都需要经过分发器;
4.支持端口映射;
5.高负载场景中,分发器压力比较大,易成为性能瓶颈。
二、DR模式(直接路由)
数据流分析:
1.用户发送请求到分发器,请求的数据报文(源IP是客户端IP,目标IP是集群IP)到达内核空间;
2.由于分发器IP和真实服务器IP在同一个二层网络中,所以是通过二层数据链路层来传输;
3.内核空间判断数据包的目标IP是本机IP,此时IPVS比对数据包请求的服务是集群服务,因此重新封装数据包,修改源MAC地址为分发器的MAC地址,目标MAC地址的真实MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给真实服务器;
4.真实发现请求报文的目的MAC地址是自己的MAC地址,就接收此报文,重新封装报文(源IP地址为集群IP,目标IP为客户端IP),将响应报文直接通过lo接口传送给本地物理网卡然后向外发出;
5.真实服务器直接将响应报文传送到客户端。
DR模式的特点:
1.分发器和真实服务器必须在同一个二层网络中;
2.真实服务器IP地址可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对真实服务器IP进行直接访问;
3.所有的请求报文经由分发器,但响应报文必须不经过;
4.真实服务器的网关绝不允许指向分发器IP(不允许数据包经过分发器)。
5.RS上的lo接口配置VIP的IP地址。(所以DR模式的集群IP是配置在集群中的每台设备上的)
三、TUN模式(IP隧道) —注意 :atrust并未使用此模式
数据流分析:
1.用户发送请求到分发器,请求的数据报文(源IP是客户端IP,目标IP是集群IP)到达内核空间;
2.分发器接收到客户端请求包,进行IP Tunnel封装。即在原有的包头加上IP Tunnel的包头,然后根据负载算法发送到真实服务器;
3.真实服务器根据IP Tunnel包头信息(隧道就是种逻辑上的隐形隧道,只有分发器和真实服务器之间懂)收到请求包,然后解开IP Tunnel包头信息,得到客户端的原始请求包并进行响应处理;
4.响应处理完毕之后,RS服务器使用自己的接口,将这个响应数据包发送给客户端。源IP地址还是集群IP地址(RS节点服务器需要在本地回环接口配置集群IP)。
TUN模式的特点:
1.各真实服务器IP与分发器IP不需要在同一个网络中,这样一来lvs/tun就可以应用在跨网络跨机房环境集群环境中(异地灾备);
2.真实服务器的IP可以使用私有地址,也可以使用公网地址,以方便配置;不支持支持端口映射;
3.真实服务器必须为uninx操作系统,需要在loopback配置集群ip,必须支持ip tunnel隧道,即;
4.分发器仅负责处理入站请求,响应报文由真实服务器直接发往客户端,也是属于半链接状态;
5.真实服务器不能将网关指向分发器,而直接使用前端网关响应请求报文;
6.负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为多台真实服务器服务,负载均衡器不再是系统的瓶颈。(性能上,DR>TUN>NAT,DR和TUN一般支持过100台节点,NAT模式支持10~20台节点)
7.这种方式需要所有的服务器支持IP Tunneling(IP Encapsulation)协议。
集群调度算法:
1.轮询rr:轮询算法,按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器; 2.加权轮询wrr:加权轮询调度算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多; 3.最少链接lc:是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1; 4.加权最少链接wlc:该算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值; 5.基于局部性的最少链接LBC:该算法是是针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器; 6.带复制的基于局部性最少链接LBLCR:是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度; 7.目标地址散列DH:先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空; 8.源地址散列SH:先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。 9.最短的期望的延迟SED:基于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 就把请求交给得出运算结果最小的服务器; 10.最少队列调度NQ:最少队列调度算法,无需队列,如果有真实服务器的连接数等于0就直接分配过去,不需要在进行SED运算。
这10种调度算法,其中前面四种较为常见,后面几种仅作了解即可。
我们设备采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的
活动连接负载。调度器可以根据真实服务器的负载情况,并动态地调整其权值。 |