Oracle 网络&磁盘心跳机制

Oracle 网络&磁盘心跳机制

  • 网络心跳
    网络心跳(Network Hearbeat)是RAC的内部通信机制,每隔一秒钟,CSSD的一个线程(sending进程)发送一个TCP网络心跳包给自己和集群中的其他节点,同时CSSD的另外一个进程(receiving进程)接收到心跳。如果网络传输包被drop或者出现错误,那么TCP的错误纠正机制会重传这个数据包,Oracle在这种场景下不参与网络包的重传。如果一个节点在15秒(50% of misscount)内都接收不到来自其它节点的心跳信息,那么在CSSD日志中会发现关于心跳丢失的“WARNING”信息。同样当该节点在22秒(75% of misscount)以及在27秒(90% of misscount)都没有接收到其他节点的心跳信息时,在CSSD日志中会依次发生警告。一直到30秒(Oracle 默认是30秒,可调节)为心跳丢失的完整周期,该节点会被驱逐。
  • 磁盘心跳
    磁盘心跳(Disk Heartbeat)是发生在集群间以及仲裁盘间的心跳。每个RAC节点中的CSSD进程会在仲裁盘(voting disk)上面通过读写方式进行磁盘心跳维护,通过调用操作系统层pread/pwrite进程对1个操作系统block块进行一定偏移量的读写操作。除了维护自己的磁盘心跳(读写磁盘的偏移块),CSSD进程还会监控集群中其他节点CSSD进程维护的磁盘心跳。/这个不断被刷新的数据库头部记录节点名称和计数位,该计数位会在发生心跳探测时被集群中其他节点刷新(通过pwrite)。磁盘心跳是通过CSSD进程维护在心跳盘(vote disk)上面,如果存在某一节点由于IO超时没有刷新磁盘心跳,那么该节点会被宣布死掉。如果一个节点处于未知状态,没有真正的死掉,但是没有在存活的群组里,那么该节点会被驱逐,该节点会被在vote磁盘磁盘上更新为kill,被驱逐掉。
    总而言之,网络心跳每秒钟会相互ping一次,集群节点必须在css_miscount(默认值是30s)设置的时间内响应,如果规定时间内未响应,则会导致被驱逐。同时,对于磁盘心跳,每秒钟集群节点会通过vote盘读写进行集群通信,节点必须在disk timeout时间内响应。

猜你喜欢

转载自blog.csdn.net/interestingwd/article/details/81877790