web服务与高可用集群原理详解
1、集群特点
1>高性能
提高处理性能的能力一直是集群技术研究的一个重要目标之一
2>低成本
在达到同样性能的条件下,采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比
3>高可扩展性
通常情况下,用户若想扩展系统能力,不得不购买更高性能的服务器,才能获得额外所需的CPU 和存储器。如果采用集群技术,则只需要将新的单个服务器加入现有集群中即可,对于客户而言,服务器无论从连续性还是性能上都几乎没有变化,系统在不知不觉中完成了升级。
4>高可靠性
集群技术使系统在故障发生时仍可以继续工作,将系统停机时间减到最小。集群系统在提高系统的可靠性的同时,也大大减小了系统故障带来的业务损失。
2、集群的优势
1>性能/价格比
网络服务的工作负载通常是大量相互独立的任务,通过一组服务器分而治之,可以获得很高的整体性能。组成集群系统的PC服务器或RISC服务器和标准网络设备因为大规模生产降级成本,价格低,具有较高的性能/价格比。
2>可伸缩性
集群系统中的结点数目可以增长到几千个,乃至上万个,其伸缩性远超过单台超级计算机。
3>高可用
在硬件和软件上都有冗余,通过检测软硬件的故障,将故障屏蔽,由存活结点提供服务,可实现高可用性。
4>透明性
客户端应用程序与集群系统交互时,就像与一台高性能、高可用的服务器交互一样,客户端无需做任何修改。部分服务器的切入切出不会中断服务,这对用户也是透明的。
5>可编程性
在集群系统上,容易开发应用程序。
3、集群分类
集群计算机按功能和结构可以分成以下几类:
负载均衡集群(Load balancing clusters)
高可用性集群(High-availability (HA)clusters)
高性能计算集群(High-performance(HPC)clusters)
科学计算(Grid computing)
提示:前两种是互联网行业最常用的集群模式
4、负载均衡集群
负载均衡集群为企业提供了更为实用、性价比更高的系统解决方案。负载均衡集群使客户访问请求压力及负载可以在计算机集群中尽可能平均地分摊处理。客户访问请求负载通常包括应用程序处理负载和网络流量负载。这样的系统非常适合向使用同一组应用程序的大量用户提供服务。每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间动态分配,以实现负载均衡。
负载均衡集群运行时,一般通过一个或者多个前端负载均衡器将客户访问请求分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。这样的计算机集群有时也被称为服务器群(Server Farm)。一般高可用性集群和负载均衡集群都会使用类似技术,或同时具有高可用性与负载均衡的特点。
5、高可用集群
一般是指当集群中任意一个节点失效的情况下,其上的任务会自动转移到其他正常的节点上,该过程并不影响整个集群的运行。
高可用性集群使服务器系统的运行速度和响应速度尽可能快。他们经常利用在多台机器上运行的冗余节点和服务,用来相互跟踪。如果某个节点失败,它的替补者将在几秒钟或更短时间内接管它的职责。因此,对于用户而言,集群里的任意一台集群宕机,业务不会受到影响(理论情况)。
6、负载均衡集群:LVS集群体系结构及特点
1>LVS简介
LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是 www.linuxvirtualserver.org。在linux2.4内核之后 LVS 已经是 Linux 标准内核的一部分
使用 LVS 技术要达到的目标是:通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
2>LVS体系结构
使用 LVS 架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用 Load Balancer表示,中间的服务器群组层,用 Server Array 表示,最底端的数据共享存储层,用 Shared Storage表示。
Load Balancer 层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS 模块就安装在 Director Server 上,而 Director 的主要作用类似于一个路由器,它含有完成 LVS 功能所设定的路由表,通过这些路由表把用户的请求分发给 Server Array层的应用服务器(Real Server)上。同时,在 Director Server 上还要安装对 Real Server 服务的监控模块 Ldirectord,此模块用于监测各个 Real Server 服务的健康状况。在 Real Server不可用时把它从 LVS 路由表中剔除,恢复时重新加入。
Server Array 层:由一组实际运行应用服务的机器组成,Real Server 可以是 WEB 服务器、MAIL 服务器、FTP 服务器、DNS 服务器、视频服务器中的一个或者多个,每个 Real Server之间通过高速的 LAN 或分布在各地的 WAN 相连接。在实际的应用中,Director Server 也可以同时兼任 Real Server 的角色。
Shared Storage 层:是为所有 Real Server 提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过 NFS 网络文件系统共享数据,但是 NFS 在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如 Red hat 的 GFS 文件系统,oracle 提供的 OCFS2 文件系统等。
为了方便大家探讨 LVS 技术,LVS 社区提供了一个命名的约定,内容如下表:
LVS 集群内部的节点称为真实服务器(Real Serve),也叫做集群节点。请求集群服务的计算机称为客户计算机。与计算机通常在网上交换数据包的方式相同,客户计算机、Director 和真实服务器使用 IP 地址彼此进行通信。不同架构角色命名情况如下图:
3>LVS工作模式
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。
VS/NAT : 即( Virtual Server via Network Address Translation )
也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟 IP 地址)改写成选定的 Real Server 地址,同时报文的目标端口也改成选定的 Real Server 的相应端口,最后将报文请求发送到选定的 Real Server。在服务器端得到数据后,Real Server 返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟 IP 地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。
VS/TUN :即( Virtual Server via IP Tunneling )
也就是 IP 隧道技术实现虚拟服务器。它的连接调度和管理与 VS/NAT 方式一样,只是它的报文转发方法不同,VS/TUN 方式中,调度器采用 IP 隧道技术将用户请求转发到某个 Real Server,而这个 Real Server 将直接响应用户的请求,不再经过前端调度器,此外,对 Real Server 的地域位置没有要求,可以和 Director Server 位于同一个网段,也可以是独立的一个网络。因此,在 TUN 方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
VS/DR : 即( Virtual Server via D irect Routing )
也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与 VS/NAT 和 VS/TUN 中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC 地址,将请求发送到 Real Server,而 Real Server 将响应直接返回给客户,免去了 VS/TUN 中的 IP 隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求 Director Server 与 Real Server 都有一块网卡连在同一物理网段上。
VS/DR 模式是互联网使用的最多的一种模式,在 LVS-DR 配置中,Director 将所有入站请求转发给集群内部节点,但集群内部的节点直接将他们的回复发送给客户端计算机(没有通过 Director 回来)。如下图所示:
4>LVS调度算法
调度方法决定了如何在这些集群节点之间分布工作负荷:
当 Director 收到来自客户端计算机访问它的 VIP 上的集群服务的入站请求时,Director 必须决定那个集群节点应该获得请求。Director 可用于做出该决定的调度方法分成两个基本类别:
固定调度算法:rr,wrr,dh,sh
动态调度算法:wlc,lblc,lblcr,SED,NQ(后两种官方站点没提到)
10 种调度算法见如下表格:
四种常见调度算法:
轮询调度( Round Robin )
轮询调度也叫 1:1 调度,调度器通过“轮询”调度算法将外部用户请求按顺序 1:1 的分配到集群中的每个 Real Server 上,这种算法平等地对待每一台 Real Server,而不管服务器上实际的负载状况和连接状态。
加权轮询调度( Weighted Round Robin )
加权轮询调度算法是根据 Real Server 的不同处理能力来调度访问请求。可以对每台Real Server 设置不同的调度权值,对于性能相对较好的 Real Server 可以设置较高的权值,而对于处理能力较弱的 Real Server,可以设置较低的权值,这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时,调度器还可以自动查询 Real Server的负载情况,并动态地调整其权值。
最少链接调度( Least Connections )
最少连接调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
加权最少链接调度( Weighted Least Connections )
加权最少链接调度是“最少连接调度”的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为 1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。
5>LVS-DR模式工作原理
首先,来自客户端计算机 CIP 的请求被发送到 Director 的 VIP。然后 Director 使用相同的 VIP目的 IP 地址将请求发送到集群节点或真实服务器。然后,集群某个节点将回复该数据包,并将该数据包直接发送到客户端计算机(不经过 director),并且以此回复数据包使用的目的 VIP 地址作为源 IP 地址。因此,实际上是客户计算机被“欺骗”了,客户计算机始终认为它正与同一台计算机对话,而实际上它正在发送请求数据包给一台计算机(LB),并从另一台计算机(RS)接收回复的数据包。
LVS-DR 模式应用特点:
(1)所有集群节点 RS 必须和 Director 在相同的物理网段(即同一个局域网中);
(2)所有客户端入站(而不是出站)请求由 Director 首先接收,并转发给集群节点 RS;
(3)集群节点 RS 通常来说最好带外部 IP,而不使用 Director 及某固定机器作为默认网关,以便将数据包直接回复给客户端计算机,且不会产生回包的瓶颈;
(4)所有集群节点 RS 上必须在 lo 网卡上绑定 VIP 地址,以便验证通过目的 IP 非 RS 的数据包;
(5)由于所有集群节点 RS 上必须在 lo 网卡上绑定 VIP 地址,因此,带来 arp 问题,即集群节点RS 默认会相应发往 Director VIP 的数据包。因此要对所有集群节点 RS 做 ARP 抑制处理,把响应 VIP 的请求交给 LVS Director;
(6)很多操作系统都可以用在集群内部的 RS 真实服务器上只要该操作系统能够实现 ARP 隐藏,如:Windows,linux,unix;
(7)LVS/DR 模式不需要开启调度器转发功能,这点和 LVS/NAT 模式是不同的。
(8)LVS/DR Director(服务器数量 100 台)可以比 LVS-NAT Director(服务器数量 10-20 台)承受更多的并发请求和转发更多的服务器数量。
LVS DR 类型:
让前端路由将请求发往 VIP 时,只能是 Dirctor 上的 VIP;
解决方案:
(1)静态地址绑定;
未必有路由器的配置权限;
Director 调用时静态地址绑定将难以适用;
(2)arptables
Disable ARP for VIP
Basically, we have the following commands to disable ARP for VIP at real servers.
arptables -F
arptables -A INPUT -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
(3) 修改 Linux 内核参数,将 RS 上的 VIP 配置为 lo 接口的别名,限制 Linux仅对对应接口的 ARP 请求做响应;