详解什么是 Oracle RAC 脑裂
什么是脑裂?
裂脑通常用于描述集群中的两个或多个节点彼此失去连接但随后继续彼此独立运行(包括获取逻辑或物理资源)的场景,错误假设其他进程(es ) 不再运作或使用上述资源。简单来说,“大脑分裂”意味着有 2 个或更多不同的节点集或“队列”,两个队列之间没有通信。
例如:假设在以下情况下有 3 个节点。1. 节点 1,2 可以相互通信。2. 但是 1 和 2 不能和 3 对话,反之亦然。然后有两个同类群组:{1, 2} 和 {3}。
脑裂发生的原因
脑裂事件后的最大风险是破坏系统状态的可能性。损坏的三个典型原因:1. 在发生裂脑事件之前曾经合作的进程独立地修改相同的逻辑共享状态,从而导致系统状态视图发生冲突。这通常被称为“多主机问题”。2. 在Split-Brain 事件之后接受新请求,然后在可能损坏的系统状态上执行(因此可能进一步损坏系统状态)。3. 当分布式系统的进程“重新加入”在一起时,它们可能对系统状态或资源所有权有冲突的看法。在解决冲突的过程中,信息可能会丢失或损坏。
简单来说,在脑裂的情况下,从某种意义上说,有两个(或更多)独立的集群在同一个共享存储上工作。这有可能导致数据损坏。
集群件如何解决“脑裂”的情况?
在脑裂的情况下,投票磁盘将用于确定哪些节点存活以及哪些节点将被驱逐。共同投票结果将是:
具有更多集群节点的组(队列)存活如果每个组中可用的节点数量相同,则具有较低节点成员的组(队列)将存活。已经进行了一些改进,以确保负载较低的节点在系统负载高引起驱逐的情况下仍然存在。
通常,当发生裂脑时,会在 ocssd.log 中看到类似以下的消息:
[ CSSD]2011-01-12 23:23:08.090 [1262557536]