【Oracle-RAC】集群心跳机制

1.集群心跳机制

集群的一致性就是指集群中每个成员能够了解其他成员的状态,而且
每个成员获得的集群其他节点的状态呵呵集群中节点成员列表信息是一致的。

oracle集群管理软件通过以下一些机制来实现集群的一致性。
(1)确定节点和节点间的连通性(心跳),以便节点之间能够了解彼此的状态。
(2)用一个或几个共享的位置来保存节点之间的连通性信息,以便在集群
需要进行重新配置时,能够做出正确的决定并记录集群最新的状态。
(3)本地节点自我监控,以便当本地节点出现问题时能够主动离开集群,
避免不一致的产生。

2.网络心跳

首先是确定集群节点之间的连通性,以便节点之间能够了解彼此的状态,
而对于Oracle集群,这是通过节点间的网络心跳NHB 来实现的。对于Oracle 
集群,ocssd.bin 守护进程每秒钟会向集群其他节点发送网络心跳。

网络心跳主要通过以下的 ocssd.bin 线程实现:
发送线程:clssnmSendingThread:该线程每秒钟向集群中所有的节点发送网络心跳信息。
分析线程:clssnmPollingThread:该线程会分析接收到的网络心跳信息并进行处理,
如果发现集群中某一个节点持续丢失心跳(超过miscount设置),就会通知集群进行重新配置。
集群重新配置线程:clssnmRcfgMgrThread:当clssnmPollingThread发现集群
需要进行重新配置时,该进程负责对集群进行重新配置。
派遣线程:clssnmClusterListener:该线程负责接收从远程节点传递过来的信息,
之后,根据信息的种类发送给相关线程进行处理。

从版本11.2.0.2开始,由于新特性rebootless restart 的引入,对于丢失网络心跳
导致的重新配置,只会发送GI重启。
Oracle集群处理由丢失网络心跳导致的重新配置步骤如下:
(1)当集群的某个节点连续一段时间(超过集群miscount)丢失网络心跳之后,
分析线程决定发起集群重新配置。
(2)集群的重新配置管理节点RM,这个节点向集群中的所有节点发送重新配置消息。
所有收到此消息的节点会回复该消息并通知RM节点自己的状态。
(3)RM节点基于每个节点的状态进行投票并检查是否有脑裂会发生。
(4)对于检查脑裂,RM会查看网络心跳无法访问的节点的磁盘心跳信息,以便 
确认这些节点的状态。如果发现无法访问的节点状态也是正常的,那么就可能发送脑裂,
需要避免。
(5)RM 节点向表决盘的kill block 写入"有毒"信息,需要重启的节点在访问 
表决盘时读取"有毒"信息,完成对本节点的重启。如果RM节点发现某些节点
已经离开集群,那么也会进行重新配置。
(6)RM节点修改集群节点列表(主要在表决盘中),重新配置完成 

3.磁盘心跳 

第二种心跳称为磁盘心跳(Disk HearBeat,DHB).磁盘心跳的主要目的时就是当 
集群发生脑裂时帮助指定脑裂的解决方案。Oracle集群的每个节点每秒都会向 
集群的所有表决盘注册本地的磁盘心跳信息,同时也会将自己能够联系到
的集群中其他节点的信息,或者说本地节点认为集群中断 成员列表信息写入
到表决盘中。一旦发生脑裂,CSS 的重新配置线程就可以通过表决盘中的信息 
了解集群中节点之间的连通性,从而决定集群会分裂成几个子集群。以及每个
子集群包含的节点情况和每个节点的状态。

磁盘心跳主要通过 ocssd.bin 线程实现。

磁盘心跳线程:clssnmvDiskPingThread:该线程负责向集群表决盘中发送磁盘
心跳信息。同时,该线程也负责读取表决盘中的kill block信息,以确定 
本地节点是否需要重启。
磁盘心跳监控线程:clssnmvDiskPingMonitorThread:该线程用于确定磁盘心跳
线程是否能够正确的发送磁盘心跳,并且能够正确的读取kill block中的信息。
kill block 线程:clssnmvKillBlockThread:该线程负责监控VF 的kill block 信息。
Oracle规定,如果某个节点的short IO timeout 时间内一直无法访问某一个VF的话,
对应的VF会被离线掉,而当大多数的VF被离线时,该节点会被重新启动。

4.本地心跳 

集群中的第三种心跳称为本地心跳(Local HearBeat,LHB),这种心跳机制时在11gR2 版本中 
正式被引入的。这种心跳的作用是监控 ocssd.bin 进程以及本地节点的状态。
从11.2.0.1版本开始,新的集群资源 cssdagent,cssdmonitor 被引入。他们的功能是 
监控本地节点的ocssd.bin 进程状态和本地节点的状态。对于 ocssd.bin 进程监控,
GI 是通过本地心跳来实现的,Oracle会在每一秒钟,在发送网络心跳的同时向 
cssdagent 和 cssdmonitor 发送本地 ocssd.bin 进程的状态。如果本地心跳没有问题,
就认为 ocssd.bin 进程正常。
如果 ocssd.bin 进程持续丢失本地心跳,ocssdagent 就会认为本地节点的 ocssd.bin 
进程出现问题,并重启该节点。

5.总结 
网络心跳:确定集群节点的连通性。
磁盘心跳:指定脑裂的解决方案。
本地心跳:确定 ocssd.bin 进程的状态。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值