NDB cluster 節點之間的通訊通常使用 TCP/IP 處理。共享記憶體 (SHM) 傳輸器的特色在於,訊號是透過寫入記憶體而非透過 socket 傳輸。當在同一主機上一起執行 API 節點 (通常是 SQL 節點) 和資料節點時,共享記憶體傳輸器 (SHM) 可以減少 TCP 連線所需的 20% 開銷,從而提高效能。您可以使用以下兩種方法中的任一種啟用共享記憶體連線
假設叢集正在執行一個節點 ID 為 1 的資料節點,以及一個在同一部主機電腦 (位於 10.0.0.1) 上具有節點 ID 51 的 SQL 節點。若要在這兩個節點之間啟用 SHM 連線,只需確保叢集設定檔中包含下列項目即可
[ndbd]
NodeId=1
HostName=10.0.0.1
UseShm=1
[mysqld]
NodeId=51
HostName=10.0.0.1
剛才顯示的兩個項目是叢集所需的任何其他項目和參數設定之外的項目。本節稍後將顯示更完整的範例。
在啟動使用 SHM 連線的資料節點之前,還必須確保每個執行此類資料節點的電腦上的作業系統,都已將足夠的記憶體配置給共享記憶體區段。請參閱您的作業平台文件,以取得有關這方面的資訊。在多個主機各自執行資料節點和 API 節點的設定中,可以透過在設定檔的 [ndbd default]
區段中設定 UseShm
,在所有此類主機上啟用共享記憶體。本節稍後的範例中會顯示此做法。
雖然並非嚴格要求,但可以透過在叢集設定 (config.ini
) 檔的 [shm default]
區段中設定下列一或多個參數,來調整叢集中所有 SHM 連線的設定
ShmSize
:共享記憶體大小ShmSpinTime
:在進入睡眠之前旋轉的時間 (以微秒為單位)SendBufferMemory
:從此節點傳送之訊號的緩衝區大小 (以位元組為單位)。SendSignalId
:指出每個透過傳輸器傳送的訊號中都包含訊號 ID。Checksum
:指出每個透過傳輸器傳送的訊號中都包含檢查碼。PreSendChecksum
:在傳送訊號之前進行檢查碼檢查;必須先啟用檢查碼,此功能才能運作
此範例顯示在多個主機上定義 SHM 連線的簡單設定,在 NDB Cluster 中,使用這裡列出的 3 部主機名稱電腦,執行顯示的節點類型
10.0.0.0
:管理伺服器10.0.0.1
:資料節點和 SQL 節點10.0.0.2
:資料節點和 SQL 節點
在此情況下,每個資料節點都使用 TCP 傳輸器與管理伺服器和其他資料節點通訊;每個 SQL 節點都使用共享記憶體傳輸器與其本機的資料節點通訊,並使用 TCP 傳輸器與遠端資料節點通訊。config.ini 檔案的內容如下,以啟用反映此設定的基本設定
[ndbd default]
DataDir=/path/to/datadir
UseShm=1
[shm default]
ShmSize=8M
ShmSpintime=200
SendBufferMemory=4M
[tcp default]
SendBufferMemory=8M
[ndb_mgmd]
NodeId=49
Hostname=10.0.0.0
DataDir=/path/to/datadir
[ndbd]
NodeId=1
Hostname=10.0.0.1
DataDir=/path/to/datadir
[ndbd]
NodeId=2
Hostname=10.0.0.2
DataDir=/path/to/datadir
[mysqld]
NodeId=51
Hostname=10.0.0.1
[mysqld]
NodeId=52
Hostname=10.0.0.2
[api]
[api]
影響所有共享記憶體傳輸器的參數設定於 [shm default]
區段中;這些參數可以在一或多個 [shm]
區段中針對每個連線覆寫。每個此類區段都必須與給定的 SHM 連線產生關聯,方法是使用 NodeId1
和 NodeId2
;這些參數所需的值是透過傳輸器連線的兩個節點的節點 ID。您也可以使用 HostName1
和 HostName2
,依主機名稱識別節點,但這些參數並非必要。
未設定主機名稱的 API 節點會使用 TCP 傳輸器,與資料節點通訊,不受這些節點啟動所在主機的影響;設定檔的 [tcp default]
區段中設定的參數和值會套用至叢集中的所有 TCP 傳輸器。
為了達到最佳效能,您可以為 SHM 傳輸器定義旋轉時間 ( ShmSpinTime
參數);這會影響 NDB
中的資料節點接收器執行緒和輪詢擁有者 (接收執行緒或使用者執行緒)。
-
版本 (或更新版本) NDB 8.4.0 類型或單位 布林值 預設值 true 範圍 true, false 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
此參數是布林值 (
Y
/N
) 參數,預設為停用。啟用後,會在將所有訊息放入傳送緩衝區之前,計算這些訊息的檢查碼。此功能可防止訊息在等待傳送緩衝區時損毀。它也可以檢查資料是否在傳輸期間損毀。
-
版本 (或更新版本) NDB 8.4.0 類型或單位 unsigned 預設值 35 範圍 0 - 200 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
決定群組的接近程度;值越小表示越接近。預設值足以應付大多數狀況。
-
版本 (或更新版本) NDB 8.4.0 類型或單位 名稱或 IP 位址 預設值 [...] 範圍 ... 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
HostName1
和HostName2
參數可用於指定在兩個節點之間用於給定 SHM 連線的特定網路介面。這些參數所使用的值可以是主機名稱或 IP 位址。 -
版本 (或更新版本) NDB 8.4.0 類型或單位 名稱或 IP 位址 預設值 [...] 範圍 ... 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
HostName1
和HostName2
參數可用於指定在兩個節點之間用於給定 SHM 連線的特定網路介面。這些參數所使用的值可以是主機名稱或 IP 位址。 -
版本 (或更新版本) NDB 8.4.0 類型或單位 數值 預設值 [無] 範圍 1 - 255 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
若要識別兩個節點之間的連線,必須為每個節點提供節點識別碼,如
NodeId1
和NodeId2
。 -
版本 (或更新版本) NDB 8.4.0 類型或單位 數值 預設值 [無] 範圍 1 - 255 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
若要識別兩個節點之間的連線,必須為每個節點提供節點識別碼,如
NodeId1
和NodeId2
。 -
版本 (或更新版本) NDB 8.4.0 類型或單位 數值 預設值 [無] 範圍 1 - 63 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
識別共享記憶體連線的伺服器端。依預設,這是資料節點的節點 ID。
-
版本 (或更新版本) NDB 8.4.0 類型或單位 位元組 預設值 0 範圍 0 - 4294967039 (0xFFFFFEFF) 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
當傳送緩衝區中未傳送的位元組超過此數量時,會將連線視為過載。請參閱第 25.4.3.14 節:「設定 NDB Cluster 傳送緩衝區參數」和第 25.6.17.66 節:「ndbinfo transporters 資料表」,以取得更多資訊。
-
版本 (或更新版本) NDB 8.4.0 類型或單位 布林值 預設值 false 範圍 true, false 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
如果同時啟用此參數和
Checksum
,則會執行傳送前檢查碼檢查,並檢查節點之間的所有 SHM 訊號是否有錯誤。如果未同時啟用Checksum
,則無任何作用。 -
版本 (或更新版本) NDB 8.4.0 類型或單位 整數 預設值 2M 範圍 256K - 4294967039 (0xFFFFFEFF) 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
使用共享記憶體連線從此節點傳送之訊號的共享記憶體緩衝區大小 (以位元組為單位)。
-
版本 (或更新版本) NDB 8.4.0 類型或單位 布林值 預設值 false 範圍 true, false 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
若要追蹤分散式訊息的路徑,必須為每個訊息提供唯一識別碼。將此參數設定為
Y
會導致這些訊息 ID 也透過網路傳輸。此功能在生產版本中預設為停用,在-debug
版本中預設為啟用。 -
版本 (或更新版本) NDB 8.4.0 類型或單位 unsigned 預設值 0 範圍 0 - 4294967039 (0xFFFFFEFF) 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
在設定共享記憶體區段時,會使用表示為整數的節點 ID 來唯一識別用於通訊的共享記憶體區段。沒有預設值。如果已啟用
UseShm
,則NDB
會自動計算共享記憶體索引鍵。 -
版本 (或更新版本) NDB 8.4.0 類型或單位 位元組 預設值 4M 範圍 64K - 4294967039 (0xFFFFFEFF) 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
每個 SHM 連線都有一個共享記憶體區段,傳送端會將訊息放入其中,而接收端則會從中讀取。這個區段的大小由
ShmSize
定義。預設值為 4MB。 -
版本 (或更新版本) NDB 8.4.0 類型或單位 整數 預設值 0 範圍 0 - 2000 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
接收時,在進入休眠狀態前要等待的時間,以微秒為單位。
-
版本 (或更新版本) NDB 8.4.0 類型或單位 unsigned 預設值 [...] 範圍 0 - 4294967039 (0xFFFFFEFF) 已棄用 是 (在 NDB 7.6 中) 重新啟動類型 節點重新啟動:需要叢集的滾動重新啟動。(NDB 8.4.0)
此參數以前用於覆寫作業系統訊號編號;在 NDB 8.4 中,已不再使用,任何對此參數的設定都會被忽略。
重新啟動類型。 本節中參數描述所使用的重新啟動類型資訊如下表所示
表 25.21 NDB Cluster 重新啟動類型
符號 | 重新啟動類型 | 描述 |
---|---|---|
N | 節點 | 可以使用滾動重新啟動來更新參數 (請參閱第 25.6.5 節,「執行 NDB Cluster 的滾動重新啟動」) |
S | 系統 | 必須完全關閉所有叢集節點,然後重新啟動,才能生效此參數的變更 |
I | 初始 | 必須使用 --initial 選項重新啟動資料節點 |