[RAC性能调优] 关于RAC集群心跳超时驱逐节点与异步IO的疑问

一个人想着一个人 提交于 2020-01-16 15:07:25

关于RAC集群心跳超时驱逐节点与异步IO的疑问

有种说法是说RAC集群出现心跳超时之后,会固定重启2节点,不知这个官方文档有没有具体说明,RAC节点是否有主节点与从节点的分别,另外关于使用异步IO在哪些场景适用,有没有相应的官方文档可供参考,或者是关于异步IO的一些官方建议.
望解答,谢谢!

11.2的online doc上是这么描述AIO的:

http://docs.oracle.com/cd/E11882_01/server.112/e16638/os.htm#sthref583

"
With synchronous I/O, when an I/O request is submitted to the operating system, the writing process blocks until the write is confirmed as complete. It can then continue processing. With asynchronous I/O, processing continues while the I/O request is submitted and processed. Use asynchronous I/O when possible to avoid bottlenecks.
Some platforms support asynchronous I/O by default, others need special configuration, and some only support asynchronous I/O for certain underlying file system types.
"

所以通常/大部分时候来讲,对于datafile来说,开启了AIO会有好处的。logfile和controlfile是不是受filesystemio_options影响我需要查一下。
风险:我见过几个跟AIO相关的bug,但是坦率讲,大系统/超繁忙的系统用AIO的还是应该不少的。

我来说一下RAC集群的心跳吧:
RAC集群的心跳有两种 NHB(network heart beat)和DHB (disk heart beat)

Time out的时间分别可以通过以下命令获取:

crsctl get css misscount
crsctl get css disktimeout

10g和11.1上的情况:

如果NHB丢失超misscount的时间,那么集群会踢掉丢失心跳的节点,如果是2个节点的集群,通常是大号的节点重启;如果是多节点的集群,会通过选举的方式保留size最大的集群 ,如3个节点的集群,丢失网络心跳后分裂成2节点和1节点的集群,那么剩余一个节点的集群会重启;

磁盘心跳DHB是用来保护数据安全的,所以如果当大部分的选举盘心跳丢失超过 disktimeout ,那么节点会重启

11.2上的情况:

如果NHB丢失超misscount的时间,Cluster会把所有的stack都重新启动,如果还无法解决那么才会尝试通过选举的方式重启主机,这个功能在11.2上引入 (rebootless restart)

关于重启的诊断,建议您看一下以下两篇文档:

Troubleshooting 11.2 Clusterware Node Evictions (Reboots) [ID 1050693.1]

NOTE:265769.1 - Troubleshooting 10g and 11.1 Clusterware Reboots

Allen Gao 也写过中文的文档介绍RAC节点的重启,你可以看看我们的中文博客:

https://blogs.oracle.com/Database4CN/entry/11gr2_%E5%A6%82%E4%BD%95%E8%AF%8A%E6%96%AD%E8%8A%82%E7%82%B9%E9%87%8D%E5%90%AF%E9%97%AE%E9%A2%98

RAC里总会有一个节点会作为master的节点,作为集群的资源管理,如,接受客户端的命令,自动备份OCR等等,但是这个和重启没有关系

  1. 网络心跳:1. 通过集群私网,每一个节点都定期向其他所有的节点发送网络心跳,以便确认节点之间的通信和健康性。
    2.磁盘心跳:只有网络心跳是不够的,因为,一旦出现了网络问题,当节点间互相无法发现对方的网络心跳时,无法判断那一个(些)节点的状态正常,哪一些不正常,所以,我们还需要磁盘心跳。每个节点会定期向表决盘(VF)中注册本地节点的状态信息。这样,当网络心跳出现问题时,我们就可以基于表决盘中的信息,判断节点的状态并作出正确的决定,并防止脑裂(split brain)的发生。

所以,对于2个节点的集群,如果两个节点之间的网络心跳出现问题, 集群会分裂成2个子集群(corhort), 但是节点并不存在其他问题,
那么当集群尝试通过表决盘中的信息解决脑裂的时候就不发决定,因为结论是1:1。对于这种情况,集群就只能通过固定的规则来解决脑裂。

  1. 集群分裂之后,节点数多的corhort存活。
  2. 如果corhort 的节点数相同,那么具有最小节点号节点的corhort存活。所以,对于2个节点的集群,2号节点会离开集群,1号节点存活。

对于您提到的情况“因为之前我们的系统出现因为NHB超时两个节点先后重启,先是大号的节点重启,然后小号的节点也重启了”,这个是不正常的。我们需要查看两个节点的ocssd.log
来分析到底发生了什么事情。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!