一、集群及类型介绍
背景需求
在互联网应用中,随着站点对硬件性能,响应速度,服务稳定性,数据可靠性等需求越来越高,单台服务器将难以承担所有的访问。除了使用价格昂贵的大型机,企业还有另一种选择来解决难题,通过整合多台廉价的普通服务器来构建大型集群环境。以同一个地址对外提供相同的服务。集群的称呼来自英文单词Cluster、 表示一群、一串的意思,用在服务器领域则表示大量服务器的集合体,以区分于单个服务器。
集群技术的概述
根据实际企业环境的不同,群集所提供的功能也各不相同,采用的技术细节也可能各有千秋。然而从整体上来看,需要先了解一些关 于群集的共性特征,这样才能在构建和维护群
集的工作中做到心中有数,避免操作上的盲目性。
集群的类型
无论是哪种群集,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机能力。根据群集所针对的目标差导,可以分为以下三种类型。
负载均衡集群(Load Balance Cluster)
以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标、获得高并发、高负载(LB)的整体性能。例如: DNS轮询,应用层交换,反向代理等,负载分配依赖于主节点(调度器|负载均衡器)的分流算法,将来自客户端的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力,这类集群软件中比较著名的有: Linux Virtual Server(LVS)、Haproxy、Nginx。
实现集群的硬件: F5 BIG-IP、 Ctrix Netscaler、A10、Array、绿盟、梭子鱼。。阿里云基于Nginx包装一个产品: SLB.
高可用 集群(High Availability Cluster)
以提高应用系统的可靠性、尽可能减少中断时间为目标、确保服务的连续性、达到高可用(HA)的容错效果。例如:故障切换,双机热备,多机热备等。工作模式包括双工,主从两种模式。双工即节点同时在线;主从则只有主节点在线,当出现故障时从节点自动切换为主节点。这类集群中比较著名的有:Heartbeat、Keepalived。
SLA服务水平协定
高性能运算集群(HighPerformance Computer Cluster)
以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型,超级计算机的高性能运算(HPC)能力,例如:计算,网格计算,HPC主要依赖于分布式运算,并行计算,通过专用硬件和软件将多个服务器的CPU,内存等资源整合在一起,实现大型,超级计算机才具有的计算能力。这类软件有:Hadoop。
二、负载均衡集群的分层介绍
在典型的负载均衡集群中,主要包含三个层级。LVS通过前端至少一个负载调度器(Load Balancer,也叫负载均衡器)无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务器机群中透明地加入或删除一个节点来达到,通过检测节点或服务进程故障和正确地重置使系统达到高可用性。为了保证服务的一致性,所有节点使用共享存储设备。
第一层,负载调度器:这是访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP(Virtual IP,虚拟IP)地址,也称为群集IP地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后平滑替换至备用调度器,确保高可用性。
第二层,服务器池:群集所提供的应用服务(如,HTTP FTP)由服务器池承担,其中的每个节点具有独立的RIP(Real IP,真实IP)地址,只处理调度器分发过来的客户机请求。当某个节点暂失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
第三层,共享存储:为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。在Linux/UNIX 环境中,共享存储可以使用NAS设备,或者提供NFS(Network File System,网络文件系统)共享服务的专用服务器。
三、LVS模式及算法
LVS虚拟服务器
Linux Virtual Server 是针对Linux 内核开发的一个负载均衡项目,由我国的章文嵩博士在1998 年5 月创建,官方站点位于:http://www.linuxvirtualserver.org/。LVS 实际上相当于基于IP 地址的虚拟化应用,为基于IP 地址和内容请求分发的负载均衡提出了一种高效的解决方法。
LVS 现在已成为 Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。在 CentOS7 系列系统中,以下操作可以手动加载 ip_vs模块,并查看当前系统中 ip_ys模块的版本信息。
[root@localhost ~]# yum -y install jpvsadm//安装 ipvsadm 管理工具
[root@localhost~]# modprobeip_vs //加载 jp_vs模块
[root@localhost~]# Ismod I grep Nip_vs //查看ip_vs模块信息
LVS负载均衡的工作模式
关于群集的负载调度技术,可以基于IP、端口、内容等进行分发,其中基于IP的负载调度是效率最高的。基于IP的负载均衡模式中,常见的有地址转换(NAT)、IP隧道(TUNNEL)、直接路由(DR)、FULLNAT四种工作模式。
地址转换(NetworkAddressTranslation):简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口,服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式。缺点是整个架构的负载不高(调度器压力大)。
IP 隧道(IP Tunnel):简称TUN 模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Intemet连接直接回应客户机,而不再经过负载调度器。服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。
直接路由(DirectRouting):简称DR模式,采用半开放式的网络结构,与TUN 模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。负载过度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。
以上三种工作模式中,NAT 方式只需要一个公网IP 地址,从而成为最易用的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就是采用这种方式;相比较而言,DR模式和TUN 模式的负载能力更加强大、适用范围更广,但节点的安全性能要稍差一些。
下面将介绍LVS 所支持的主要负载调度算法,以及在LVS 负载均衡调度器上如何使用ipvsadm 管理工具。
LVS的负载均衡调度算法。
1、轮叫调度(Round Robin)(rr)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2、加权轮叫(Weighted RoundRobin)(wm)
调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3、最少链接(LeastConnections)(LC)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
4、加权最少链接(Weighted Least Connections)(WLC)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5、基于局部性的最少链接(Locality-Based Least Connections)(LBLC)
是针对目标 IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP 地址找出该目标 IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器:若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
6、带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(LBLCR)
是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而 LBLC算法维护从一个目标 IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7、目标地址散列(Destination Hashing)(DH)
根据请求的目标IP地址,作为散列键(Hash Key)从静态分配 散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器, 否则返回空。
8、源地址散列(Source Hashing)(SH)
根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
9、最短的期望的延迟(Shortest Expected Delay Scheduling SED)()
基于wc算法。这个必须举例来说:ABC三台机器分别权重123,连接数也分别是123那么如果使用WLC 算法的话一个新请求进入时它可能会分给ABC中的任意一个,使用sed算法后会进行这样一个运算:A(1+1)/1、A(1+2)/2、A(1+3)/3。