LVS 简介
LVS –Linux Virtual Server ,Linux 虚拟服务器;LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
LVS中有三种常用模式,我们对比DR,NAT,TUN三种模式区别,再来简单介绍新转发模式FULLNAT
VS/DR
1、DR模式网络拓扑
VS/DR 利用大多数 Internet 服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量。调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB 相连。VIP 地址为调度器和服务器组共享,调度器配置的 VIP 址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把 VIP 地址配置在各自的 NonARP 网络设备上,它对外面是不可见的,只是用于处理目标地址为 VIP 的网络请求。
2、LVS-DR工作原理
Diector结合用户的请求,然后根据负载均衡算法选取一台realserver,将包转发过去,最后由realserve直接回复给用户 。
1)、我这里为了方便,client 是与 vip 同一网段的机器。如果是外部的用户访问,将 client 替换成gateway 即可,因为 IP 包头是不变的,变的只是源 mac 地址。下面是IP包头及数据帧头信息:
2)、VS 根据负载均衡算法选择一台 active 的 realserver(假设是 192.168.57.122),将此 RIP 所在网卡的 mac 地址作为目标 mac 地址,发送到局域网里。此时 IP 包头及数据帧头信息如下:
3)、realserver(192.168.57.122)在局域网中收到这个帧,拆开后发现目标 IP(VIP)与本地匹配,于是处理这个报文。随后重新封装报文,发送到局域网。此时 IP 包头及数据帧头信息如下:
4)、如果 client 与 VS 同一网段,那么 client(192.168.57.135)将收到这个回复报文。如果跨了网段,那么报文通过 gateway/路由器经由 Internet 返回给用户。Load Balance:192.168.0.254
Virtual IP: 192.168.0.200
Gateway: 192.168.0.254
Realserver1: 192.168.0.3
Realserver1: 192.168.0.4
VS/TUNNEL
1、TUN模式网络拓扑
它的连接调度和管理与 VS/NAT 中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个 IP 报文中,再将封装后的 IP 报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为 VIP 的报文,服务器发现 VIP地址被配置在本 地的 IP 隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
VS/TUN技术对服务器有要求,即所有的服务器必须支持 “ IP Tunneling” 或者 “ IPEncapsulation”协议。目前,VS/TUN 的后端服务器主要运行 Linux 操作系统。在 VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调 度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有 100Mbps的全双工网卡,整个系统的最大吞吐量可超过1Gbps。所以,VS/TUN 可以极大地增加负载调度器调度的服务器数量。VS/TUN 调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以 用来构建高性能的超级服务器。
VS/NAT
1、VS/NAT网络拓扑
在一组服务器前有一个调度器,它们是通过 Switch/HUB 相连接的。这些服务器提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执 行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,可以通过网络文件系统(如 NFS)共享,也可以通过一个分布式文件系统来提供。
VS/NAT 的优点是服务器可以运行任何支持 TCP/IP 的操作系统,它只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。缺点是它的伸缩能力限, 当服务器结点数目升到 20 时,调度器本身有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。
DR TUN NAT 三种模式不足
1、DR:
1).LVS-RS间必须在同一vlan
2).RS上绑定VIP,风险大
2、TUNNEL:
1).RS配置复杂(IPIP模块等)
2).RS上绑定VIP,风险大
3、NAT:
1).RS/ROUTER配置策略路由
解决方案:
LVS各转发模式运维成本高
新转发模式FULLNAT:实现LVS-RealServer间跨vlan通信,并且in/out都流经LVS
缺少防御攻击模块
SYNPROXY:synflood攻击防御模块
其他TCP FLAG DDOS攻击防御策略
性能无法线性扩展
Clister部署模式
FULLNAT
主要思想:引入local address(内网ip地址),cip-vip
转换为lip->rip,而 lip和rip均为IDC内网ip,可以跨vlan
通讯;
keepalived配置方式:
virtual_server 1.1.1.1 {
lb_kind FNAT/DR/NAT/TUNNEL
local_address {
192.168.1.1
}
- 1
- 2
- 3
- 4
- 5
- 6
1、FULLNAT转发模式:
2、FULLNAT实现原理
1).客户端将访问vip报文发送给LVS服务器;
2).LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),源地址改为自己的ip地址(SNAT),发送给后端真实服务器;
3).后端服务器在处理完之后要将响应的报文返回给lvs;
4).LVS将返回的数据包源地址改为自己(SNAT),目的地址改为客户端(DNAT),发送给客户端。
FULLNAT模式和NAT模式相似,但是与NAT不同的是NAT模式只做了两次地址转换,FULLNAT模式做了四次。
LVS负载调度算法
在内核中的连接调度算法上,IPVS已实现了以下八种调度算法:
一、轮叫调度(RoundRobin Scheduling )
轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行 i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
二、加权轮叫调度(Weighted RoundRobin Scheduling )
加权轮叫调度 (Weighted RoundRobin Scheduling)算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的权值为2,则表示服务器B的处理性能是A的两倍。加权轮叫调度算法是按权值的高低和轮叫方式分配请求到各服务器。权值高的服务器先收到的连接,权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
三、最小连接调度(LeastConnection Scheduling )
最小连接调度(Least Connection Scheduling)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态调度算法,它通过服务器当前所活跃的连接数来估计服务器的负载情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加 1;当连接中止或超时,其连接数减一。
四、加权最小连接调度(Weighted LeastConnection Scheduling)
加权最小连接调度(Weighted LeastConnection Scheduling)算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为 1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
五、基于局部性的最少链接(LocalityBased Least Connections Scheduling )
基于局部性的最少链接调度(LocalityBased Least Connections Scheduling,以下简称为LBLC)算法是针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以
处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中率,从而提高整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器,若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
六、带复制的基于局部性最少链接(LocalityBased Least Connections with Replication Scheduling)
带复制的基于局部性最少链接调度(LocalityBased Least Connections with Replication Scheduling,以下简称为LBLCR)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC 算法维护从一个目标IP地址到一台服务器的映射。对于一个“热门”站点的服务请求,一台Cache服务器可能会忙不过来处理这些请求。这时,LBLC调度算法会从所有的Cache服务器中按“最小连接”原则选出一台Cache服务器,映射该“热门”站点到这台Cache服务器,很快这台Cache服务器也会超载,会重复上述过程选出新的Cache服务器。这样,可能会导致该“热门”站点的映像会出现 在所有的Cache 服务器上,降低了 Cache 服务器的使用效率。LBLCR调度算法将“热门”站点映射到一组Cache服务器(服务器集合),当该“热门”站点的请求负载增加时,会增加集合里的Cache服务器,来处理不断增长的负载;当该“热门”站点的请求负载降低时,会减少集合里的Cache服务器数目。这样,该“热门”站点的映像不太可能出现在所有的Cache服务器上,从而提供Cache集群系统的使用效率。
LBLCR算法先根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按“最小连接“ 原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
七、目标地址散列调度(Destination Hashing Scheduling )
目标地址散列调度 (Destination Hashing Scheduling)算法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
八、源地址散列调度(Source Hashing Scheduling)
源地址散列调度(Source Hashing Scheduling)算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一一叙述。在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出入口
转载请注明:SuperIT » LVS负载均衡四种工作模式(DR、TUNNEL、NAT、FULLNAT)原理及负载调度算法介绍