文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 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 Cluster 核心概念

25.2.1 NDB Cluster 核心概念

NDBCLUSTER (也稱為 NDB) 是一個提供高可用性和資料持久性的記憶體內儲存引擎。

NDBCLUSTER 儲存引擎可以配置一系列容錯移轉和負載平衡選項,但最容易的做法是從叢集層級開始使用儲存引擎。NDB Cluster 的 NDB 儲存引擎包含一整套資料,僅依賴叢集本身內的其他資料。

NDB Cluster 的 叢集 部分是獨立於 MySQL 伺服器配置的。在 NDB Cluster 中,叢集的每個部分都被視為一個 節點

注意

在許多情況下,術語 節點 用於表示電腦,但在討論 NDB Cluster 時,它表示一個 處理程序。可以在一台電腦上執行多個節點;對於正在執行一個或多個叢集節點的電腦,我們使用術語 叢集主機

叢集節點有三種型別,在最精簡的 NDB Cluster 配置中,至少有三個節點,每個型別各一個

  • 管理節點:此型別節點的作用是管理 NDB Cluster 內的其他節點,執行諸如提供配置資料、啟動和停止節點以及執行備份等功能。由於此節點型別管理其他節點的配置,因此應先啟動此型別的節點,然後再啟動任何其他節點。管理節點使用 ndb_mgmd 命令啟動。

  • 資料節點:此型別的節點儲存叢集資料。資料節點的數量等於片段複本的數量乘以片段的數量(請參閱第 25.2.2 節「NDB Cluster 節點、節點群組、片段複本和分割區」)。例如,如果有兩個片段複本,每個複本有兩個片段,則需要四個資料節點。一個片段複本足以用於資料儲存,但不提供冗餘;因此,建議使用兩個(或更多)片段複本來提供冗餘,從而實現高可用性。資料節點使用 ndbd 命令啟動(請參閱 第 25.5.1 節「ndbd — NDB Cluster 資料節點精靈」)或 ndbmtd 命令啟動(請參閱 第 25.5.3 節「ndbmtd — NDB Cluster 資料節點精靈(多執行緒)」)。

    NDB Cluster 表格通常完全儲存在記憶體中,而不是在磁碟上(這就是我們將 NDB Cluster 稱為記憶體內資料庫的原因)。但是,一些 NDB Cluster 資料可以儲存在磁碟上;如需詳細資訊,請參閱第 25.6.11 節「NDB Cluster 磁碟資料表」

  • SQL 節點:這是一個存取叢集資料的節點。在 NDB Cluster 的情況下,SQL 節點是使用 NDBCLUSTER 儲存引擎的傳統 MySQL 伺服器。SQL 節點是使用 --ndbcluster--ndb-connectstring 選項啟動的 mysqld 處理程序,這些選項在本章的其他地方進行了說明,也可能帶有其他 MySQL 伺服器選項。

    SQL 節點實際上只是一種特殊型別的 API 節點,它指定任何存取 NDB Cluster 資料的應用程式。API 節點的另一個範例是 ndb_restore 公用程式,用於還原叢集備份。可以使用 NDB API 撰寫此類應用程式。如需有關 NDB API 的基本資訊,請參閱NDB API 入門

重要事項

在生產環境中採用三節點設定是不切實際的。此類配置不提供冗餘;若要從 NDB Cluster 的高可用性功能中獲益,必須使用多個資料和 SQL 節點。也強烈建議使用多個管理節點。

如需簡要介紹 NDB Cluster 中節點、節點群組、片段複本和分割區之間的關係,請參閱第 25.2.2 節「NDB Cluster 節點、節點群組、片段複本和分割區」

叢集的配置涉及配置叢集中的每個單獨節點,以及設定節點之間的單獨通訊連結。NDB Cluster 目前的設計意圖是,資料節點在處理器能力、記憶體空間和頻寬方面是同質的。此外,為了提供單一的配置點,整個叢集的所有配置資料都位於一個組態檔中。

管理伺服器管理叢集組態檔和叢集日誌。叢集中的每個節點都會從管理伺服器擷取配置資料,因此需要一種方法來判斷管理伺服器所在的位置。當資料節點中發生有趣的事件時,節點會將有關這些事件的資訊傳輸到管理伺服器,然後管理伺服器會將資訊寫入叢集日誌。

此外,可以有任意數量的叢集用戶端處理程序或應用程式。這些包括標準 MySQL 用戶端、NDB 特定 API 程式和管理用戶端。以下段落將介紹這些內容。

標準 MySQL 用戶端。 NDB Cluster 可以與以 PHP、Perl、C、C++、Java、Python 等編寫的現有 MySQL 應用程式一起使用。此類用戶端應用程式會將 SQL 陳述式傳送到充當 NDB Cluster SQL 節點的 MySQL 伺服器並從中接收回應,其方式與它們與獨立 MySQL 伺服器互動的方式大致相同。

可以使用 NDB Cluster 作為資料來源的 MySQL 用戶端可以進行修改,以利用與多個 MySQL 伺服器連線來實現負載平衡和容錯移轉的能力。例如,使用 Connector/J 5.0.6 及更高版本的 Java 用戶端可以使用 jdbc:mysql:loadbalance:// URL (在 Connector/J 5.1.7 中進行了改進) 以透明方式實現負載平衡;如需有關將 Connector/J 與 NDB Cluster 結合使用的更多資訊,請參閱將 Connector/J 與 NDB Cluster 結合使用

NDB 用戶端程式。 可以撰寫用戶端程式,使用高階 C++ API NDB API,直接從 NDBCLUSTER 儲存引擎存取 NDB Cluster 資料,從而繞過可能連線到叢集的任何 MySQL 伺服器。此類應用程式對於不需要 SQL 資料介面的特殊用途可能很有用。如需更多資訊,請參閱NDB API

也可以使用適用於 Java 的 NDB Cluster 連接器針對 NDB Cluster 撰寫NDB 特定 Java 應用程式。此 NDB Cluster 連接器包括ClusterJ,這是一個類似於物件關聯對應持久性架構 (例如,直接連線至 NDBCLUSTER 的 Hibernate 和 JPA) 的高階資料庫 API,因此不需要存取 MySQL 伺服器。如需更多資訊,請參閱Java 和 NDB Cluster,以及ClusterJ API 和資料物件模型

對使用 Node.js 以 JavaScript 撰寫的應用程式的 NDB Cluster 支援已棄用,但在 NDB 9.0 中仍受支援。如需更多資訊,請參閱適用於 JavaScript 的 MySQL NoSQL 連接器

管理用戶端。 這些用戶端連線到管理伺服器,並提供用於正常啟動和停止節點、啟動和停止訊息追蹤 (僅限偵錯版本)、顯示節點版本和狀態、啟動和停止備份等的命令。此類程式的範例是 NDB Cluster 隨附的 ndb_mgm 管理用戶端(請參閱第 25.5.5 節「ndb_mgm — NDB Cluster 管理用戶端」)。可以使用 MGM API(一種直接與一個或多個 NDB Cluster 管理伺服器通訊的 C 語言 API)撰寫此類應用程式。如需更多資訊,請參閱MGM API

Oracle 還提供 MySQL Cluster Manager,它提供了一個進階命令列介面,簡化了許多複雜的 NDB Cluster 管理任務,例如重新啟動具有大量節點的 NDB Cluster。MySQL Cluster Manager 用戶端還支援用於取得和設定大多數節點配置參數的值以及與 NDB Cluster 相關的 mysqld 伺服器選項和變數的命令。如需更多資訊,請參閱MySQL Cluster Manager 9.0.0 使用者手冊

事件日誌。 NDB叢集會依據類別(啟動、關閉、錯誤、檢查點等等)、優先順序和嚴重性來記錄事件。所有可報告事件的完整列表可以在第25.6.3節「NDB叢集中產生的事件報告」中找到。事件日誌分為以下兩種:

  • 叢集日誌:記錄整個叢集所有想要報告的事件。

  • 節點日誌:為每個單獨的節點維護的獨立日誌。

注意

在正常情況下,只需保留並檢查叢集日誌即可。節點日誌僅用於應用程式開發和除錯目的。

檢查點。 一般來說,當資料儲存到磁碟時,就表示已達到一個檢查點。更具體地說,在NDB叢集中,檢查點是指所有已提交的交易都儲存到磁碟的時間點。關於NDB儲存引擎,有兩種檢查點類型協同工作,以確保維護叢集資料的一致性視圖。這些類型如下列所示:

  • 本機檢查點 (LCP):這是特定於單一節點的檢查點;但是,LCP會在叢集中的所有節點上或多或少同時發生。LCP通常每隔幾分鐘發生一次;確切的間隔時間會有所不同,並取決於節點儲存的資料量、叢集活動的程度和其他因素。

    NDB 9.0 支援部分LCP,在某些情況下可以顯著提高效能。請參閱啟用部分LCP並控制其使用儲存量的EnablePartialLcpRecoveryWork 組態參數的描述。

  • 全域檢查點 (GCP):GCP每隔幾秒鐘發生一次,當所有節點的交易同步並且重做日誌刷新到磁碟時發生。

有關本機檢查點和全域檢查點建立的檔案和目錄的更多資訊,請參閱NDB叢集資料節點檔案系統目錄

傳輸器。 我們使用傳輸器一詞來表示資料節點之間使用的資料傳輸機制。MySQL NDB 叢集 9.0 支援以下三種傳輸器:

由於 TCP/IP over Ethernet 無所不在,因此大多數使用者都使用它來進行 NDB 叢集。

無論使用哪種傳輸器,NDB 都會盡力確保資料節點程序之間的通訊使用盡可能大的區塊來執行,因為這有助於所有類型的資料傳輸。