MySQL Cluster
##MySQL Cluster 的配置說明
管理節點(1 個) 10.10.10.9
SQL 節點(2 個) 10.10.10.10
10.10.10.11
Data節點(2 個) 10.10.10.10
10.10.10.11
##配置主機IP
[root@mysql9 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mysql9 ##因為是克隆的虛擬機器,所以需要修改主機名
[root@mysql9 ~]# cat /etc/hosts
127.0.0.1 localhost mysql9 ##因為是克隆的虛擬機器,所以需要修改主機名,後面的主機名每臺機器不一樣。
10.10.10.9 mysql9
10.10.10.10 mysql10
10.10.10.11 mysql11
##上面所做的操作,在所有伺服器上面都要執行!
##禁用selinux
修改/etc/selinux/config檔案
將SELINUX=enforcing改為SELINUX=disabled
重啟機器即可。
檢視selinux狀態:
[root@CentOS ~]# getenforce
##關閉iptables ##這個不知道是什麼東西,浪費我大量的時間,不關閉的話,啟動Data節點會報錯:
-bash-4.1$ ndbd --initial
Unable to connect with connect string: nodeid=0,10.10.10.9:1186
Retrying every 5 seconds. Attempts left: 12 11 10 9 8 7 6 5 4 3 2 1, failed.
2015-12-18 23:11:55 [ndbd] ERROR -- Could not connect to management server, error: ''
##下面關閉它:
[root@mysql9 ~]# service iptables stop
iptables:將鏈設定為政策 ACCEPT:filter [確定]
iptables:清除防火牆規則: [確定]
iptables:正在解除安裝模組: [確定]
[root@mysql9 ~]# chkconfig iptables off
##上面所做的操作,在所有伺服器上面都要執行!
##新增使用者和組
[root@db ~]# groupadd mysql
[root@db ~]# useradd -r -g mysql mysql
[root@localhost data]# passwd mysql
更改使用者 mysql 的密碼 。
新的 密碼:
無效的密碼: 過短
無效的密碼: 過於簡單
重新輸入新的 密碼:
passwd: 所有的身份驗證令牌已經成功更新。
##上面所做的操作,在所有伺服器上面都要執行!
##MySQL Cluster 的安裝配置
[root@CentOS tmp]# cd /tmp/
[root@CentOS tmp]# ll mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz
-rw-r--r--. 1 root root 472807612 12月 18 01:11 mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz
[root@CentOS tmp]# tar zxf mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz -C /usr/local/
[root@CentOS tmp]# cd /usr/local/
[root@CentOS local]# mv mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686/ mysql
[root@CentOS local]# chown -R mysql:mysql /usr/local/mysql
[root@CentOS local]# vi /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@localhost bin]# source /etc/profile
##上面所做的操作,在所有伺服器上面都要執行!
##初始化資料庫
[root@CentOS local]# mkdir -p /data/3306
[root@CentOS local]# chown -R mysql:mysql /data
[root@CentOS local]# su - mysql
su: 警告:無法切換到目錄/home/mysql: 沒有那個檔案或目錄
-bash-4.1$ mkdir -p /home/mysql
mkdir: 無法建立目錄"/home/mysql": 許可權不夠
-bash-4.1$ exit
logout
[root@CentOS local]# mkdir -p /home/mysql
[root@CentOS local]# su - mysql
-bash-4.1$ cd /usr/local/mysql
-bash-4.1$ ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306
-bash-4.1$ cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
-bash-4.1$ vi /etc/my.cnf
[client]
port = 3306
socket = /data/3306/mysql.sock
default-character-set = utf8
[mysqld]
port = 3306
user = mysql
socket = /data/3306/mysql.sock
pid-file = /data/3306/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306
log-bin = /data/3306/mysql-bin
lower_case_table_names=1
max_connections=1000
character_set_server=utf8
character_set_client=utf8
[mysql]
default-character-set=utf8
[root@localhost mysql]# cd /usr/local/mysql
[root@localhost mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@localhost mysql]# chmod 777 /etc/rc.d/init.d/mysqld
[root@CentOS mysql]# service mysqld start
Starting MySQL..... [確定]
[root@CentOS mysql]# netstat -tulnp | grep mysql
tcp 0 0 :::3306 :::* LISTEN 2057/mysqld
[root@CentOS mysql]# service mysqld status
MySQL running (2057) [確定]
[root@CentOS mysql]# service mysqld stop
Shutting down MySQL.. [確定]
##上面所做的操作,在所有伺服器上面都要執行!由於我是虛擬機器,就是做一遍,其它的複製。
#管理節點,其實不需要mysqld二進位制檔案,只需要MySQL Cluster服務端程式(ndb_mgmd)和監聽客戶端程度(ndb_mgm)。
##這裡因為是克隆的虛擬機器,就一起在管理節點上面也安裝了mysqld服務,但後面配置就不會再提到要配置它的地方了。
##管理節點配置步驟
##在mysql使用者下面執行!
(1)在伺服器10.10.10.9 的/data下建立目錄mysql-cluster,並在目錄中建立配置檔案config.ini。
-bash-4.1$ cd /data/
-bash-4.1$ mkdir mysql-cluster
-bash-4.1$ cd mysql-cluster/
-bash-4.1$ touch config.ini
(2)根據這裡的測試叢集環境,config.ini 檔案配置如下:
-bash-4.1$ vi config.ini
##配置檔案裡面的配置,在等號兩邊最好加上空格,本人在這裡是吃了大虧,耽誤了大量的時間、精力。
##一度以為沒有是哪裡沒有配對,結果後來最終發現還是配置檔案的問題導致後面啟不來!
[ndbd default]
noofreplicas = 1 #每個資料節點的映象數量
datamemory = 50M #每個資料節點中給資料分配的記憶體(這個M一定要大寫)
indexmemory = 20M #每個資料節點中給索引分配的記憶體
[ndb_mgmd]
#配置管理節點
hostname = 10.10.10.9 #管理節點IP
datadir = /data/mysql-cluster #管理節點資料目錄,管理節點啟動成功後在該目錄下面會存在很多日誌資訊等。
[ndbd]
hostname = 10.10.10.10 ##指定data節點選項
datadir = /data/mysql-cluster/data
[ndbd]
hostname = 10.10.10.11 ##指定data節點選項
datadir = /data/mysql-cluster/data
[mysqld]
hostname = 10.10.10.10 ##指定sql節點選項
[mysqld]
hostname = 10.10.10.11 ##指定sql節點選項
上面的配置檔案中,包括很多的組,組名用“[]”括起來,這裡我們最關心的是3 類節點組的配置,分別定義如下。
? [NDB_MGMD]:表示管理節點的配置,只能有一個。
? [NDBD DEFAULT]:表示每個資料節點的預設配置,在每個節點的[NDBD]中不用再寫這些選項。只能有一個。
? [NDBD]:表示每個資料節點的配置,可以有多個。
? [MYSQLD]:表示SQL 節點的配置,可以有多個,分別寫上不同SQL 節點的IP 地址;也可以不用寫IP 地址,只保留一個空節點,表示任意一個IP 地址都可以進行訪問。此節點的個數表明了可以用來連線資料節點的SQL 節點總數。
每個節點都要有一個獨立的id 號,可以手工填寫,比如“id=2”,也可以不寫,系統會按照配置檔案的填寫順序自動分配。
##SQL 節點和Data 節點的配置
#SQL節點,可以將之視為傳統的MySQL Server。Data節點,也是一個MySQL Server,並在my.cnf中指定少數幾個引數即可。
##這裡由於環境限制,SQL 節點和Data 節點的是放在同一臺虛擬機器上面的,環境中其實也僅僅安裝了一個mysqld服務。後面提到的修改my.cnf配置,就是這個。
##網上很多地方都提到SQL 節點和Data 節點跟普通的mysqld服務沒上面區別,要把普通的mysqld變為SQL 節點和Data 節點只需要在my.cnf配置裡面新增少數幾個引數即可。
##但我還是不太明白,後面啟動Data 節點並沒有用到任何mysqld相關的大小,所以我理解,其實Data 節點也是不需要安裝mysqld服務的。需要bin裡面的命令。
##在mysql使用者下面執行!在10.10.10.10和10.10.10.11上面都要做!
SQL 節點和資料節點的配置非常簡單,只需要在對MySQL 的配置檔案(my.cnf)中增加如下內容即可(引數含義見後面註釋):
[root@CentOS ~]# chown mysql:mysql /etc/my.cnf
[root@CentOS ~]# su - mysql
-bash-4.1$ vi /etc/my.cnf
[mysqld]
ndbcluster #執行NDB 儲存引擎
ndb-connectstring=10.10.10.9 #定位管理節點
[mysql_cluster]
ndb-connectstring=10.10.10.9 #定位管理節點
[mysqld_safe]
log-error = /data/mysql-cluster/data/mysqld.log
pid-file = /data/mysql-cluster/data/mysqld.pid
##建立目錄
-bash-4.1$ mkdir -p /data/mysql-cluster/data
##Cluster 的啟動
Cluster 需要各個節點都進行啟動後才可以執行,節點的啟動順序為管理節點 -> 資料節點 -> SQL 節點。
(1)在管理節點上,從系統shell 發出下述命令以啟動管理節點程式:(10.10.10.9)
-bash-4.1$ pwd
/data/mysql-cluster
-bash-4.1$ ndb_mgmd -f ./config.ini
MySQL Cluster Management Server mysql-5.6.27 ndb-7.4.8
-bash-4.1$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 10.10.10.10) ##可以看見未連線(not connected),這是因為還沒有啟動
id=3 (not connected, accepting connect from 10.10.10.11)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9 (mysql-5.6.27 ndb-7.4.8)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.10.10.10) ##可以看見未連線(not connected),這是因為還沒有啟動
id=5 (not connected, accepting connect from 10.10.10.11)
ndb_mgm> exit
-bash-4.1$ ps -ef | grep ndb
mysql 2312 1785 0 18:58 pts/1 00:00:00 ndb_mgm
mysql 2457 1 0 19:24 ? 00:00:03 ndb_mgmd -f ./config.ini
mysql 2495 1595 0 19:31 pts/0 00:00:00 grep ndb
(2)在每臺資料節點伺服器上(本例為10.10.10.10 和10.10.10.11),執行下述命令啟動ndbd 程式:
ndbd 程式是使用NDB 儲存引擎處理表中資料的程式。透過該程式,儲存節點能夠實現分散式事務管理、節點恢復、線上備份等相關的任務。
注意:僅應在首次啟動ndbd 時,或在備份/恢復或配置變化後重啟ndbd 時使用“--initial”引數,這很重要。原因在於,該引數會使節點刪除由早期ndbd 例項建立的、用於恢復的任何檔案,包括恢復用日誌檔案。
-bash-4.1$ ndbd --initial ##10.10.10.10
2015-12-19 01:29:05 [ndbd] INFO -- Angel connected to '10.10.10.9:1186'
2015-12-19 01:29:05 [ndbd] INFO -- Angel allocated nodeid: 2
-bash-4.1$ ndbd --initial ##10.10.10.11
2015-12-19 01:37:36 [ndbd] INFO -- Angel connected to '10.10.10.9:1186'
2015-12-19 01:37:36 [ndbd] INFO -- Angel allocated nodeid: 3
(3)依次啟動SQL 節點上的MySQL 服務(本例為10.10.10.10 和10.10.10.11)。
-bash-4.1$ service mysqld start
也可以用:-bash-4.1$ mysqld_safe --defaults-file=/etc/my.cnf 2>&1 > /dev/null &
(4)節點全部成功啟動後,用ndb_mgm 工具的show 命令檢視叢集狀態:
##ndb_mgm 工具是ndb_mgmd(MySQL Cluster Server)的客戶端管理工具,透過它可以方便地檢查Cluster 的狀態、啟動備份、關閉Cluster 等功能。
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.10 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
id=3 @10.10.10.11 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9 (mysql-5.6.27 ndb-7.4.8)
[mysqld(API)] 2 node(s)
id=4 @10.10.10.10 (mysql-5.6.27 ndb-7.4.8)
id=5 @10.10.10.11 (mysql-5.6.27 ndb-7.4.8)
##測試 MySQL Cluster
##上文提到過,如果要使用Cluster,則表的儲存引擎必須為NDB,其他型別儲存引擎的資料將不會儲存到資料節點中。
1.NDB 儲存引擎測試
(1)在任意一個SQL 節點(這裡用10.10.10.10)的test 庫中建立測試表t1,設定儲存引擎為NDB,並插入兩條測試資料:
mysql> create table t1(id int) engine=ndb;
mysql> insert into t1 values(1);
mysql> insert into t1 values(2);
(2)在另外一個SQL 節點(10.10.10.11),查詢test 庫中的t1 表,結果如下:
mysql> select * from t1; ##顯然,兩個SQL 節點查詢到的資料是一致的。
(3)在SQL 節點10.10.10.10 上將測試表t1 的儲存引擎改為MyISAM,再次插入測試記錄:
mysql> alter table t1 engine=myisam;
mysql> insert into t1 values(3);
(4)在SQL 節點10.10.10.11 上再次查詢表t1,結果如下:
mysql> select * from t1; ##可以發現,表t1 已經無法查詢。
ERROR 1146 (42S02): Table 'test.t1' doesn't exist
(5)在SQL 節點10.10.10.10 上再次將t1 的儲存引擎改為NDB:
mysql> alter table t1 engine=ndb;
(6)在SQL 節點10.10.10.11 上再次查詢,結果如下:
mysql> select * from t1;
+------+
| id |
+------+
| 2 |
| 3 |
| 1 |
+------+
3 rows in set (0.01 sec)
##顯然,表t1 的資料被再次同步到了資料節點。所有SQL 節點又都可以正常查詢資料。
##其實可以發現,資料檔案還是存放在mysqld的datadir目錄裡面;而前面指定的“/data/mysql-cluster/data”這些目錄放的是叢集相關的東西。
2.單點故障測試——SQL 節點發生單點故障。
(1)將SQL 節點10.10.10.10 上的MySQL 服務停止。
-bash-4.1$ mysqladmin -uroot -p shutdown
(2)檢視一下Cluster 的狀態。
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.10 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
id=3 @10.10.10.11 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9 (mysql-5.6.27 ndb-7.4.8)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.10.10.10)
id=5 @10.10.10.11 (mysql-5.6.27 ndb-7.4.8)
(3)從節點10.10.10.11 上檢視錶t1,結果如下。
mysql> select * from t1;
+------+
| id |
+------+
| 2 |
| 3 |
| 1 |
+------+
3 rows in set (0.01 sec)
##關閉MySQL Cluster
Cluster 的關閉命令很簡單,只需要在shell 下執行如下命令即可:-bash-4.1$ ndb_mgm -e shutdown
也可以用ndb_mgm 工具進入管理介面後,使用shutdown 命令關閉:ndb_mgm> shutdown
然後再其它節點上關閉mysqld:-bash-4.1$ service mysqld stop
或者:mysqladmin -uroot -p shutdown
##日誌管理
MySQL Cluster 提供了兩種日誌,分別是叢集日誌(clusterlog)和節點日誌(node log)。前者記錄了所有Cluster 節點生成的日誌,後者僅僅記錄了資料節點的本地事件。在大多數情況下,我們都推薦使用叢集日誌,因為它在一個地方記錄了所有節點的資料,更便於進行管理。
clusterlog 一般記錄在和配置檔案( config.ini ) 同一個目錄下, 檔名格式為ndb__cluster.log,其中nodeid 為管理節點號。
可以使用ndb_mgm 客戶端管理工具開啟或者關閉日誌,具體操作如下。
(1)在shell 中執行ndb_mgm 命令。
-bash-4.1$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm>
(2)執行clusterlog info 命令檢視當前日誌狀態。
ndb_mgm> clusterlog info
Connected to Management Server at: localhost:1186
Severities enabled: INFO WARNING ERROR CRITICAL ALERT
(3)當前日誌是開啟的,用clusterlog off 命令關閉日誌。
ndb_mgm> clusterlog off
Cluster logging is disabled
(4)再次檢視日誌狀態,發現已經關閉。
ndb_mgm> clusterlog info
Cluster logging is disabled.
(5)執行clusterlog on 命令將再次開啟日誌。
ndb_mgm> clusterlog on
Cluster logging is enabled.
ndb_mgm> clusterlog info
Severities enabled: INFO WARNING ERROR CRITICAL ALERT
管理節點(1 個) 10.10.10.9
SQL 節點(2 個) 10.10.10.10
10.10.10.11
Data節點(2 個) 10.10.10.10
10.10.10.11
##配置主機IP
[root@mysql9 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mysql9 ##因為是克隆的虛擬機器,所以需要修改主機名
[root@mysql9 ~]# cat /etc/hosts
127.0.0.1 localhost mysql9 ##因為是克隆的虛擬機器,所以需要修改主機名,後面的主機名每臺機器不一樣。
10.10.10.9 mysql9
10.10.10.10 mysql10
10.10.10.11 mysql11
##上面所做的操作,在所有伺服器上面都要執行!
##禁用selinux
修改/etc/selinux/config檔案
將SELINUX=enforcing改為SELINUX=disabled
重啟機器即可。
檢視selinux狀態:
[root@CentOS ~]# getenforce
##關閉iptables ##這個不知道是什麼東西,浪費我大量的時間,不關閉的話,啟動Data節點會報錯:
-bash-4.1$ ndbd --initial
Unable to connect with connect string: nodeid=0,10.10.10.9:1186
Retrying every 5 seconds. Attempts left: 12 11 10 9 8 7 6 5 4 3 2 1, failed.
2015-12-18 23:11:55 [ndbd] ERROR -- Could not connect to management server, error: ''
##下面關閉它:
[root@mysql9 ~]# service iptables stop
iptables:將鏈設定為政策 ACCEPT:filter [確定]
iptables:清除防火牆規則: [確定]
iptables:正在解除安裝模組: [確定]
[root@mysql9 ~]# chkconfig iptables off
##上面所做的操作,在所有伺服器上面都要執行!
##新增使用者和組
[root@db ~]# groupadd mysql
[root@db ~]# useradd -r -g mysql mysql
[root@localhost data]# passwd mysql
更改使用者 mysql 的密碼 。
新的 密碼:
無效的密碼: 過短
無效的密碼: 過於簡單
重新輸入新的 密碼:
passwd: 所有的身份驗證令牌已經成功更新。
##上面所做的操作,在所有伺服器上面都要執行!
##MySQL Cluster 的安裝配置
[root@CentOS tmp]# cd /tmp/
[root@CentOS tmp]# ll mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz
-rw-r--r--. 1 root root 472807612 12月 18 01:11 mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz
[root@CentOS tmp]# tar zxf mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686.tar.gz -C /usr/local/
[root@CentOS tmp]# cd /usr/local/
[root@CentOS local]# mv mysql-cluster-gpl-7.4.8-linux-glibc2.5-i686/ mysql
[root@CentOS local]# chown -R mysql:mysql /usr/local/mysql
[root@CentOS local]# vi /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
[root@localhost bin]# source /etc/profile
##上面所做的操作,在所有伺服器上面都要執行!
##初始化資料庫
[root@CentOS local]# mkdir -p /data/3306
[root@CentOS local]# chown -R mysql:mysql /data
[root@CentOS local]# su - mysql
su: 警告:無法切換到目錄/home/mysql: 沒有那個檔案或目錄
-bash-4.1$ mkdir -p /home/mysql
mkdir: 無法建立目錄"/home/mysql": 許可權不夠
-bash-4.1$ exit
logout
[root@CentOS local]# mkdir -p /home/mysql
[root@CentOS local]# su - mysql
-bash-4.1$ cd /usr/local/mysql
-bash-4.1$ ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306
-bash-4.1$ cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
-bash-4.1$ vi /etc/my.cnf
[client]
port = 3306
socket = /data/3306/mysql.sock
default-character-set = utf8
[mysqld]
port = 3306
user = mysql
socket = /data/3306/mysql.sock
pid-file = /data/3306/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306
log-bin = /data/3306/mysql-bin
lower_case_table_names=1
max_connections=1000
character_set_server=utf8
character_set_client=utf8
[mysql]
default-character-set=utf8
[root@localhost mysql]# cd /usr/local/mysql
[root@localhost mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@localhost mysql]# chmod 777 /etc/rc.d/init.d/mysqld
[root@CentOS mysql]# service mysqld start
Starting MySQL..... [確定]
[root@CentOS mysql]# netstat -tulnp | grep mysql
tcp 0 0 :::3306 :::* LISTEN 2057/mysqld
[root@CentOS mysql]# service mysqld status
MySQL running (2057) [確定]
[root@CentOS mysql]# service mysqld stop
Shutting down MySQL.. [確定]
##上面所做的操作,在所有伺服器上面都要執行!由於我是虛擬機器,就是做一遍,其它的複製。
#管理節點,其實不需要mysqld二進位制檔案,只需要MySQL Cluster服務端程式(ndb_mgmd)和監聽客戶端程度(ndb_mgm)。
##這裡因為是克隆的虛擬機器,就一起在管理節點上面也安裝了mysqld服務,但後面配置就不會再提到要配置它的地方了。
##管理節點配置步驟
##在mysql使用者下面執行!
(1)在伺服器10.10.10.9 的/data下建立目錄mysql-cluster,並在目錄中建立配置檔案config.ini。
-bash-4.1$ cd /data/
-bash-4.1$ mkdir mysql-cluster
-bash-4.1$ cd mysql-cluster/
-bash-4.1$ touch config.ini
(2)根據這裡的測試叢集環境,config.ini 檔案配置如下:
-bash-4.1$ vi config.ini
##配置檔案裡面的配置,在等號兩邊最好加上空格,本人在這裡是吃了大虧,耽誤了大量的時間、精力。
##一度以為沒有是哪裡沒有配對,結果後來最終發現還是配置檔案的問題導致後面啟不來!
[ndbd default]
noofreplicas = 1 #每個資料節點的映象數量
datamemory = 50M #每個資料節點中給資料分配的記憶體(這個M一定要大寫)
indexmemory = 20M #每個資料節點中給索引分配的記憶體
[ndb_mgmd]
#配置管理節點
hostname = 10.10.10.9 #管理節點IP
datadir = /data/mysql-cluster #管理節點資料目錄,管理節點啟動成功後在該目錄下面會存在很多日誌資訊等。
[ndbd]
hostname = 10.10.10.10 ##指定data節點選項
datadir = /data/mysql-cluster/data
[ndbd]
hostname = 10.10.10.11 ##指定data節點選項
datadir = /data/mysql-cluster/data
[mysqld]
hostname = 10.10.10.10 ##指定sql節點選項
[mysqld]
hostname = 10.10.10.11 ##指定sql節點選項
上面的配置檔案中,包括很多的組,組名用“[]”括起來,這裡我們最關心的是3 類節點組的配置,分別定義如下。
? [NDB_MGMD]:表示管理節點的配置,只能有一個。
? [NDBD DEFAULT]:表示每個資料節點的預設配置,在每個節點的[NDBD]中不用再寫這些選項。只能有一個。
? [NDBD]:表示每個資料節點的配置,可以有多個。
? [MYSQLD]:表示SQL 節點的配置,可以有多個,分別寫上不同SQL 節點的IP 地址;也可以不用寫IP 地址,只保留一個空節點,表示任意一個IP 地址都可以進行訪問。此節點的個數表明了可以用來連線資料節點的SQL 節點總數。
每個節點都要有一個獨立的id 號,可以手工填寫,比如“id=2”,也可以不寫,系統會按照配置檔案的填寫順序自動分配。
##SQL 節點和Data 節點的配置
#SQL節點,可以將之視為傳統的MySQL Server。Data節點,也是一個MySQL Server,並在my.cnf中指定少數幾個引數即可。
##這裡由於環境限制,SQL 節點和Data 節點的是放在同一臺虛擬機器上面的,環境中其實也僅僅安裝了一個mysqld服務。後面提到的修改my.cnf配置,就是這個。
##網上很多地方都提到SQL 節點和Data 節點跟普通的mysqld服務沒上面區別,要把普通的mysqld變為SQL 節點和Data 節點只需要在my.cnf配置裡面新增少數幾個引數即可。
##但我還是不太明白,後面啟動Data 節點並沒有用到任何mysqld相關的大小,所以我理解,其實Data 節點也是不需要安裝mysqld服務的。需要bin裡面的命令。
##在mysql使用者下面執行!在10.10.10.10和10.10.10.11上面都要做!
SQL 節點和資料節點的配置非常簡單,只需要在對MySQL 的配置檔案(my.cnf)中增加如下內容即可(引數含義見後面註釋):
[root@CentOS ~]# chown mysql:mysql /etc/my.cnf
[root@CentOS ~]# su - mysql
-bash-4.1$ vi /etc/my.cnf
[mysqld]
ndbcluster #執行NDB 儲存引擎
ndb-connectstring=10.10.10.9 #定位管理節點
[mysql_cluster]
ndb-connectstring=10.10.10.9 #定位管理節點
[mysqld_safe]
log-error = /data/mysql-cluster/data/mysqld.log
pid-file = /data/mysql-cluster/data/mysqld.pid
##建立目錄
-bash-4.1$ mkdir -p /data/mysql-cluster/data
##Cluster 的啟動
Cluster 需要各個節點都進行啟動後才可以執行,節點的啟動順序為管理節點 -> 資料節點 -> SQL 節點。
(1)在管理節點上,從系統shell 發出下述命令以啟動管理節點程式:(10.10.10.9)
-bash-4.1$ pwd
/data/mysql-cluster
-bash-4.1$ ndb_mgmd -f ./config.ini
MySQL Cluster Management Server mysql-5.6.27 ndb-7.4.8
-bash-4.1$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 10.10.10.10) ##可以看見未連線(not connected),這是因為還沒有啟動
id=3 (not connected, accepting connect from 10.10.10.11)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9 (mysql-5.6.27 ndb-7.4.8)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.10.10.10) ##可以看見未連線(not connected),這是因為還沒有啟動
id=5 (not connected, accepting connect from 10.10.10.11)
ndb_mgm> exit
-bash-4.1$ ps -ef | grep ndb
mysql 2312 1785 0 18:58 pts/1 00:00:00 ndb_mgm
mysql 2457 1 0 19:24 ? 00:00:03 ndb_mgmd -f ./config.ini
mysql 2495 1595 0 19:31 pts/0 00:00:00 grep ndb
(2)在每臺資料節點伺服器上(本例為10.10.10.10 和10.10.10.11),執行下述命令啟動ndbd 程式:
ndbd 程式是使用NDB 儲存引擎處理表中資料的程式。透過該程式,儲存節點能夠實現分散式事務管理、節點恢復、線上備份等相關的任務。
注意:僅應在首次啟動ndbd 時,或在備份/恢復或配置變化後重啟ndbd 時使用“--initial”引數,這很重要。原因在於,該引數會使節點刪除由早期ndbd 例項建立的、用於恢復的任何檔案,包括恢復用日誌檔案。
-bash-4.1$ ndbd --initial ##10.10.10.10
2015-12-19 01:29:05 [ndbd] INFO -- Angel connected to '10.10.10.9:1186'
2015-12-19 01:29:05 [ndbd] INFO -- Angel allocated nodeid: 2
-bash-4.1$ ndbd --initial ##10.10.10.11
2015-12-19 01:37:36 [ndbd] INFO -- Angel connected to '10.10.10.9:1186'
2015-12-19 01:37:36 [ndbd] INFO -- Angel allocated nodeid: 3
(3)依次啟動SQL 節點上的MySQL 服務(本例為10.10.10.10 和10.10.10.11)。
-bash-4.1$ service mysqld start
也可以用:-bash-4.1$ mysqld_safe --defaults-file=/etc/my.cnf 2>&1 > /dev/null &
(4)節點全部成功啟動後,用ndb_mgm 工具的show 命令檢視叢集狀態:
##ndb_mgm 工具是ndb_mgmd(MySQL Cluster Server)的客戶端管理工具,透過它可以方便地檢查Cluster 的狀態、啟動備份、關閉Cluster 等功能。
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.10 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
id=3 @10.10.10.11 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9 (mysql-5.6.27 ndb-7.4.8)
[mysqld(API)] 2 node(s)
id=4 @10.10.10.10 (mysql-5.6.27 ndb-7.4.8)
id=5 @10.10.10.11 (mysql-5.6.27 ndb-7.4.8)
##測試 MySQL Cluster
##上文提到過,如果要使用Cluster,則表的儲存引擎必須為NDB,其他型別儲存引擎的資料將不會儲存到資料節點中。
1.NDB 儲存引擎測試
(1)在任意一個SQL 節點(這裡用10.10.10.10)的test 庫中建立測試表t1,設定儲存引擎為NDB,並插入兩條測試資料:
mysql> create table t1(id int) engine=ndb;
mysql> insert into t1 values(1);
mysql> insert into t1 values(2);
(2)在另外一個SQL 節點(10.10.10.11),查詢test 庫中的t1 表,結果如下:
mysql> select * from t1; ##顯然,兩個SQL 節點查詢到的資料是一致的。
(3)在SQL 節點10.10.10.10 上將測試表t1 的儲存引擎改為MyISAM,再次插入測試記錄:
mysql> alter table t1 engine=myisam;
mysql> insert into t1 values(3);
(4)在SQL 節點10.10.10.11 上再次查詢表t1,結果如下:
mysql> select * from t1; ##可以發現,表t1 已經無法查詢。
ERROR 1146 (42S02): Table 'test.t1' doesn't exist
(5)在SQL 節點10.10.10.10 上再次將t1 的儲存引擎改為NDB:
mysql> alter table t1 engine=ndb;
(6)在SQL 節點10.10.10.11 上再次查詢,結果如下:
mysql> select * from t1;
+------+
| id |
+------+
| 2 |
| 3 |
| 1 |
+------+
3 rows in set (0.01 sec)
##顯然,表t1 的資料被再次同步到了資料節點。所有SQL 節點又都可以正常查詢資料。
##其實可以發現,資料檔案還是存放在mysqld的datadir目錄裡面;而前面指定的“/data/mysql-cluster/data”這些目錄放的是叢集相關的東西。
2.單點故障測試——SQL 節點發生單點故障。
(1)將SQL 節點10.10.10.10 上的MySQL 服務停止。
-bash-4.1$ mysqladmin -uroot -p shutdown
(2)檢視一下Cluster 的狀態。
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @10.10.10.10 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 0, *)
id=3 @10.10.10.11 (mysql-5.6.27 ndb-7.4.8, Nodegroup: 1)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @10.10.10.9 (mysql-5.6.27 ndb-7.4.8)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 10.10.10.10)
id=5 @10.10.10.11 (mysql-5.6.27 ndb-7.4.8)
(3)從節點10.10.10.11 上檢視錶t1,結果如下。
mysql> select * from t1;
+------+
| id |
+------+
| 2 |
| 3 |
| 1 |
+------+
3 rows in set (0.01 sec)
##關閉MySQL Cluster
Cluster 的關閉命令很簡單,只需要在shell 下執行如下命令即可:-bash-4.1$ ndb_mgm -e shutdown
也可以用ndb_mgm 工具進入管理介面後,使用shutdown 命令關閉:ndb_mgm> shutdown
然後再其它節點上關閉mysqld:-bash-4.1$ service mysqld stop
或者:mysqladmin -uroot -p shutdown
##日誌管理
MySQL Cluster 提供了兩種日誌,分別是叢集日誌(clusterlog)和節點日誌(node log)。前者記錄了所有Cluster 節點生成的日誌,後者僅僅記錄了資料節點的本地事件。在大多數情況下,我們都推薦使用叢集日誌,因為它在一個地方記錄了所有節點的資料,更便於進行管理。
clusterlog 一般記錄在和配置檔案( config.ini ) 同一個目錄下, 檔名格式為ndb__cluster.log,其中nodeid 為管理節點號。
可以使用ndb_mgm 客戶端管理工具開啟或者關閉日誌,具體操作如下。
(1)在shell 中執行ndb_mgm 命令。
-bash-4.1$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm>
(2)執行clusterlog info 命令檢視當前日誌狀態。
ndb_mgm> clusterlog info
Connected to Management Server at: localhost:1186
Severities enabled: INFO WARNING ERROR CRITICAL ALERT
(3)當前日誌是開啟的,用clusterlog off 命令關閉日誌。
ndb_mgm> clusterlog off
Cluster logging is disabled
(4)再次檢視日誌狀態,發現已經關閉。
ndb_mgm> clusterlog info
Cluster logging is disabled.
(5)執行clusterlog on 命令將再次開啟日誌。
ndb_mgm> clusterlog on
Cluster logging is enabled.
ndb_mgm> clusterlog info
Severities enabled: INFO WARNING ERROR CRITICAL ALERT
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31530407/viewspace-2152995/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql-cluster小專案MySql
- MySQL高可用之GC-Galera Cluster for MySQLMySqlGC
- 9. MySQL Galera Cluster全解析 Part 9 監控Galera ClusterMySql
- 7. MySQL Galera Cluster全解析 Part 7 Galera Cluster部署指南MySql
- 1. MySQL Galera Cluster全解析 Part 1 Galera Cluster 簡介MySql
- 8. MySQL Galera Cluster全解析 Part 8 Galera Cluster和傳統MySQL的不同點MySql
- MySQL Galera Cluster全解析 Part 4 Galera Cluster 安裝前準備MySql
- 6. MySQL Galera Cluster全解析 Part 6 Galera Cluster引數設定MySql
- 5. MySQL Galera Cluster全解析 Part 5 Galera Cluster軟體安裝MySql
- MySQL InnoDB Cluster – how to manage a split-brain situationMySqlAI
- 技術分享 | MySQL InnoDB Cluster Set 介紹MySql
- MySQL高可用之MGC--MariaDB Galera ClusterMySqlGC
- MySQL Galera cluster叢集常用引數說明MySql
- mysql之 Percona XtraDB Cluster叢集執行緒模型MySql執行緒模型
- MySQL Galera Cluster全解析 Part 3 狀態快照傳輸(SST)MySql
- MySQL高可用方案-PXC(Percona XtraDB Cluster)環境部署詳解MySql
- redis.cluster/memcached.cluster/wmware esxiRedis
- cluster meet
- MySQL InnoDB Cluster如何定位或找出超過事務大小的SQL?MySql
- 基於Centos7.x 搭建MySQL Galera Cluster高可用架構CentOSMySql架構
- 基於MySQL Cluster + LVS + KeepAlived部署負載均衡高可用架構MySql負載架構
- 面試官:你如何利用 MySQL Cluster 實現整體高可用?面試MySql
- cilium Cluster Mesh
- 部署Kubernetes Cluster
- Redis Cluster 3.0Redis
- redis cluster 搭建Redis
- Redis Cluster原理Redis
- akka-typed(6) - cluster:group router, cluster-load-balancing
- 10. MySQL Galera Cluster全解析 Part 10 grastate.dat檔案詳解MySqlAST
- 2. MySQL Galera Cluster全解析 Part 2 基於認證的複製MySql
- Redis-cluster命令 cluster info 引數資訊解釋Redis
- 【Redis】redis-cluster到redis-cluster的快速複製Redis
- 7.50 CLUSTER_SET
- 7.49 CLUSTER_PROBABILITY
- 7.48 CLUSTER_ID
- 7.46 CLUSTER_DETAILSAI
- 7.47 CLUSTER_DISTANCE
- node叢集(cluster)