MySQL Cluster 是專為分布式計算環境設計的高實用性、可擴展、高性能、高冗餘版本。其研發初衷是滿足嚴苛的應用需求,如數據庫運行可靠性達 99.999%。MySQL Cluster 採用無共享架構部署「內存中」數據庫集群,可使用廉價硬件,無特殊軟硬件要求,且每個組件擁有獨立內存和磁盤,消除了單點故障。
實際上,MySQL Cluster 將名為 NDB 的內存集群存儲引擎集成到標準 MySQL 服務器中。它由一組計算機組成,每台運行一個或多個進程,可能包括 MySQL 服務器、數據節點、管理服務器和專用數據訪問程序。MySQL Cluster 支持多種故障切換和負載均衡配置,在 Cluster 層面配置 NDB 存儲引擎最為簡單。下圖展示了 MySQL 集群的結構關係:
從結構上看,MySQL Cluster 由三類節點組成:
MySQL Cluster 使用專用的基於內存的 NDB 存儲引擎,優勢是速度快、無磁盤 I/O 瓶頸;劣勢是數據庫規模受總內存限制,需大內存(如 4G、8G 甚至 16G)。NDB 引擎是分布式的,可配置在多台服務器上實現可靠性和擴展性,理論上 2 個 NDB 存儲節點即可實現冗餘和解決單點故障。
本文演示搭建一個最小化 MySQL Cluster 系統:1 個管理節點、2 個數據節點、2 個 SQL 節點,分別部署在 5 台虛擬機上。環境信息如下:
| 角色 | 主機名 | IP 地址 |
|---|---|---|
| 管理節點 | mysql-mgm | 192.168.124.141 |
| 數據節點 1 | mysql-ndbd-1 | 192.168.124.142 |
| 數據節點 2 | mysql-ndbd-2 | 192.168.124.143 |
| SQL 節點 1 | mysql-sql-1 | 192.168.124.144 |
| SQL 節點 2 | mysql-sql-2 | 192.168.124.145 |
mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz 至 /root/Downloads,解壓並移動至 /usr/local/mysql。/etc/selinux/config 設 SELINUX=disabled,重啟系統。/var/lib/mysql-cluster 目錄,編寫配置文件,定義節點 ID、主機名、數據目錄等。ndb_mgmd 和 ndb_mgm 至 /usr/local/bin 並賦予執行權限。/etc/my.cnf,指定 basedir、datadir、socket、ndb-connectstring 等scripts/mysql_install_db --user=mysql ...步驟與數據節點類似,但 my.cnf 需添加 ndbcluster 參數並指定連接管理節點。
ndb_mgmd -f /var/lib/mysql-cluster/config.ini,可用 ndb_mgm 監控。--initial 參數(/usr/local/mysql/bin/ndbd --initial),後續啟動不加。/usr/local/mysql/bin/mysqld_safe --user=mysql &測試一:數據同步驗證 在 SQL 節點 1 創建數據庫、表(引擎指定 NDB)、插入數據,驗證 SQL 節點 2 是否同步。
測試二:故障恢復驗證 關閉一個數據節點,在另一節點寫入數據,重啟故障節點後驗證數據雙向同步。
ndb_mgm -e shutdown/etc/init.d/mysql.server stop注意:再次啟動時,數據節點不再添加 --initial 參數。