文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  NDB 叢集節點、節點群組、片段複本和分割區

25.2.2 NDB 叢集節點、節點群組、片段複本和分割區

本節討論 NDB 叢集如何分割和重複資料以進行儲存。

在接下來的幾個段落中,將討論一些理解本主題的核心概念。

資料節點。 ndbdndbmtd 程序,其儲存一個或多個片段複本,也就是指派給節點所屬節點群組的分割區(在本節稍後討論)的複本。

每個資料節點都應該位於單獨的電腦上。雖然也可以在單一電腦上託管多個資料節點程序,但通常不建議這樣配置。

在指稱 ndbdndbmtd 程序時,通常會將術語節點資料節點交替使用;在討論中提及時,會明確指定管理節點 (ndb_mgmd 程序) 和 SQL 節點 (mysqld 程序)。

節點群組。 節點群組由一個或多個節點組成,並儲存分割區或多組片段複本(請參閱下一個項目)。

NDB 叢集中的節點群組數量無法直接設定;它是資料節點數量和片段複本數量 (NoOfReplicas 設定參數) 的函數,如下所示

[# of node groups] = [# of data nodes] / NoOfReplicas

因此,如果 config.ini 檔案中的 NoOfReplicas 設定為 1,則具有 4 個資料節點的 NDB 叢集會有 4 個節點群組;如果 NoOfReplicas 設定為 2,則會有 2 個節點群組;如果 NoOfReplicas 設定為 4,則會有 1 個節點群組。片段複本將在本節稍後討論;如需有關 NoOfReplicas 的詳細資訊,請參閱第 25.4.3.6 節,「定義 NDB 叢集資料節點」

注意

NDB 叢集中的所有節點群組必須具有相同數量的資料節點。

您可以將新的節點群組 (以及新的資料節點) 線上新增至執行中的 NDB 叢集;如需詳細資訊,請參閱第 25.6.7 節,「線上新增 NDB 叢集資料節點」

分割區。 這是叢集儲存的資料部分。每個節點都負責維護至少一個指派給它的任何分割區複本 (也就是至少一個片段複本),供叢集使用。

NDB 叢集預設使用的分割區數量取決於資料節點數量和資料節點使用的 LDM 執行緒數量,如下所示

[# of partitions] = [# of data nodes] * [# of LDM threads]

使用執行 ndbmtd 的資料節點時,LDM 執行緒數量由 MaxNoOfExecutionThreads 的設定控制。使用 ndbd 時,會有單一 LDM 執行緒,這表示叢集分割區的數量與參與叢集的節點數量相同。使用 ndbmtdMaxNoOfExecutionThreads 設定為 3 或更少時,情況也是如此。(您應該注意,LDM 執行緒的數量會隨著此參數的值而增加,但並非嚴格線性增加,而且設定它還有其他限制;如需詳細資訊,請參閱 MaxNoOfExecutionThreads 的描述。)

NDB 和使用者定義的分割區。 NDB 叢集通常會自動分割 NDBCLUSTER 表格。不過,也可以對 NDBCLUSTER 表格採用使用者定義的分割區。這受限於以下限制

  1. 在搭配 NDB 表格的生產環境中,僅支援 KEYLINEAR KEY 分割區配置。

  2. 可以針對任何 NDB 表格明確定義的最大分割區數量為 8 * [LDM 執行緒數量] * [節點群組數量],而 NDB 叢集中的節點群組數量取決於本節前面討論的內容。針對資料節點程序執行 ndbd 時,設定 LDM 執行緒數量不會產生任何影響 (因為 ThreadConfig 僅適用於 ndbmtd);在這種情況下,就執行此計算的目的而言,此值可視為等於 1。

    如需詳細資訊,請參閱第 25.5.3 節,「ndbmtd — NDB 叢集資料節點守護程式 (多執行緒)」

如需有關 NDB 叢集和使用者定義分割區的詳細資訊,請參閱第 25.2.7 節,「NDB 叢集的已知限制」,以及第 26.6.2 節,「與儲存引擎相關的分割區限制」

片段複本。 這是叢集分割區的複本。節點群組中的每個節點都儲存片段複本。有時也稱為分割區複本。片段複本的數量等於每個節點群組的節點數量。

片段複本完全屬於單一節點;一個節點可以 (通常會) 儲存多個片段複本。

下圖說明具有四個資料節點執行 ndbd 的 NDB 叢集,其排列在兩個節點群組中,每個群組各包含兩個節點;節點 1 和 2 屬於節點群組 0,而節點 3 和 4 屬於節點群組 1。

注意

此處僅顯示資料節點;雖然執行中的 NDB 叢集需要一個用於叢集管理的 ndb_mgmd 程序,以及至少一個 SQL 節點來存取叢集儲存的資料,但為了清楚起見,圖中省略了這些程序。

圖 25.2 具有兩個節點群組的 NDB 叢集

Content is described in the surrounding text.

叢集儲存的資料會分為四個分割區,編號為 0、1、2 和 3。每個分割區都會以多個複本儲存在相同的節點群組上。分割區會以交替方式儲存在不同的節點群組上,如下所示

  • 分割區 0 儲存在節點群組 0 上;一個主要片段複本(主要副本)儲存在節點 1 上,而一個備份片段複本(分割區的備份副本)儲存在節點 2 上。

  • 分割區 1 儲存在另一個節點群組(節點群組 1)上;這個分割區的主要片段複本在節點 3 上,而其備份片段複本在節點 4 上。

  • 分割區 2 儲存在節點群組 0 上。然而,其兩個片段複本的放置方式與分割區 0 相反;對於分割區 2,主要片段複本儲存在節點 2 上,而備份複本則在節點 1 上。

  • 分割區 3 儲存在節點群組 1 上,而其兩個片段複本的放置方式與分割區 1 相反。也就是說,其主要片段複本位於節點 4 上,而備份複本則在節點 3 上。

關於 NDB Cluster 持續運作的意義是:只要參與叢集的每個節點群組都至少有一個節點在運作,叢集就擁有所有資料的完整副本並保持可運作狀態。下圖說明了這一點。

圖 25.3 2x2 NDB Cluster 所需的節點

Content is described in the surrounding text.

在這個範例中,叢集由兩個節點群組組成,每個節點群組包含兩個資料節點。每個資料節點都在執行一個 ndbd 的實例。節點群組 0 中至少一個節點和節點群組 1 中至少一個節點的任何組合都足以保持叢集存活。但是,如果單個節點群組中的兩個節點都發生故障,則由另一個節點群組中的其餘兩個節點組成的組合則不足夠。在這種情況下,叢集已遺失整個分割區,因此無法再提供對所有 NDB Cluster 資料完整集合的存取。

單個 NDB Cluster 實例支援的最大節點群組數為 48 個。