集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图。集群系统一般通过两台或多台节点服务器系统通过相应的硬件及软件互连,每个群集节点都是运行其自己进程的独立服务器。这些进程可以彼此通信,对网络客户机来说就像是形成了一个单一系统,协同起来向用户提供应用程序、系统资源和数据。除了作为单一系统提供服务,集群系统还具有恢复服务器级故障的能力。集群系统还可通过在集群中继续增加服务器的方式,从内部增加服务器的处理能力,并通过系统级的冗余提供固有的可靠性和可用性。
集群的分类:
1、高性能计算集群:
高性能计算集群采用将计算任务分配到不同节点来提高整体计算能力主要应用在科学计算领域。
2、负载均衡集群LB:
负载均衡集群为企业需求提供更实用的系统。该系统使各节点的负载流量可以在服务器集群中尽可能平均合理地分摊处理。该负载需要均衡计算的应用程序处理端口负载或网络流量负载。这样的系统非常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量也如此。通常,网络服务器应用程序接受了大量入网流量,无法迅速处理,这就需要将流量发送给在其它节点。负载均衡算法还可以根据每个节点不同的可用资源或网络的特殊环境来进行优化。
3、高可用性集群HA:
为保证集群整体服务的高可用,考虑计算硬件和软件的容错性。如果高可用性群集中的某个节点发生了故障,那么将由另外的节点代替它。整个系统环境对于用户是一致的。
实际应用中HA与LB经常是同时具备,ORACLE RAC就同时具备HA和LB。
集群环境的特殊问题
1、并发控制
在集群环境中,关键数据都必须是共享存放的 。各个节点都对数据有平等的访问权利 。因此必须要有某种机制控制节点对 数据的访问。
2、健忘症 Amnesia
这个问题发生在集群环境配置文件 不是集中存放,而是 每个节点都有一个本地副本。在集群正常运行时,用户可以在任务节点更改集群的配置,并 且 更改会自动同步到其它节点。
在特殊的情况下比如:两个节点的集群,节点1因为正常维护需 要关闭,然后在节点2修改了某些配置,然后关闭节点2,启动节点1。因为 在节点2修改的配置内容没有同步到节点1,所以节点1启动后,它仍然是用旧的配置文件工作,这时就会造成配置丢失,也 就是所谓的“健忘症“ 。
3、脑裂 Split Brain
在集群里,节点间需 要通过心跳机制了解彼此的健康状况,以 确保各节点协调工作。假设只是“心跳”出现故障,但各个节点还在正常运行 。这时 每个 节点都认为其它节点宕机,自己是集群中唯一健 在者,自己应该获得整个集群的控制权。在集群环境里,存储设备是共享的,这就意味着数据灾难,这种状况就是“脑裂”。
解决这个问题的算法通常就是投票算法。集群中各节点通过心跳来通报彼此的健康状况,假设每收到一个节点的通报代表 一票。对 于一个三节点的集群,正常运行时 每个节点都会有3票。假设节点1 的心跳出现故障,但是节点1还在运行:这时整个集群就分裂成二个小的partition。节点1自己一个partition,节点2和节点3是一个partition。 这就必须剔除一个partition。这时节点2和节点3所在的partition 每个节点有二票,节点1只有一票。所以节点2和节点3 组成的小集群获得控制权,节点1被踢出。
如果集群只有二个节点,上面的算法就没用了,这时必须引入第三个设备Quorum Device。Quorum Device通过采用共享磁盘 ,也叫Quorum Disk。这个Quorum Disk也代表一票。当心跳出现 故障时,两个节点同时去争取Quorum Disk这一票,最早到达的请求被满足,后到达的节点无法获得这一票。这时 最先获 得Quorum Disk的节点就获 得两票,而另一个节点就只有一票,票少的被踢出集群。
4、IO 隔离 IO Fencing
这个问题是上一个问题的延伸。当集群系统出现脑裂时,必须判断那些节点获得控制权 , 那些节点要踢出集群。但这样还不够 ,还必须保证被赶出集群的节点不能操作共享数据。这就是IO隔离要解决的问题。
IO Fencing的实现有 硬件方式和软件方式,ORACLE RAC采用的是软件方式,直接重启故障节点。
集群软件
理解 了前面的内容,有助于 理解ORACLE RAC的 架构及各个组件的功能。
集群最终的目的是为了 向客户端提供单一视图并提供HA及LB。在集群中每个节点都 能处理客户端的请求。所以每个节点至少要运行一个实例。
在单实例环境中,ORACLE 实例通过OS Kernel访问硬件并通过进程调 度 多个进程对硬件资源的使用,但在集群环境下 存储设备是共享使用 ,ORACLE 实例不仅 需 要协调节点内多进程的共享使用,还需 要协调主机间进程的共享使用。这种需求靠传统的OS kernel就无法满足了 ,这就需要集群软件来实现。集群软件主要有Sun Cluster , IBM HACMP 等,ORACLE也推 出了自己的集群软件 Clusterware
ORACLE Clusterware组成
ORACLE Clusterware 有以下几个组件
1、OCR Oracle Cluster Registry 为了解决集群“健忘”的问题,最简单的解决办法就是整个集群只 有一份配置,所有节点共用这份配置。ORACLE采用的方法就是把这个配置文件放在共享存储上,这个文件 就是OCR DISK。 节点通过OCR Process读写OCR。 但只有一个节点能够读写OCR DISK 叫OCR Master节点,其它节点 通过本节点的OCR process 向master node的OCR process提交请求,由master OCR Process 完成物理读写,并同步所有节点OCR cache中的内容。
2、Voting Disk 这个文件主要用于记录节点中成员状态,在出现脑裂时,仲裁那个Partition获得集群的控制权
3、Cluster Synchronization Service(css) : CSS 服务 通过 多种心跳机制 实时监控集群的健康状态,提供脑裂保护等集群服务功能
CSS服务有二个心跳机制:私有网络的Network Heartbeat 用于监控节点之间的健康状态(超时阈值参数MisCount MC) ,通过Voting Disk 的Disk Heartbeat (超时阈值参数IO timeout IOT) 。用于监控是否有访问共享存储的IO故障如HBA卡故障,SAN交换机或者存储的线缆损坏导致I/O超时。
这两个心跳机制决定节点是否应驱逐。下面描述了驱逐行为发生的条件:
(1)、都不超时,不会驱逐(2)、网络PING在MC时间内完成 ,磁盘ping超过了MC,但是在 IOT内成,也不会驱逐
(3)、网络ping在MC时间内完成,磁盘ping超过了IOT,则节点被驱逐
(4)、网络ping超过MC设置,磁盘ping在MC内完成,节点也会被驱逐
下表是Clusterware后台进程列表, 其中带(r)的进程表示需要以root用户运行
Clusterware 组件 | Linux/unix 进程 | Windows 服务 | Windows 进程 |
Process Monitor Daemon | oprocd(r) | OraFenceService | |
RACG | racgmain racgimon | racgmain.exe racgimon.exe | |
Oracle Nonification Service(ONS) | ons | ||
Event Manager | evmd(r) evmd.bin evmlogger | OracleEVMService | evmlogger.exe evmd.exe |
Cluster Ready | crsd.bin(r) | OracleCRSService | crsd.exe |
Cluster Synchronization Services | init.cssd(r) ocssd(r) ocssd.bin | OracleCSService | ocssd.exe |