MySQL Cluster Nodes:
- Manage Nodes:負責監控叢集所有 Nodes 的狀態,並且由此控制所有 Nodes 的替換。
- Data Nodes:負責所有 SQL Data 的 Nodes,單純儲存資料,將資料寫在 RAM & Disk。
- SQL Nodes:負責 SQL 的 Table schema 和 Client 連接的空間。
MySQL Cluster architecture :
本次 LAB 的實驗架構:
- Manage Node:172.10.0.140
- SQL Node1:172.10.0.141
- SQL Node2:172.10.0.142
- Data Node1:172.10.0.143
- Data Node2:172.10.0.144
MySQL Cluster 實作
所有的 nodes 都需要安裝 mysql-cluster
$ wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.11-linux-glibc2.5-i686.tar.gz
$ tar zxvf mysql-cluster-gpl-7.4.11-linux-glibc2.5-i686.tar.gz
$ mkdir /usr/local/mysql && mv mysql-cluster-gpl-7.4.11-linux-glibc2.5-i686 !$
建立 Manage node
$ mkdir /var/lib/mysql-cluster
$ vim /var/lib/mysql-cluster/config.ini
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=1024M
IndexMemory=256M
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
DataDir=/var/lib/mysql-cluster
[TCP DEFAULT]
[NDB_MGMD]
NodeId=1
HostName=172.10.0.140
[MYSQLD]
NodeId=2
HostName=172.10.0.141
[MYSQLD]
NodeId=3
HostName=172.10.0.142
[NDBD]
NodeId=4
HostName=172.10.0.143
DataDir=/var/lib/mysql-cluster
[NDBD]
NodeId=5
HostName=172.10.0.144
DataDir=/var/lib/mysql-cluster
NoOfReplicas=2:是 Cluster 非常重要的參數,代表著存在 2 份一樣的資料在 Data node,所以你的 Data node 允許著 1 台的故障容錯還有另一份資料可以正常運行,在本篇因為 Data node 只有 2 台,所以設定 2 就可以了,再多也沒有意義只是增加 write loading
DataMemory & IndexMemory:代表著資料和索引可以儲存的記憶體容量有多大。
NodeId:每一個 nodes 都必須擁有獨一無二的 id 值
這邊記錄著所有 nodes 的訊息,才能進行容錯移轉
把 ndb_mgm 和 ndb_mgmd 等工具放到 /usr/local/bin 方便使用
$ cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin/
建立 Data node
$ vim /etc/my.cnf
[mysqld]
# enable cluster service
ndbcluster
# with connect manage node
ndb-connectstring=172.10.0.140:1186
# defaulte database engine
default-storage-engine=NDBCLUSTER
# setting character
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
[mysql_cluster]
# cluster management node
ndb-connectstring=172.10.0.140:1186
建立 SQL node
# check permissions
$ adduser mysql -d /usr/local/mysql
$ chmod -R root.mysql /usr/local/mysql
$ chmod -R mysql /usr/local/mysql/data
$ vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
ndbcluster
default_storage_engine=ndbcluster
ndb-connectstring=172.10.0.140:1186
[mysql_cluster]
ndb-connectstring=172.10.0.140:1186
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/usr/local/mysql/data/mysql.sock
$ /usr/local/mysql/scripts/mysql_install_db --user=mysql
$ cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server
啟動 Cluster 環境
啟動順序 Manager node > Data node > SQL node。
如果是第一次啟動 SQL node 請使用 --initial 初始化,如果已經有資料請絕對不要使用 --initial 否則此 node 的資料全毀
# in Manage node
$ ndb_mgmd -v -f /var/lib/mysql-cluster/config.ini
# in Data node , first use --initial
$ /usr/local/mysql/bin/ndbd --defaults-file=/etc/my.cnf -v
# in SQL node
$ /etc/init.d/mysql.server start
匯入資料庫(ndbcluster)
cluster 的資料庫類型都必須為 ndbcluster,在匯入資料庫前必須改為 NDBCLUSTER
# Type=InnoDB
$ mysqldump -uroot -p db | sed 's/ENGINE=InnoDB/ENGINE=NDBCLUSTER/g' > db.sql
or
# Type=MyISAM
$ mysqldump -uroot -p db | sed 's/ENGINE=MyISAM/ENGINE=NDBCLUSTER/g' > db.sql
Cluster 確認
從 Manage node 確認所有 node 狀態
# in Manage node
$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @172.10.0.143 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0)
id=4 @172.10.0.144 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0, *)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @172.10.0.140 (mysql-5.6.29 ndb-7.4.11)
[mysqld(API)] 2 node(s)
id=2 @172.10.0.141 (mysql-5.6.29 ndb-7.4.11)
id=3 @172.10.0.142 (mysql-5.6.29 ndb-7.4.11)
容錯測試
- Data node1 中斷,服務正常
- SQL node1 中斷,服務正常
- Manage node 中斷,服務正常
- Data node1 > SQL node1 順序中斷,服務正常
- Data node1 > SQL node1 > Manage node 順序中斷,服務正常
- Manage node > Data node1 順序中斷,服務異常
- Manage node > SQL node1 順序中斷,服務異常
從上面測試可以理解,由於 Manage node 是所有 node 的管理者,一旦管理者掛了又觸發了容錯事件,就會無法處理而造成 cluster 中斷
這篇到結尾,如果你要基本的容錯機制可以允許一台故障的話,至少要 3 台才能建立起 MySQL Cluster 架構
- Node1 (SQL + Data node)
- Node2 (SQL + Data node)
- Node3 (Manage node)
必須注意只擁有一台 Manage node 不能與其他的 node 共用,否則會同時觸發 Manage + node 異常而造成無法容錯的狀況。
這樣的架構還可以在無限延伸,包含 Manage node 也可以擁有多台進行容錯。
Orignal From: 架設 HA 高可用性:MySQL Cluster 叢集 - 7.4.11(5.6.29)
沒有留言:
張貼留言