关于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节点的重启,你可以看看我们的中文博客:
RAC里总会有一个节点会作为master的节点,作为集群的资源管理,如,接受客户端的命令,自动备份OCR等等,但是这个和重启没有关系
- 网络心跳:1. 通过集群私网,每一个节点都定期向其他所有的节点发送网络心跳,以便确认节点之间的通信和健康性。
2.磁盘心跳:只有网络心跳是不够的,因为,一旦出现了网络问题,当节点间互相无法发现对方的网络心跳时,无法判断那一个(些)节点的状态正常,哪一些不正常,所以,我们还需要磁盘心跳。每个节点会定期向表决盘(VF)中注册本地节点的状态信息。这样,当网络心跳出现问题时,我们就可以基于表决盘中的信息,判断节点的状态并作出正确的决定,并防止脑裂(split brain)的发生。
所以,对于2个节点的集群,如果两个节点之间的网络心跳出现问题, 集群会分裂成2个子集群(corhort), 但是节点并不存在其他问题,
那么当集群尝试通过表决盘中的信息解决脑裂的时候就不发决定,因为结论是1:1。对于这种情况,集群就只能通过固定的规则来解决脑裂。
- 集群分裂之后,节点数多的corhort存活。
- 如果corhort 的节点数相同,那么具有最小节点号节点的corhort存活。所以,对于2个节点的集群,2号节点会离开集群,1号节点存活。
对于您提到的情况“因为之前我们的系统出现因为NHB超时两个节点先后重启,先是大号的节点重启,然后小号的节点也重启了”,这个是不正常的。我们需要查看两个节点的ocssd.log
来分析到底发生了什么事情。
来源:51CTO
作者:yoyo918
链接:https://blog.51cto.com/214320/2465907