MySQL NDB Cluster & MySQL Router 於 Windows 環境下運行及設定教學

2024/03/04 48 1 軟體應用 , 伺服器 , 資料庫

MySQL NDB Cluster 是一種高度可用、高性能、可擴展的 MySQL 資料庫解決方案,旨在滿足需要高可用性和低延遲的應用需求。它基於 MySQL Server 和 MySQL Cluster 的技術,具有分布式架構和自動故障恢復功能。

以下是 MySQL NDB Cluster 的一些關鍵特性:

1. 分布式架構:MySQL NDB Cluster 將資料和查詢分佈在多個節點上,實現了水平擴展和負載平衡。
2. 高可用性:NDB Cluster 具有自動故障檢測和恢復功能,能夠在單個節點故障時繼續提供服務,保證系統的高可用性。
3. 實時資料存取:NDB Cluster 提供了快速的寫入和讀取操作,支持實時資料存取,適用於需要低延遲的應用場景,如在線遊戲、電信等。

MySQL Router 是 MySQL 官方提供的一個路由器軟體,用於提供對 MySQL NDB Cluster 和其他 MySQL 伺服器的連接和路由。它可以處理客戶端的連接請求,將這些請求路由到適當的 MySQL 伺服器或 NDB Cluster 中。

以下是 MySQL Router 的一些主要功能:

1. 路由和負載平衡:MySQL Router 可以根據配置的規則,將客戶端的連接請求分發到適當的 MySQL 伺服器或 NDB Cluster 中,實現負載平衡。
2. 自動發現:MySQL Router 可以通過自動發現機制,動態地發現和監控 MySQL 伺服器和 NDB Cluster 的變化,保證連接的可靠性和穩定性。
3. 安全性:MySQL Router 支援 SSL 加密和其他安全機制,保護資料的安全性和隱私性。

這兩套軟體都可以從官方網站下載到,也都支援多種作業系統,這邊我們以 Windows 作業系統為環境來實際運行分散式的 MySQL 資料庫,也就是 MySQL NDB Cluster,並且加裝 MySQL Router 讓引導客戶端連接至對應的資料庫節點,達到分散式架構的自動負載平衡。

首先我為了建置測試環境,先在主電腦中架設了三台 Windows 作業系統的虛擬機(VM),這三台都直接橋接到家中的路由器,讓它們與我家中的其他電腦同網段,這樣家裡的每台電腦就能成為客戶端,不管是透過軟體、程式語言都能測試連線!VM 分別命名為 [VM1] NDB_MGMD、[VM2] SQL_NODE_1、[VM3] SQL_NODE_2,它們又分別被分配到 192.168.1.131、192.168.1.132、192.168.1.133 三個區網 IP。NDB_MGMD 的部分為主要的 VM,要運行 MySQL NDB 管理節點及 MySQL Router,並且需要打開 7000 Port。SQL_NODE_1 與 SQL_NODE_2 則是作為分散架構的成員,都會運行 MySQL NDB 資料節點及 SQL 節點,並且打開 3306 Port。關於防火牆的設置,我這邊建置的很鬆散,請依照實際需求及情境來調整。


▲ 自行繪製的架構圖。

這邊提供我自行研究與建置的測試環境架構圖,可以依照自己的需求調整,SQL_Node 可以無限擴充,一般情境下三個就很多了!假設三個,那就是可以接受另外兩台設備都掛掉,所以越多台當然可用度越高,但它們之間資料是要同步的,所以也不能過多,這個就需要經驗更豐富的人來評估啦!

步驟一:下載 MySQL NDB Cluster

這邊先到官方網站下載:https://dev.mysql.com/downloads/cluster/

我這邊是下載 8.0.36 版本,請選擇 Windows (x86, 64-bit), ZIP Archive,下載完請解壓縮在三台 VM 的 C:/,並重新將最外層目錄命名為 mysql。如果需要的話可以把 C:\mysql\bin 加入環境變數,之後就不用特地 cd C:\mysql\bin 就能使用相關的工具了喔!


▲ MySQL NDB Cluster 下載點截圖,請選擇 Windows (x86, 64-bit), ZIP Archive。

▲ 解壓縮並重新命名最外層的資料夾為 mysql,結果如上。

步驟二:配置 NDB_MGMD 節點

連入 NDB_MGMD,先打開檔案總管來到 C:\mysql\bin,建立 my.ini 並寫入:

[mysql_cluster]
# Options for management node process
config-file=C:/mysql/bin/config.ini

接著再建立 config.ini 並寫入:

[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=1024M
IndexMemory=256M

[MYSQLD DEFAULT]

[NDB_MGMD DEFAULT]
DataDir=C:/mysql

[TCP DEFAULT]

[NDB_MGMD]
NodeId=1
HostName=192.168.1.131

[MYSQLD]
NodeId=2
HostName=192.168.1.133

[MYSQLD]
NodeId=3
HostName=192.168.1.134

[NDBD]
NodeId=4
HostName=192.168.1.133
DataDir=C:/mysql/data

[NDBD]
NodeId=5
HostName=192.168.1.134
DataDir=C:/mysql/data

這份設定檔是用來設定 MySQL Cluster 的,它定義了幾個重要的設定。首先,在 NDBD DEFAULT 部分,設定了每個資料片段的複本數量為 2,這是我們的節點數量,這樣可以確保資料的冗餘性。同時,也指定了每個資料節點的資料和索引能使用的 RAM 大小。接著,在 NDB_MGMD DEFAULT 部分,指定了管理節點的資料儲存目錄。在後續的部分中,分別定義了管理節點、SQL 節點和資料節點的相關設定。這些設定包括節點的 ID、主機名或 IP 地址,以及資料節點的數據儲存目錄。總體來說,這份設定檔確保了 MySQL Cluster 的正確運作。

接著以管理員權限執行終端機(命令提示字元)跑:

cd C:\mysql\bin
ndb_mgmd -f C:/mysql/bin/config.ini --configdir=C:/mysql/bin --reload

到這邊,管理節點已運作,再開一個以管理員權限執行的終端機(命令提示字元)跑:

cd C:\mysql\bin
ndb_mgm

這個是與管理節點互動的工具,稍後可以打 ALL STATUSSHOW 查看各節點狀態。

步驟三:配置 SQL_NODE_1、SQL_NODE_2 節點

接著我們同時連入 SQL_NODE_1 及 SQL_NODE_2,這兩個要做的事情是完全一樣的,因此就一起做沒問題!先開檔案總管來到 C:\mysql,接著建立一個 my.ini 並寫入:

[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
ndb-connectstring=192.168.1.131 # location of management server

[mysql_cluster]
# Options for data node process:
ndb-connectstring=192.168.1.131 # location of management server

接著以管理員權限執行終端機(命令提示字元)跑:

cd C:\mysql\bin
mysqld --initialize-insecure

這邊將初始化 SQL 節點,資料將被清空,請謹慎使用!這個指令會建立一個空資料庫,root 預設無密碼,完成後可以確認 C:\mysql\data 路徑是否有包含資料了!這指令僅首次需要執行,未來只要執行後續的指令以啟動資料節點及 SQL 節點。

以管理員權限執行終端機(命令提示字元)跑以下指令啟動資料節點:

ndbd

※ 注意!到這邊先暫緩,可以連到 NDB_MGMD 去看 ndb_mgm 的畫面是否有對應節點已啟動的訊息(也可以用 ALL STATUS 指令確認),有再往後做。

以管理員權限執行終端機(命令提示字元)跑以下指令啟動 SQL 節點:

mysqld --console

--console 是為了可以在終端機(命令提示字元)查看相關資訊,未來可不必加直接執行 SQL 節點。

步驟四:用 ndb_mgm 工具確認所有節點正常運行

連入 NDB_MGMD,查看剛剛的 ndb_mgm 工具,輸入 SHOW,將跑出以下資訊:

Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=4 @192.168.1.133 (mysql-8.0.36 ndb-8.0.36, Nodegroup: 0, *)
id=5 @192.168.1.134 (mysql-8.0.36 ndb-8.0.36, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.1.131 (mysql-8.0.36 ndb-8.0.36)

[mysqld(API)] 2 node(s)
id=2 @192.168.1.133 (mysql-8.0.36 ndb-8.0.36)
id=3 @192.168.1.134 (mysql-8.0.36 ndb-8.0.36)

這樣就是所有節點都已經正常運作!

步驟五:NDB_MGMD 上安裝 MySQL Router

MySQL Router 我這邊選擇安裝在 NDB_MGMD 上,請先到官方網站下載:https://dev.mysql.com/downloads/router/

這邊是有完整安裝檔的,不需要自行解壓縮了!


▲ 我選擇 8.0.36 版本,請選擇 Windows (x86, 64-bit), MSI Installer 的下載點。

安裝完後執行檔路徑會在 C:\Program Files\MySQL\MySQL Router 8.0\bin,若有需要可以將這個路徑加入環境變數,未來使用 mysqlrouter 工具時會更加方便,不用在 cd。

接著我在 C: 下開了 myrouter 資料夾,並在當中新建了 mysqlrouter.conf 並寫入:

[DEFAULT]
name=router
user=mysql_router
keyring_path=C:\myrouter\keyring

[routing:basic_failover]
bind_address=0.0.0.0
bind_port=7000
destinations=192.168.1.133:3306,192.168.1.134:3306
mode=read-write
protocol=classic

接著以管理員權限執行終端機(命令提示字元)跑以下指令啟動 MySQL Router:

cd C:\Program Files\MySQL\MySQL Router 8.0\bin
mysqlrouter --config=C:/myrouter/mysqlrouter.conf

這樣就啟動 MySQL Router 了!

步驟六:使用客戶端測試資料庫

這邊我使用 phpmyadmin 來做測試連線。請務必注意!正式環境 root 請一定要設定密碼,我目前是無密碼可直接登入!另外請確保資料表皆以 ndbcluster 為引擎新建,這樣才會同步於各個節點!


▲ 我先以兩個不同的 phpmyadmin 連了 192.168.1.133:3306 跟 192.168.1.134:3306,一邊加資料,另一邊也會同步,這樣就成功了!接著再開一個 phpmyadmin 連 192.168.1.131:7000,接著 MySQL Router 自動幫我分配到 192.168.1.133:3306,所有資料都能看到,太棒了!

補充

目前都是以終端機(命令提示字元)運行各個軟體,正式環境請將這些軟體以服務的形式運行,並加強資料庫的安全性及設定正確且合適的防火牆,希望這篇文章能幫助到各位,謝謝!

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇