以下章節描述了 MySQL NDB Cluster 在 NDB Cluster 8.4.0 中的實作變更,相較於先前的發行系列。NDB Cluster 8.4 作為開發版本提供,用於預覽和測試目前正在開發中的新功能。對於生產環境,請使用 NDB 8.0;如需更多資訊,請參閱 MySQL NDB Cluster 8.0。NDB Cluster 7.6 和 7.5 是先前仍在生產環境中支援的 GA 版本,但我們建議生產環境的新部署使用 MySQL NDB Cluster 8.0。
NDB Cluster 7.4 和 7.3 是先前已達生命週期的 GA 版本;它們不再支援或維護。
NDB Cluster 8.4 的新功能
此處列出 NDB Cluster 8.4 中可能令人感興趣的主要變更和新功能
ndbinfo transporter_details 表格。
transporter_details
表格提供有關 NDB 叢集中使用的個別傳輸器的資訊。它與ndbinfo
transporters
表格類似,後者以彙總形式提供此類資訊。與 NDB 8.0 中引入的版本相比,NDB 8.4.0 提供了額外的欄位。這些新欄位以及每個欄位的簡短描述在此列出
sendbuffer_used_bytes
:目前使用此傳輸器儲存待傳送訊號資料的位元組數。sendbuffer_max_used_bytes
:使用此傳輸器儲存待傳送訊號資料的歷史最大位元組數。傳輸器連接時重設。sendbuffer_alloc_bytes
:目前配置給此傳輸器以儲存待傳送位元組的傳送緩衝區位元組數。傳送緩衝區記憶體以可能稀疏使用的大區塊配置。sendbuffer_max_alloc_bytes
:配置給此傳輸器以儲存待傳送位元組的傳送緩衝區歷史最大位元組數。
NDB 8.4.1 新增了一個
type
欄位,該欄位顯示傳輸的連線類型(TCP
或SHM
)。如需更多資訊,請參閱 第 25.6.17.65 節,「ndbinfo transporter_details 表格」。
NDB 複寫:篩選未使用更新。 先前,當執行二進位日誌的 SQL 節點使用
log_replica_updates=OFF
時,在複本 NDB 叢集上套用的任何複寫更新都會傳送到執行二進位日誌的 SQL 節點。這些更新實際上並未套用或用於任何其他用途;這會導致不必要的網路流量和資源消耗。在 NDB 8.4 及更高版本中,在複本 SQL 節點上套用的更新會在此節點上篩選掉,且不再傳送到任何其他 SQL 節點。未觸發任何日誌記錄的更新也不再由複本傳送。
MySQL Cluster Manager 具有進階的命令列介面,可以簡化許多複雜的 NDB Cluster 管理任務。如需更多資訊,請參閱 MySQL Cluster Manager 8.4.1 使用者手冊。
NDB 8.x 創新版本中的變更
此處列出 NDB Cluster 創新版本(8.1、8.2、8.3)與 NDB 8.0 相比,可能令人感興趣的新功能和主要變更
叢集節點通訊的 TLS。 NDB Cluster 8.3 及更高版本支援透過傳輸層安全性 (TLS) 和網際網路公鑰基礎結構 (PKI) 保護的網路通訊,以驗證和加密 NDB 節點之間以及 NDB 管理伺服器及其用戶端之間的連線;TLS 適用於 NDB 傳輸器協定和 NDB 管理協定。
此功能使用 TLS 相互驗證,其中節點自己的憑證檔案包含節點用於驗證其對等節點憑證的信任鏈。當在叢集上啟用 TLS 時,資料和管理節點使用 TLS 來執行下列任務
在網路層級相互驗證
NDB
用戶端和伺服器,防止以用戶端或伺服器身分進行未經授權的存取加密資料傳輸,避免資料竊聽、修改和中間人攻擊
使用 MySQL 用戶端協定的連線採用 MySQL 使用者驗證,且可以使用 TLS(包括選用的相互 TLS),如本手冊其他地方所述;如需更多資訊,請參閱 第 8.3 節,「使用加密連線」。
NDB
實作了一個新工具 ndb_sign_keys,可用於建立和管理 CA、憑證檔案和金鑰。您可以使用 ndb_sign_keys--create-key
,使用給定的組態檔為叢集中的所有節點產生一組金鑰和憑證。使用 ndb_sign_keys,可以將節點憑證繫結至特定的主機名稱,使其在給定的日期到期,並與給定的節點類型相關聯,以便用戶端與伺服器不同,管理伺服器與資料節點不同。(每個 NDB TLS 憑證都可用於 MGM 用戶端連線。)私密金鑰會在適當位置建立,以便盡量減少包含私密金鑰的檔案複製。私密金鑰和憑證都標示為有效或擱置;ndb_sign_keys 也提供金鑰輪換的說明,以允許擱置的金鑰在有效金鑰到期之前取代有效金鑰。
可以使用 ndb_mgm 用戶端,並使用
--test-tls
從系統 Shell 測試節點 TLS 連線,或在 ndb_mgm 用戶端中使用TLS INFO
命令進行測試。您可以透過檢查ndbinfo
certificates
表格來取得有關叢集節點使用的憑證資訊。若要強制要求 TLS,請在每個叢集主機的
my.cnf
中設定用戶端選項ndb-mgm-tls=strict
,然後在叢集config.ini
檔案的[mgm default]
區段中設定RequireTls=true
,並在組態檔的[ndbd default]
區段中設定RequireTls=true
。然後執行叢集的輪流重新啟動,使用--reload
--config-file
重新啟動管理伺服器。NDB 8.3 及更高版本中的 NDB Cluster API 應用程式也支援使用 TLS 連線。如需有關 MGM API 支援的資訊,請參閱 TLS 函數。NDB API
Ndb_cluster_connection
類別新增了configure_tls()
get_tls_certificate_path()
方法,用於設定用戶端的 TLS 連線。更多資訊,請參閱第 25.6.15 節,「NDB 叢集的 TLS 連結加密」,以及第 25.5.28 節,「ndb_sign_keys — 為 NDB 叢集建立、簽署和管理 TLS 金鑰與憑證」。
二進制日誌注入器記憶體配置。在先前版本的 NDB 叢集中,當
NDB
二進制日誌注入器處理結構描述變更並追蹤二進制日誌的狀態時,為了這些目的配置記憶體的選擇,是透過變更執行緒局部指標來強制執行,藉此嘗試捕捉在 epoch 處理期間執行的所有配置。在 epoch 結束時,這些指標會重設,arena 記憶體會釋放,且 arena 結構會捨棄;這會釋放記憶體,但也需要為下一個 epoch 再次設定。執行緒局部指標的變更也引入了在不同子系統中啟動功能時,錯誤配置記憶體的風險。MySQL NDB 叢集 8.3 對此功能進行了以下改進已移除對執行緒局部指標的變更,並改為使用明確的引數來提供在 epoch 期間用於配置的 arena。
重複使用下一個 epoch 的 arena,因此避免了重複設定的需要。
這些變更僅限內部,但應透過節省連續 epoch 中的記憶體釋放和重新配置,提供顯著的改進。
NDB API 主鍵更新。先前,當嘗試使用除了
NdbRecord
之外的任何機制來更新主鍵值時,NDB API 會傳回錯誤 4202 不允許在 tuple 金鑰屬性上設定值,即使設定的值與現有值相同。在 NDB 8.1 及更高版本中,當使用其他方法執行更新時,檢查會移交給資料節點,就像使用NdbRecord
執行更新時一樣。這表示您現在可以使用
NdbOperation::setValue()
、NdbInterpretedCode::write_attr()
,以及其他設定欄位值的NdbOperation
和NdbInterpretedCode
方法(包括NdbOperation
方法incValue()
、subValue()
,以及NdbInterpretedCode
方法add_val()
、sub_val()
等等)來執行主鍵更新。這也適用於NdbOperation
介面的OperationOptions::OO_SETVALUE
擴充功能。改進的警告。對警告輸出進行了以下改進
除了本機檢查點 (LCP) 經過時間之外,現在也會列印允許的最大無進度時間。
當 LCP 達到
WAIT_END_LCP
狀態時,表格 ID 和片段 ID 未定義,因此不再相關;因此,我們不再嘗試在該點列印它們。移除達到最大限制時列印的重複資訊(相同的資訊同時顯示為警告和當機資訊)。
此外,當
log_error_verbosity
大於或等於 3(INFO 層級)時,我們不再以每隔ndb_metadata_check_interval
秒(預設為 60 秒)將訊息 正在驗證排除的物件 列印到 SQL 節點的錯誤日誌,因為此類訊息往往會淹沒錯誤日誌,使其難以檢查,並使用過多的磁碟空間,而沒有為使用者提供任何額外的好處。現在以正確且安全的方式處理以非常大且可能重疊的
IN()
和NOT IN()
清單為特色的查詢之間的推送聯結。ndbcluster
外掛程式日誌訊息現在使用SYSTEM
作為日誌層級,並使用NDB
作為記錄的子系統。這表示永遠會列印ndbcluster
外掛程式的資訊訊息;其詳細程度可以使用--ndb_extra_logging
來控制。