使用LVS架设服务器集群系统实现负载均衡与高可用的知识点详解
一、LVS体系结构
LVS(Linux Virtual Server)是一种基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。LVS体系结构如下图所示:
使用LVS架设的服务器集群系统有三个部分组成: 《1》最前端的负载均衡层(用Load Balancer表示); 《2》中间的服务器群组层(用Server Array表示); 《3》最底端的数据共享存储层(用Shared Storage表示)。 在用户看来,所有的内部应用都是透明的,用户只是在使一个虚拟服务器提供的高性能服务。 | ||
序号 | LVS的组成部分 | 说明 |
1 | Load Balancer层 | 位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。 同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。 |
2 | Server Array层 | 由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。 在实际的应用中,Director Server也可以同时兼任Real Server的角色。 |
3 | Shared Storage层 | 是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性。 一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统(如:Red hat的GFS文件系统,oracle提供的OCFS2文件系统等)。 |
从整个LVS结构可以看出: 《1》Director Server是整个LVS的核心(目前,用于Director Server的操作系统只能是Linux和FreeBSD,linux2.6及其更高版本内核不用任何设置就可以支持LVS功能); 《2》对于Real Server,几乎可以是所有的系统平台(Linux、windows、Solaris、AIX、BSD系列都能很好的支持)。 |
二、IP负载均衡
负载均衡技术有很多实现方案,有基于DNS域名轮流解析的方法、有基于客户端调度访问的方法、有基于应用层系统负载的调度方法,还有基于IP地址的调度方法,在这些负载调度算法中,执行效率最高的是IP负载均衡技术。
LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件。lvs集群整个执行流程为:访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。
当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术,IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR,详述如下:
2.1、DR模式
DR模式(即Virtual Server via Direct Routing),也就是用直接路由技术实现虚拟服务器。VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户。这种调度方式的性能最好的。如下图所示:
LB(Load Balancer)负载均衡。 VIP(Virtual IP Address)虚拟IP地址。 RS(Real Server)真实物理机服务器。 | |
序号 | 说明 |
1 | DR模式是通过在调度器LB上修改数据包的目的MAC地址实现转发。因此数据包来源地址保持不变,目的地址仍然是VIP地址。 |
2 | 请求的报文经过调度器,而RS响应处理后的报文无需经过调度器LB,因此并发访问量大时使用效率很高(和NAT模式比)。 |
3 | 因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网里面。 |
4 | RS主机需要绑定VIP地址在LO接口上,并且需要配置ARP抑制。 |
5 | RS节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让RS直接出网就可以。 |
6 | 由于DR模式的调度器仅做MAC地址的改写,所以调度器LB就不能改写目标端口,那么RS服务器就得使用和VIP相同的端口提供服务。 |
2.2、NAT/FULL NAT模式
NAT模式(即:Virtual Server via Network Address Translation,也就是网络地址翻译技术实现虚拟服务器)。当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时将报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server将数据返回给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。如下图所示:
序号 | NAT模式的优点 | NAT模式的缺点 |
1 | NAT 模式不需要 LB IP 和realserver ip 在同一个网段。 | NAT技术将请求的报文和响应的报文都需要通过LB进行地址改写,因此网站访问量比较大的时候,LB负载均衡调度器有比较大的瓶颈,一般要求最多只能支持10-20台节点 |
2 | 只需要在LB上配置一个公网IP地址就可以了。 | 每台内部的realserver服务器的网关地址必须是调度器LB的内网地址。 |
3 | NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。 |
FULL NATT模式,与NAT模式基本一样,不同之处在于对报文的处理方面: | |
序号 | 说明 |
1 | NAT模式client请求VIP 时,仅替换了package 的dst ip(目标IP地址)。 |
2 | FULL NAT 在client请求VIP 时,不仅替换了package 的dst ip,还替换了package的 src ip;VIP返回给client时也替换了src ip。 |
3 | FULL NAT模式也不需要LB IP和realserver ip 在同一个网段。 |
4 | FULL NAT因为要更新Source IP所以性能正常比NAT模式下降10%。 |
2.3、IP TUNNEL模式
TUN(即:Virtual Server via IP Tunneling) 也就是通过IP隧道技术实现虚拟服务器。在VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器。此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以在独立的一个网络中。因此,在TUN方式中,调度器将只处理用户的报文请求,从而使集群系统的吞吐量大大提高。
它和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器。
序号 | 说明 |
1 | TUNNEL 模式必须在所有的realserver 机器上面绑定VIP的IP地址。 |
2 | TUNNEL 模式的vip ------>realserver 的包通信通过TUNNEL 模式,不管是内网和外网都能通信,所以不需要lvs vip跟realserver 在同一个网段内。 |
3 | TUNNEL 模式 realserver会把packet 直接发给client 不会给lvs了。 |
4 | TUNNEL 模式走的隧道模式,所以运维起来比较难,所以一般不用。 |
三、LVS负载调度算法说明
LVS的调度算法决定了如何在集群节点之间分布工作负荷。当director调度器收到来自客户端访问VIP的上的集群服务的入站请求时,director调度器必须决定哪个集群节点应该处理请求。Director调度器用的调度方法基本分为两类:
《1》固定调度算法:rr,wrr,dh,sh。
《2》动态调度算法:lc,wlc,lblc,lblcr。
序号 | 算法 | 说明 |
1 | rr | 【轮询算法】它将请求依次分配给不同的rs节点,也就是RS节点中均摊分配。这种算法简单,但只适合于RS节点处理性能差不多的情况。 |
2 | wrr | 【加权轮询调度】它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。 |
3 | dh | 【目的地址哈希调度(destination hashing)】以目的地址为关键字查找一个静态hash表来获得需要的RS。 |
4 | sh | 【源地址哈希调度(source hashing)】以源地址为关键字查找一个静态hash表来获得需要的RS。 |
1 | lc | 【最小连接数调度(least-connection)】IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。 |
2 | wlc | 【加权最小连接数调度】假设各台RS的权重依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS。 |
3 | lblc | 【基于地址的最小连接数调度(locality-based least-connection)】将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。 |
4 | lblcr | 【带有复制的局部最少连接算法 】lblcr 算法是在lblc 算法的基础上增加了一个node 列表,先依据lblc 算法计算出与源请求IP地址最近的一组node ,然后再决定把请求发送到最近一组中的最近的一台node 。 若此node没有超载则将请求转发给这台node, 如果超载则依据”最少连接”原则找到最少连接的node并将此node 加入集群组中。 并将请求转给此node。 |
四、LVS调度算法在生产环境选型建议
序号 | 说明 |
1 | 一般的网络服务(如:www,mail,mysql)等常用的LVS调度算法选择: 《1》基本轮询调度rr |
2 | 基于局部性的最小连接lblc和带复制的给予局部性最小连接lblcr主要适用于【web cache】和【DB cache】。 |
3 | 源地址散列调度SH和目标地址散列调度DH可以结合使用在【防火墙集群中】,可以保证整个系统的出入口唯一。 |
实际使用中这些算法的适用范围很多,工作中最好参考内核中的连接调度算法的实现原理,然后根据具体的业务需求合理的选型。 |