集群技术理论
1、服务(Service):包括服务硬件(例如PC机)和服务软件,二者统称服务实体。
2、节点(Node):运行心跳进程的独立主机。节点是高可用集群的核心组成部分,每个节点上运行操作系统和包含心跳进程的软件服务。
3、资源(Resource):一个节点可以控制的实体,当节点发生故障时这些资源能够被其他节点接管,如磁盘分区、文件系统、IP、应用程序服务等。
4、事件(Event):集群中可能发生的事情,例如节点故障、网络故障、应用程序崩溃等,这些事情会导致节点资源发生转移,高可用集群测试工作基于这类事件进行。
二、集群概念
集群(Cluster)实际上指的是一组计算机,这组计算机作为一个整体向用户提供一组服务资源,集群中的单个计算机系统称为集群的节点,集群提供如下特性:
1、高扩展性:集群性能不限于单个服务实体,新的服务实体可以动态地加入到集群,从而增强集群地性能。
2、高可用性:集群通过服务实体冗余使客户端免于轻易遭遇
Out of service
警告,当一台节点服务器发生故障的时候,这台服务器上所运行地应用程序将在另一节点服务器上被自动接管,消除单节点故障对于增强数据可用性、可达性和可靠性是非常重要的。3、负载均衡:将任务比较均匀地分布到集群中的计算机和网络资源,提高数据吞吐量。
4、错误恢复:如果集群中的某一台服务器由于故障或者维护而无法使用,资源和应用程序将转移到可用的集群节点上,这种由于某个节点中的资源不能工作,另一个可用节点中的资源能够透明地接管并继续完成任务的过程叫做错误恢复。
三、集群分类
HA
:高可用集群(High Availability Cluster
)
LBC
:负载均衡集群(Load Balance Cluster
)
HPC
:科学计算集群 / 高性能计算集群(High Performance Computing Cluster
)
四、高可用集群逻辑架构
五、集群、分布式及微服务的区别
集群是个物理形态,分布式是个工作方式。(分布式:一个业务分拆多个子业务,部署在不同的服务器上;集群:同一个业务,部署在多个服务器上。)分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。 分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。例如:新浪网,访问的人多了,其可以将服务部署到集群上,上层放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器通过一定策略找到负载不是很重一台服务器,将任务交给这台服务器去完成。而分布式,从狭义上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。例如:如果一个任务由 10 个子任务组成,每个子任务单独执行需 1 小时,则在一台服务器上执行该任务需 10 小时。采用分布式方案,提供 10 台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时(这种工作模式的一个典型代表就是 Hadoop
的 Map/Reduce
分布式计算模型) 。而采用集群方案,同样提供 10 台服务器,每台服务器都能独立处理这个任务。假设有 10 个任务同时到达,10 个服务器将同时工作,1 小时后,10 个任务同时完成,这样,整体来看,还是 1 小时内完成一个任务。
好的设计应该是分布式和集群的结合,先分布式再集群,具体实现就是业务拆分成很多子业务,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。另外,还有一个概念和分布式比较相似,那就是微服务。微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
分布式:
集群化:
微服务:
六、数据库集群分类
数据库集群技术是将多台服务器联合起来组成集群来实现综合性能优于单个大型服务器的技术,这种技术不但能满足应用的需要,而且大幅度的节约了投资成本。数据库集群技术分属两类体系:基于数据库引擎的集群技术和基于数据库网关(中间件)的集群技术。在数据库集群产品方面,其中主要包括基于数据库引擎的集群技术的 Oracle RAC
、Microsoft MSCS
、IBM DB2UDB
、Sybase ASE
,以及基于数据库网关(中间件)的集群技术的 ICX-UDS
等产品。
一般来讲,数据库集群软件侧重的方向和试图解决的问题划分为三大类:
1、负载均衡集群(
Load Balance Cluster,LBC
)侧重于数据库的横向扩展,提升数据库的性能。2、高可用性集群(
High Availability Cluster,HAC
)侧重保证数据库应用持续不断。大部分的数据库集群侧重与此。3、高安全性集群(
High Security Cluster,HSC
)侧重于容灾。
只有 Oracle RAC
能实现以上三方面。
七、常见数据库集群架构讲解
1、Oracle RAC
其架构的最大特点是共享存储(Shared-storage
),整个 RAC
集群是建立在一个共享的存储设备之上的,节点之间采用高速网络互联。Oracle RAC
提供了非常好的高可用特性,比如负载均衡和应用透明切块(TAF
),其最大的优势在于对应用完全透明,应用无需修改便可切换到RAC
集群。但是RAC
的可扩展能力有限,首先因为整个集群都依赖于底层的共享存储,所以共享存储的 I/O
能力和可用性决定了整个集群可以提供的服务力度,对于 I/O
密集型的应用,这样的机制决定后续扩容只能是 Scale up
(向上扩展)类型,对于硬件成本、开发人员的要求、维护成本都相对比较高。Oracle
显然也意识到了这个问题,在 Oracle
的 MAA
(Maximum Availability Architecture
)架构中,采用 ASM
来整合多个存储设备的能力,使得 RAC
底层的共享存储设备具备线性扩展的能力,整个集群不再依赖于大型存储的处理能力和可用性。
RAC
的另外一个问题是随着节点数的不断增加,节点间通信的成本也会随之增加,当到某个限度时,增加节点可能不会再带来性能上的提高,甚至可能造成性能下降。这个问题的主要原因是 Oracle RAC
对应用透明,应用可以连接集群中的任意节点进行处理,当不同节点上的应用争用资源时,RAC
节点间的通信开销会严重影响集群的处理能力。所以对于使用 Oracle RAC
有以下两个建议:1、节点间通信使用高速互联网络;2、尽可能将不同的应用分布在不同的节点上。
基于这个原因,Oracle RAC
通常在 DSS
环境(决策支持系统,Decision Support System
)中可以做到很好的扩展性,因为 DSS
环境很容易将不同的任务分布在不同计算节点上,而对于 OLTP
应用(联机事务处理系统,On-Line Transaction Processing
),Oracle RAC
更多情况下用来提高可用性,而不是为了提高扩展性。
2、MySQL Cluster
MySQL cluster
和 Oracle RAC
完全不同,它采用 无共享架构(shared nothing architecture
)。整个集群由管理节点(ndb_mgmd
),处理节点(mysqld
)和存储节点(ndbd
)组 成,不存在一个共享的存储设备。MySQL cluster
主要利用了 NDB
存储引擎来实现,NDB
存储引擎是一个内存式存储引擎,要求数据必须全部加载到内存之中。数据被自动分布在集群中的不同存 储节点上,每个存储节点只保存完整数据的一个分片(fragment
)。同时,用户可以设置同一份数据保存在多个不同的存储节点上,以保证单点故障不会造 成数据丢失。MySQL cluster
主要由 3 各部分组成:1、SQL
服务器节点;2、NDB
数据存储节点;3、监控和管理节点。
这样的分层也是与 MySQL
本身把 SQL
处理和存储分开的架构相关系的。MySQL cluster
的优点在于其是一个分布式的数据库集群,处理节点和存储节点都可以线性增加,整个集群没有单点故障,可用性和扩展性都可以做到很高,更适合 OLTP
应用。但是它的问题在于:1、NDB
(NDB
是一种内存中的存储引擎,它具有可用性高和数据一致性好的特点) 存储引擎必须要求数据全部加载到内存之中,限制比较大,但是目前 NDB
新版本对此做了改进,允许只在内存中加 载索引数据,数据可以保存在磁盘上。2、目前的 MySQL cluster
的性能还不理想,因为数据是按照主键 Hash
分布到不同的存储节点上,如果应用不是通过主键去获取数据的话,必须在所有的存储节点上扫描, 返回结果到处理节点上去处理。而且,写操作需要同时写多份数据到不同的存储节点上,对节点间的网络要求很高。
虽然 MySQL cluster
目前性能还不理想,但是share nothing
的架构一定是未来的趋势,Oracle
接手MySQL
之后,也在大力发展 MySQL cluster
。
八、写在最后
工作中接触集群技术比较多,想着找一个时间写篇博客把自己学习到的理论知识总结一下,奈何业务繁忙且内容诸多,在此只能简单记录与整理,更多内容后续或再做添加,不妥之处欢迎各位读者斧正。
九、Reference
《高可用集群概念及工作原理详解》(知乎)—— https://zhuanlan.zhihu.com/p/147317681
《集群、分布式、微服务概念和区别》(CSDN)—— https://blog.csdn.net/qq_37788067/article/details/79250623
《HA技术》(博客园)—— https://www.cnblogs.com/staid/archive/2010/12/09/1901175.html
《简单理解集群、分布式和负载均衡的概念》(CSDN)——