NDB 叢集內部結構  /  NDB 叢集啟動階段  /  第 4 階段的系統重新啟動處理

5.21 第 4 階段的系統重新啟動處理

這包含下列步驟

  1. 主節點將最新的 GCI 設定為重新啟動 GCI,然後將其系統檔案同步到所有其他參與系統重新啟動的節點。

  2. 下一步是同步系統中所有節點的結構描述。這會在 15 個傳遞中執行。我們在此嘗試解決的問題,發生在節點運作時建立結構描述物件,但在節點關閉時遭捨棄,並且可能在該節點無法使用時,以相同的結構描述 ID 建立新的物件。為了處理這種情況,首先必須從啟動節點的角度,重新建立所有應該存在的物件。在此之後,任何叢集中其他節點在該節點「死亡」時所捨棄的物件都會被捨棄;這也適用於中斷期間所捨棄的任何資料表。最後,在啟動節點無法使用時,由其他節點建立的任何資料表,都會在啟動節點上重新建立。所有這些作業都是啟動節點的本機作業。作為此程序的一部分,也必須確保已在本機建立所有需要重新建立的資料表,並且在所有核心區塊中為這些資料表設定適當的資料結構。

    在主節點上執行先前描述的程序後,新的結構描述檔案會傳送給所有其他參與系統重新啟動的節點,它們會執行相同的同步作業。

  3. 參與重新啟動的所有片段都必須具有從 DBDIH 取得的適當參數。這會導致從 DBDIH 傳送許多 START_FRAGREQ 信號至 DBLQH。這也會啟動片段的還原,這些片段會一個一個還原,並在從磁碟讀取還原資料,以及平行將從磁碟讀取的還原資料套用到主記憶體的過程中,一次還原一個記錄。這只會還原資料表的主記憶體部分。

  4. 一旦還原所有片段,就會向啟動叢集中的所有節點傳送 START_RECREQ 訊息,然後會套用資料表任何磁碟資料部分的所有復原日誌。

  5. LGMAN 中套用復原日誌後,必須在 TSMAN 中執行一些還原工作,這需要掃描表格空間的區塊標頭。

  6. 接下來,必須準備執行重做日誌,此日誌最多可以在四個階段中執行。對於每個片段,可能需要執行來自數個不同節點的重做日誌。這是透過為特定片段在不同階段中執行重做日誌來處理,如同在傳送 START_FRAGREQ 信號時,在 DBDIH 中所決定的。會為每個在此階段中需要執行的階段和片段傳送 EXEC_FRAGREQ 信號。在傳送這些信號後,會向所有節點傳送 EXEC_SRREQ 信號,以告知它們可以開始執行重做日誌。

    注意

    在開始執行第一個重做日誌之前,必須確定先前由 DBLQH (在第 4 階段) 啟動的設定已完成,或等到完成後再繼續。

  7. 在執行重做日誌之前,必須計算出從何處開始讀取以及應該到達重做日誌結尾的位置。當到達要還原的最後一個 GCI 時,應該會找到重做日誌的結尾。

  8. 在完成重做日誌的執行後,超出要還原的最後一個 GCI 所寫入的所有重做日誌頁面都會失效。考慮到重做日誌的循環性質,這可能會使失效延伸到超出最後一個執行的新的重做日誌檔案。

  9. 在完成上一個步驟後,DBLQH 會使用 START_RECCONF 訊息將此回報給 DBDIH

  10. 當主節點收到來自所有啟動節點的回覆訊息時,它會將 NDB_STARTCONF 信號傳回至 NDBCNTR

  11. NDB_STARTCONF 訊息會向 NDBCNTR 發出 STTOR 第 4 階段結束的信號,而這是唯一在此階段中參與重要程度的區塊。