一、集群概念:
Cluster:
计算机集合,为解决某个特定问题组合起来形成的单个系统;
集群概念
- 集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图,同时提供接近容错机的故障恢复能力。
- 集群系统一般通过两台或多台节点服务器系统通过相应的硬件及软件互连,每个群集节点都是运行其自己进程的独立服务器。这些进程可以彼此通信,对网络客户机来说就像是形成了一个单一系统,协同起来向用户提供应用程序、系统资源和数据。除了作为单一系统提供服务,集群系统还具有恢复服务器级故障的能力。
- 集群系统还可通过在集群中继续增加服务器的方式,从内部增加服务器的处理能力,并通过系统级的冗余提供固有的可靠性和可用性。
二、Linux Cluster类型:
1、LB:Load Balancing,负载均衡;
- 提供和节点个数成正比的负载能力,这种集群很适合提供大访问量的Web服务。负载均衡集群往往也具有一定的高可用性特点。Turbolinux Cluster Server、Linux Virtual Server都属于负载均衡集群。主流架构Nginx+Keepalived(利于动静分离)、LVS+Keepalived。
2、HA:High Availiablity,高可用集群;
一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。计思想就是要最大限度地减少服务中断时间。这类集群中比较著名的有Turbolinux TurboHA、Heartbeat、Kimberlite等。
高可用集群一般是通过系统的可靠性(reliability)和系统 的可维护性(maintainability)来衡量的。通常用平均无故障时间(MTTF)来衡量系统的可靠性,用平均维护 时间(MTTR)来衡量系统的可维护性。因此,一个高可用集群服务可以这样来定义:
A=MTBF平均故障间隔时间/(MTBF平均故障间隔时间+MTTR平均恢复时间)
(0,1):90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%, 99.9999%
一般高可用集群的标准有如下几种:
99%:表示 一年不在线时间不超过87小时
99.9% :表示一年不在线时间不超过8.7小时
99.99%: 表示一年不在线时间不超过1小时
99.999% :表示一年不在线时间不超过3-5分钟
3、HP:High Performance,高性能集群;
HPCC高性能计算集群也称为DAS(数据分析超级计算机)
4、分布式系统集群:
分布式存储:分布式存储是一种数据存储技术,通过网络使用企业中的每台机器上的磁盘空间,在元数据服务器做索引,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。
分布式计算:分布式计算是一种计算方法,和集中式计算是相对的。随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。
三、系统扩展类型
常见的系统扩展类型有:
scale up(向上扩展):利用现有的硬件资源,通过增加硬件资源来满足日益增长的性能消耗的需求,但是此方式通常来说能提升的性能有限。
scale out(向外扩展):通过硬件或软件的方式,将以往由单一服务器负责的业务需求分配到其他节点的服务器上进行处理,但是从用户的视角来看,这些服务器是单一的系统。而lvs集群的扩展方式正是属于scale out。
四、负载均衡集群实现:
1、硬件设备实现负载均衡:
- F5公司的 Big-IP产品: 性能好价格高
- Citrix公司的 Netscaler产品
- A10 公司的A10产品
2、软件实现负载均衡:
- lvs:Linux Virtual Server虚拟服务,不处理服务,而是转到其他地方处理
- nginx伪四层调度
- haproxy
- ats:apache traffic server 雅虎公司的开源项目
- perlbal
- pound
3、基于工作的协议层次划分:
(1)传输层调度器(通用):(DPORT)
- lvs:基于udp、tcp调度
- nginx:stream模块用来模拟四层调度
- haproxy:mode tcp模块用来模拟四层调度
(2)应用层调度器(专用):(自定义的请求模型分类)
proxy server:
- http:nginx(使用http的模块), httpd, haproxy(使用http的模块)
- fastcgi:nginx, httpd, ...
- mysql:ProxySQL, ...
4、集群的站点指标:
- PV:Page View页面浏览量
- UV:Unique Vistor单独浏览者
5、集群的会话保持问题:
为了对访问用户的追踪
- (1) session sticky会话绑定
Source IP-----基于原ip识别原用户
Cookie----基于原Cookie识别原用户
- (2) session replication;复制集群
session cluster会话集群
(3) session server指定一台专门储存会话的服务器
五、Lvs集群调度算法
- 常见的lvs集群的调度算法分为静态调度算法和动态调度算法。
1、 静态调度算法:根据算法本身进行调度;
rr:roundrobin,轮询,调度器将外部请求轮流分配到集群中的节点中。
wrr:Weighted RR,加权轮询,调度器根据事先设置的权重来分配外部请求到集群中的节点。
sh:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的真实服务器Ip,从而实现会话绑定;
dh:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的真实服务器IP,典型使用场景是正向代理缓存场景中的负载均衡;
2、动态算法:
前端的调度器会根据后端真实服务器的实际连接情况来分配请求
(1)、LC:最少连接(Least Connections)
调度器通过“最少连接”调度算法动态的将网络请求调度到已经建立连接最少的服务器上,如果集群的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以更好地均衡负载
(2)、WCL:加权最小连接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用加权最小连接的调度算法来优化负载均衡,具有较高权值的服务器将承受较大比例的活动负载连接,
(3)、SED:最短延迟调度(Shortest Expected Delay)
在WCL的基础上改进,Overhead=(ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的接受下次请求,+1的目的是为为了考虑加权的时候,非活动连接过多的缺陷,当权限过大的时候,会导致空闲服务器一直处于无连接的状态
(4)、NQ:永不排队/最少列队调度(NEVER Queue Scheduling)
无需列队,如果有台realserver的连接数=0直接就分配过去,不需要进行sed运算,保证不会有一个主机很空闲,在SED的基础上不论+几,第二次一定给下一个,不考虑非活动连接,才会用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而http的处于保持状态就需要考虑非活动连接给服务器的压力
(5)、LBLC:基于局部性的最少连接(localibty-Based Least Connections)
基于局部性的最少连接调度算法是针对目标IP地址的负载均衡,目前主要运行在Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用而且没有超载,将请求发送到该服务器,若i服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用最少连接的原则选出一个可用的服务器,将请求发送到该服务器
(6)、LBLCR:带复制性的基于局部性最少连接(Local-Based Least Connections With Replication)
带复制性的基于局部性最少连接调度算法也是针对目标IP地址的负载均衡,目前主要用在Cache集群系统。它和LBLC算法不同的是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP到一台服务器的映射,该算法根据一请求的目标IP地址找出该目标IP地址对应的服务器组,按照最小连接原则服务器组中选一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载,则按照最小连接原则从这个集群中选出一台服务器,将该服务器加到服务组中,将请求发送到该服务器,同时当该组服务器有一段时间没有被修改,将最忙的服务器从服务组删除,以降低复制的程度。
参考资料:https://blog.csdn.net/who__are__you_/article/details/79006796