Oracle RAC集群三种心跳机制

Oracle 集群心跳机制:
       Oracle集群如何维护集群的一致性,所谓的集群一致性就是指集群中每个成员能够了解其他成员的状态,而且每个成员获得的集群中其他节点的状态和集群中节点成员列表信息是一致的,这也是集群最基本的要求。

Oracle通过三种机制来实现集群的一致性:
网络心跳: 确定节点与节点间的连通性,以便节点之间能够了解彼此的状态。
磁盘心跳: 用一个或多个共享的位置来保存节点之间的连通性信息,以便在集群需要进行重新配置时,能够做出正确的决定并记录集群最新的状态.
本地心跳: 本地节点自我监控机制,以便当本地节点出现问题时能够主动离开集群,避免不一致的产生

一:网络心跳

      ocssd进程每秒钟通过集群的私网会向集群的其他节点发送网络心跳.
      例如一个4节点的集群,集群的每一个节点每一秒钟都会向集群中的其他三个几点发送网络心跳信息,也就是说每个节点每一秒钟也会收到集群中其他节点发送的网络心跳。既然节点间互相发送网络心跳,就需要有一种机制来确定节点之间的连通性,以及当网络心跳出现问题时的处理机制。

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

工作机制:
1.发送线程负责每秒钟发送网络心跳到其他远程节点。
2.派遣线程负责接收从远程节点发送过来的网络心跳信息。
3.分析线程会处理由派遣线程接收到的网络心跳信息,确认节点连通性.

      例如:当分析线程发现某些节点的连通性出现问题时,也就是说连续一段时间内没有发现某一个节点或几个节点的网络心跳,集群就会进行重新配置。而这种情况下重新配置的结果往往就是某一节点或几个节点离开集群,所以节点间的私网通信问题会破环集群的一致性。

二:磁盘心跳
      磁盘心跳的主要目的就是当集群发生脑裂时帮助制定脑裂的解决方案。
解释
      Oracle集群的每一个节点每秒钟都会向集群的所有表决盘VF注册本地节点的磁盘心跳信息,同时也会将自己能够联系到的集群中其他节点的信息写入表决盘中,一旦发生脑裂,css的重新配置线程就可以通过表决盘中的信息了解集群中节点之间的连通性,从而决定集群会分裂成几个子集群,以及每个子集群包含的节点情况和每个节点的状态。

示例:

      一个两节点的集群(node1,node2)配置了三块VF(VF1,VF2,VF3),node1无法访问VF1,node2无法访问VF2,这意味着两个节点仍然同时能够访问VF3。而当集群中某一节点无法访问大多数VF时([VF/2]+1),这就意味着当需要通过VF中的信息决定节点去留时,可能会出现没有任何一个VF可被集群中的全部节点访问到的情况,这也意味着无法决定哪些节点应该离开集群,哪些节点应该被保留。

      一个两节点的集群(node1,node2)配置了3块VF(VF1,VF2,VF3),node1无法访问VF1,VF2 node2无法访问VF3,这意味着当出现网络问题时,集群无法通过VF的信息获得一致的所有节点的状态,也就无法完成集群的重新配置。所以无论如何变化,只要节点必须能够访问到[VF/2]+1个VF的规则,就一定能够保证至少一个VF能够被所有节点访问到。

三:本地心跳
      本地心跳的作用是监控ocssd.bin进程以及本地节点的状态。
      cssdagent和cssdmonitor的功能就是监控本地节点的ocssd.bin进程状态和本地节点的状态,对于ocssd.bin进程的监控是通过本地心跳来实现的,Oracle会在每一秒钟,在发送网络心跳的同时向cssdagent和cssdmonitor发送本地ocssd.bin进程的状态(本地心跳)。如果本地心跳没有问题,cssdagent就认为ocssd.bin进程正常。如果ocssd.bin进程持续丢失本地心跳(到达misscount的时间)ocssdagent就会认为本地节点的ocssd.bin进程出现了问题,并重启该节点。

脑裂:
      集群的网络心跳丢失,但是磁盘心跳正常。当脑裂出现后,集群会分裂成为若干个子集群。对于这种情况的出现,集群需要进行重新配置。
      重新配置的基本原则:节点数多的子集群存活,如果子集群包含的节点数相同,那么包含最小编号节点的子集群存活。

四:网络心跳misscount和磁盘心跳disktimeout查询及设置
misscount:用来定义集群网络心跳的超时时间,默认值是30s。当集群中的一个或多个节点连续丢失网络心跳超过misscount时间后,集群需要进行重新配置,某一个或多个节点需要离开集群。在11gR2版本的集群,这个值也是节点本地心跳超时时间,因为本地心跳和网络心跳是由相同的线程发送的。

查询网络心跳NHB misscount
[root@node1 ~]# crsctl get css misscount;
CRS-4678: Successful get misscount 30 for Cluster Synchronization Services.

查询磁盘心跳DHB disktimeout
[root@node1 ~]# crsctl get css disktimeout;
CRS-4678: Successful get disktimeout 200 for Cluster Synchronization Services.

修改网络心跳NHB misscount
[root@node1 ~]# crsctl set css misscount 50;

CRS-4684: Successful set of parameter misscount to 50 for Cluster Synchronization Services.

[root@node1 ~]# crsctl set css misscount 30;
CRS-4684: Successful set of parameter misscount to 30 for Cluster Synchronization Services.

修改磁盘心跳disktimeout

crsctl set css disktimeout 300
  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值