[ Database ] Oracle RAC 10g R2,Local Node 會自動重開機

Oracle RAC 10g R2 的 Local Node 在一種情況下會自動重開機。

實境:
server 1 與 server 2 上面安裝了 RHEL4,Oracle DB 10gR2,更新檔上到 10.2.0.3,做 RAC 環境。測試斷線運作的時候,把 Server 1 的 public 與 private 兩條線都拔掉。稍待一會後,Server 2 會自動重起。原因:
server 1 先開機,所以它是 master node,而 server 2 後來才加入 cluster group,所以是 local node。根據 Oracle Metalink 中提供的 RAC:FAQ(Doc ID: Note:220970.1)其中一條的內容:


Q: I have a 2-node RAC running. I notice that it is always node2 that is evicted when I test private network failure scenario by disconnecting the private network cable. Doesn’t matter whether it is node1’s or node2’s private network cable that is disconnected, it is always the node2 that is evicted. What happens in a 3-nodes RAC cluster if node1’s cable is disconnected?

A: The node with the lower node number will survive(The first node to join the cluster). In case of 3 nodes, 2 nodes will survive and the one you pulled the cable will go away. 4 nodes – the sub cluster with the lower node number will survive.


換言之,這是一個正常的情況。

由於 RAC 透過兩種機制來做心跳檢測(Heartbeat,以下簡稱 HB):一個是 Private 線路的 interconnection,第二個是 shared disk 的寫入。RAC 中的每個 node 會定時在 shared disk 上面寫入一個位元,好讓整個 cluster group 的其他 node 知道自己還活著。

我看過 server 2 的 log,server 2 會發現 server 1 的 interconnection 斷掉了,可是 disk HB 還活著。後來為了避免腦分裂,於是 node 數比較大的(server 1 先起來,所以是 node(1),而 server 2 後來才加入,所以是 node(2))的伺服器,就會自動重開。

Oracle RAC 的設計,並沒有交連其他 node 的 fence device,我想此舉的目的應該是為了避免腦分裂而採取的措施。