NDB 叢集內部機制  /  NDB 叢集啟動階段  /  NDB_STTOR 階段 5

5.13 NDB_STTOR 階段 5

對於初始啟動和系統重新啟動,此階段表示執行本機檢查點。這由主節點處理,以便其他節點會立即從此階段返回。節點重新啟動和初始節點重新啟動在此階段執行從主要片段副本到啟動片段副本的記錄複製。在開始複製過程之前,會啟用本機檢查點。

將資料複製到啟動節點是節點接管協定的一部分。作為此協定的一部分,會更新啟動節點的節點狀態;這會使用全域檢查點協定進行通訊。等待這些事件發生,可確保新的節點狀態會傳達給所有節點及其系統檔案。

在節點的狀態已傳達之後,會向所有節點發出訊號,表示我們即將開始此節點的接管協定。此協定的一部分包含系統重新啟動階段期間的步驟 3 到 9,如本節稍後所述。這表示所有片段的還原、準備執行重做日誌、執行重做日誌,以及最後在重做日誌執行完成時回報給 DBDIH,這些都是此過程的一部分。

在準備工作完成後,必須執行節點中每個片段的複製階段。複製片段的過程包括下列步驟

  1. 啟動節點中的 DBLQH 核心區塊會收到 PREPARE_COPY_FRAGREQ 訊號,表示複製過程即將開始。

  2. DBLQH 承認此請求時,會向所有節點傳送 CREATE_FRAGREQ 訊號,通知它們正在準備將資料複製到此表格片段的此片段副本。

  3. 在所有節點都承認之後,會向要複製資料到新節點的節點傳送 COPY_FRAGREQ 訊號。這永遠是片段的主要片段副本。指示的節點會回應此訊息,將所有資料複製到啟動節點。

  4. 在複製完成且傳送 COPY_FRAGCONF 訊息之後,會透過 UPDATE_TOREQ 訊號通知所有節點完成。

  5. 在所有節點都已更新以反映片段的新狀態之後,會將複製已完成的事實通知啟動節點的 DBLQH 核心區塊,且現在片段副本是最新的,任何失敗現在都應視為真正的失敗。

  6. 如果新片段副本在建立表格時有此角色,則會轉換成主要片段副本。

  7. 在完成此變更後,會向所有節點傳送另一輪的 CREATE_FRAGREQ 訊息,通知它們片段的接管現在已提交。

  8. 之後,如果存在另一個片段,則會對下一個片段重複此過程。

  9. 當節點沒有更多要接管的片段時,會透過向所有節點傳送 UPDATE_TOREQ 訊號來通知它們。

  10. 等待下一個完整的本機檢查點發生,從開始到結束執行。

  11. 使用完整的全域檢查點更新節點狀態。與上一步中的本機檢查點一樣,必須允許全域檢查點開始,然後完成。

  12. 當全域檢查點完成時,它會傳送 END_TOREQ 訊號到所有節點,以傳達此節點重新啟動的本機檢查點成功。

  13. 會將 START_COPYCONF 傳送回啟動節點,通知它節點重新啟動已完成。

  14. 收到 START_COPYCONF 訊號會結束 NDB_STTOR 階段 5。這為系統重新啟動提供了另一個同步點,指定為 WAITPOINT_5_2

注意

理論上,此階段中的複製過程可由數個節點平行執行。但是,目前從主節點到所有節點的所有訊息都是一次傳送到單一節點,但可以完全平行化。這很可能在不久的將來完成。

在初始啟動和初始節點重新啟動中,SUMA 區塊會從 SUMA 主節點請求訂閱。NDBCNTR 執行 NDB_STTOR 階段 6。不會發生其他 NDBCNTR 活動。