MySQL學習筆記03MySQL集群的安裝部署
1.1.1. 準備安裝包
從MySQL官網下載以下安裝包:
mysql-cluster_7.5.7-1ubuntu14.04_amd64.deb-bundle.tar
解壓後得到以下deb安裝包文件:
mysql-client_7.5.7-1ubuntu14.04_amd64.deb mysql-cluster-community-nodejs_7.5.7-1ubuntu14.04_amd64.deb
mysql-cluster-community-auto-installer_7.5.7-1ubuntu14.04_amd64.deb mysql-cluster-community-server_7.5.7-1ubuntu14.04_amd64.deb
mysql-cluster-community-client_7.5.7-1ubuntu14.04_amd64.deb mysql-cluster-community-source_7.5.7-1ubuntu14.04_amd64.deb
mysql-cluster-community-data-node_7.5.7-1ubuntu14.04_amd64.deb mysql-cluster-community-test_7.5.7-1ubuntu14.04_amd64.deb
mysql-cluster-community-java_7.5.7-1ubuntu14.04_amd64.deb mysql-common_7.5.7-1ubuntu14.04_amd64.deb
mysql-cluster-community-management-server_7.5.7-1ubuntu14.04_amd64.deb mysql-server_7.5.7-1ubuntu14.04_amd64.deb
mysql-cluster-community-memcached_7.5.7-1ubuntu14.04_amd64.deb mysql-testsuite_7.5.7-1ubuntu14.04_amd64.deb
為了成功安裝,還需要準備以下依賴軟件包:
libaio1_0.3.109-4_amd64.deb libmecab2_0.996-1.1_amd64.deb
1.1.2. 安裝相關軟件
執行deb -i xxxxx.deb命令,安裝前面介紹的各個軟件包。安裝的次序如下:
(1)安裝依賴包。
libaio1_0.3.109-4_amd64.deb libmecab2_0.996-1.1_amd64.deb
(2)安裝python相關包。
MySQL Cluster的部署程序使用Python編寫,需要python以及相關庫的支持。
安裝之前確保系統上已經安裝了python2.6或更高版本。
sudo apt-get install python-pip
sudo pip install paramiko
sudo pip install pycrypto
(3)安裝集群相關包。
在安裝這些軟件包之前,請確保先將MySQL單機版完全從系統中刪除掉。
mysql-cluster-community-auto-installer_7.5.7-1ubuntu14.04_amd64.deb
mysql-common_7.5.7-1ubuntu14.04_amd64.deb
mysql-cluster-community-client_7.5.7-1ubuntu14.04_amd64.deb
mysql-client_7.5.7-1ubuntu14.04_amd64.deb
mysql-cluster-community-nodejs_7.5.7-1ubuntu14.04_amd64.deb
mysql-cluster-community-data-node_7.5.7-1ubuntu14.04_amd64.deb mysql-cluster-community-java_7.5.7-1ubuntu14.04_amd64.deb mysql-cluster-community-management-server_7.5.7-1ubuntu14.04_amd64.deb mysql-cluster-community-server_7.5.7-1ubuntu14.04_amd64.deb
上述軟件全部安裝成功之後,軟件程序的安裝就完成了。
1.1.3. 部署集群
MySQL Cluster安裝包安裝完畢後,提供了一個web程序: /usr/bin/ndb_setup.py。這個程序用於快速部署MySQL Cluster。
(1)運行ndb_setup.py。
ndb_setup.py
Running out of install dir: /usr/bin
Starting web server on port 8081
deathkey=319875
Press CTRL+C to stop web server.
Navigate to http://localhost:8081/welcome.html to launch the application.
(2)在瀏覽器中完成部署。
使用較高版本的IE,Firefox,或chrome瀏覽器訪問http://localhost:8081/welcome.html。
(a)選擇建立新集群。
初次使用時選擇:Create New MySQL Cluster創建新的集群。在部署之後,需要修改現有集群時,使用Continue Previous Cluster Configuration。
(b)定義SSH用戶名和密碼。
(c)定義集群中的主機。
每個主機可以使用IP地址或者主機名。使用主機名使得部署復雜集群時更為靈活。添加新主機後會自動測試,需要主機開放了sshd服務。測試成功會在Resource欄顯示OK,否則顯示FAILED。
(d)分配節點。
在定義完主機之後,需要將主機分配為集群的節點。一個主機可以分配成多個節點。主機是物理上的概念,節點是一個邏輯概念。整個集群中,至少需要存在一個管理節點,一個數據節點,一個SQL節點。
(e)定義節點參數。
節點參數保持默認狀態即可,通常不需要修改。
(f)部署和啟動服務。
在部署之前,建議先停止掉安裝過程中自動啟動的MySQL Cluster Server服務(mysqld)。
可以直接在此畫面中,將前面設置的節點及其參數部署到對應的主機上,前提條件是這些主機上都已經安裝了MySQL Cluster相關軟件。此時還可以同時啟動這些服務。
(g)部署成功之後集群目錄結構:
前面部署的各個主機mc1到mc5通過域名服務器映射到同一個物理機器(192.168.197.142)上之後,得到整個集群的完整目錄結構如下,包含了4個節點。
/opt/mysql_cluster
.
|-1
|---data
|-----49
|-3
|---data
|-----61
|-------data
|---------coe2coe
|---------mysql
|---------ndbinfo
|---------performance_schema
|---------sys
|-------mysql
|-------test
|-------tmp
|-4
|---data
|-----1
|-------ndb_1_fs
|---------D1
|-----------DBDICT
|-------------T1
|-------------T2
|-------------T3
|-------------T4
|-------------T5
|-------------T6
|-------------T7
|-------------T8
|-------------T9
|-----------DBDIH
|---------D10
|-----------DBLQH
|---------D11
|-----------DBLQH
|---------D2
|-----------DBDICT
|-------------T1
|-------------T2
|-------------T3
|-------------T4
|-------------T5
|-------------T6
|-------------T7
|-------------T8
|-------------T9
|-----------DBDIH
|---------D8
|-----------DBLQH
|---------D9
|-----------DBLQH
|---------LCP
|-----------0
|-5
|---data
|-----2
|-------ndb_2_fs
|---------D1
|-----------DBDICT
|-------------T1
|-------------T2
|-------------T3
|-------------T4
|-------------T5
|-------------T6
|-------------T7
|-------------T8
|-------------T9
|-----------DBDIH
|---------D10
|-----------DBLQH
|---------D11
|-----------DBLQH
|---------D2
|-----------DBDICT
|-------------T1
|-------------T2
|-------------T3
|-------------T4
|-------------T5
|-------------T6
|-------------T7
|-------------T8
|-------------T9
|-----------DBDIH
|---------D8
|-----------DBLQH
|---------D9
|-----------DBLQH
|---------LCP
|-----------0
1.1.4. 管理節點配置文件
管理節點的配置文件包括:
管理節點的參數。
數據節點的參數。
SQL節點的參數。
TCP參數。
管理節點的配置文件的具體內容如下:
[[email protected]:/opt/mysql_cluster/1/data/49]$cat config.ini
#
# Configuration file for MyCluster
#
[NDB_MGMD DEFAULT]
Portnumber=1186
[NDB_MGMD]
NodeId=49
HostName=mc1.coe2coe.me
DataDir=/opt/mysql_cluster/1/data/49/
Portnumber=1186
[TCP DEFAULT]
SendBufferMemory=2M
ReceiveBufferMemory=2M
[NDBD DEFAULT]
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
BackupReportFrequency=10
MemReportFrequency=30
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15
DataMemory=64M
IndexMemory=64M
MaxNoOfTables=4096
MaxNoOfTriggers=3500
NoOfReplicas=2
StringMemory=25
DiskPageBufferMemory=64M
SharedGlobalMemory=64M
LongMessageBuffer=32M
MaxNoOfConcurrentTransactions=16384
BatchSizePerLocalScan=512
FragmentLogFileSize=64M
NoOfFragmentLogFiles=16
RedoBuffer=32M
MaxNoOfExecutionThreads=2
StopOnError=false
LockPagesInMainMemory=1
TimeBetweenEpochsTimeout=32000
TimeBetweenWatchdogCheckInitial=60000
TransactionInactiveTimeout=60000
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000
[NDBD]
NodeId=1
HostName=mc4.coe2coe.me
DataDir=/opt/mysql_cluster/4/data/1/
[NDBD]
NodeId=2
HostName=mc5.coe2coe.me
DataDir=/opt/mysql_cluster/5/data/2/
[MYSQLD DEFAULT]
[MYSQLD]
NodeId=61
HostName=mc3.coe2coe.me
1.1.5. SQL節點的配置文件
SQL節點的配置文件具體內容如下:
[[email protected]:/opt/mysql_cluster]$cat 3/data/61/my.cnf
#
# Configuration file for MyCluster
# Generated by mcc
#
[mysqld]
log-error=mysqld.61.err
datadir="/opt/mysql_cluster/3/data/61/data"
tmpdir="/opt/mysql_cluster/3/data/61/tmp"
basedir="/usr/"
bind-address=0.0.0.0
port=3306
ndbcluster=on
ndb-nodeid=61
ndb-connectstring=mc1.coe2coe.me:1186,
socket="/opt/mysql_cluster/3/data/61/mysql.socket"
1.1.6. 集群狀態
(1)節點狀態。
使用ndb_mgm管理工具查看集群狀態:
ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=1 @192.168.197.142 (mysql-5.7.19 ndb-7.5.7, Nodegroup: 0, *)
id=2 @192.168.197.142 (mysql-5.7.19 ndb-7.5.7, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=49 @192.168.197.142 (mysql-5.7.19 ndb-7.5.7)
[mysqld(API)] 1 node(s)
id=61 @192.168.197.142 (mysql-5.7.19 ndb-7.5.7)
已經有4個節點處於運行狀態,包括1個管理節點,1個SQL節點和2個數據節點。MySQL集群已經成功啟動運行了。
(2)進程狀態:
[[email protected]:/opt/mysql_cluster]$ps -elf|grep ndb
1 S d 2334 1 1 80 0 - 208795 poll_s 11:44 ? 00:00:30 /usr/sbin/ndb_mgmd --ndb-nodeid=49 --config-dir=/opt/mysql_cluster/1/data/49/ --config-file=/opt/mysql_cluster/1/data/49/config.ini
1 S d 2348 1 0 80 0 - 8911 poll_s 11:44 ? 00:00:00 /usr/sbin/ndbmtd --ndb-nodeid=1 --ndb-connectstring=mc1.coe2coe.me:1186,
1 S d 2349 2348 3 80 0 - 172985 ep_pol 11:44 ? 00:01:29 /usr/sbin/ndbmtd --ndb-nodeid=1 --ndb-connectstring=mc1.coe2coe.me:1186,
1 S d 2391 1 0 80 0 - 8911 poll_s 11:44 ? 00:00:00 /usr/sbin/ndbmtd --ndb-nodeid=2 --ndb-connectstring=mc1.coe2coe.me:1186,
1 S d 2392 2391 3 80 0 - 189369 ep_pol 11:44 ? 00:01:27 /usr/sbin/ndbmtd --ndb-nodeid=2 --ndb-connectstring=mc1.coe2coe.me:1186,
0 S d 2706 2135 0 80 0 - 4154 pipe_w 12:25 pts/1 00:00:00 grep --color=auto ndb
[[email protected]:/opt/mysql_cluster]$ps -elf|grep mysqld
0 S d 2635 1 1 80 0 - 390524 poll_s 11:51 pts/1 00:00:26 /usr/sbin/mysqld --defaults-file=/opt/mysql_cluster/3/data/61/my.cnf
0 S d 2708 2135 0 80 0 - 4154 pipe_w 12:25 pts/1 00:00:00 grep --color=auto mysqld
可以看到:
有1個管理節點的ndb_mgmd進程,進程ID為2334。
有2個數據節點的ndbmtd進程,其中節點1的2個進程ID分別為2349,2348;節點2的2個進程ID分別為2391,2392。
有1個SQL節點的mysqld進程,進程ID為2635。
(3)TCP連接狀態:
(a)ndb_mgmd相關連接。
[[email protected]:/opt/mysql_cluster]$sudo netstat -nap |grep tcp |grep ndb_mgmd
tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 2334/ndb_mgmd
tcp 0 0 192.168.197.142:1186 192.168.197.142:38285 ESTABLISHED 2334/ndb_mgmd
tcp 0 0 127.0.0.1:40600 127.0.0.1:1186 ESTABLISHED 2334/ndb_mgmd
tcp 0 0 192.168.197.142:1186 192.168.197.142:38284 ESTABLISHED 2334/ndb_mgmd
tcp 0 0 192.168.197.142:1186 192.168.197.142:38288 ESTABLISHED 2334/ndb_mgmd
tcp 0 0 192.168.197.142:1186 192.168.197.142:38286 ESTABLISHED 2334/ndb_mgmd
tcp 0 0 192.168.197.142:1186 192.168.197.142:38283 ESTABLISHED 2334/ndb_mgmd
tcp 0 0 127.0.0.1:1186 127.0.0.1:40600 ESTABLISHED 2334/ndb_mgmd
可以看到以下信息:
管理節點的服務ndb_mgmd進程在1186端口監聽,有5個來自192.168.197.142的連接。
(b)ndbmtd相關連接。
數據節點建立的監聽端口:
[[email protected]:/opt/mysql_cluster]$sudo netstat -nap |grep tcp |grep ndbmtd |grep LISTEN
tcp 0 0 192.168.197.142:35334 0.0.0.0:* LISTEN 2349/ndbmtd
tcp 0 0 192.168.197.142:49677 0.0.0.0:* LISTEN 2392/ndbmtd
tcp 0 0 192.168.197.142:40758 0.0.0.0:* LISTEN 2349/ndbmtd
數據節點與管理節點的連接:
[[email protected]:/opt/mysql_cluster]$sudo netstat -nap |grep tcp |grep ndbmtd |grep 1186
tcp 0 0 192.168.197.142:38285 192.168.197.142:1186 ESTABLISHED 2391/ndbmtd
tcp 0 0 192.168.197.142:38286 192.168.197.142:1186 ESTABLISHED 2392/ndbmtd
tcp 0 0 192.168.197.142:38283 192.168.197.142:1186 ESTABLISHED 2348/ndbmtd
tcp 0 0 192.168.197.142:38284 192.168.197.142:1186 ESTABLISHED 2349/ndbmtd
數據節點之間的連接:
[[email protected]:/opt/mysql_cluster]$sudo netstat -nap |grep tcp |grep ndbmtd |grep 35334
tcp 0 0 192.168.197.142:35334 0.0.0.0:* LISTEN 2349/ndbmtd
tcp 0 0 192.168.197.142:35334 192.168.197.142:53294 ESTABLISHED 2349/ndbmtd
[[email protected]:/opt/mysql_cluster]$sudo netstat -nap |grep tcp |grep ndbmtd |grep 49677
tcp 0 0 192.168.197.142:49677 0.0.0.0:* LISTEN 2392/ndbmtd
tcp 0 0 192.168.197.142:49677 192.168.197.142:46707 ESTABLISHED 2392/ndbmtd
[[email protected]:/opt/mysql_cluster]$sudo netstat -nap |grep tcp |grep ndbmtd |grep 40758
tcp 0 0 192.168.197.142:40758 0.0.0.0:* LISTEN 2349/ndbmtd
tcp 0 0 192.168.197.142:60231 192.168.197.142:40758 ESTABLISHED 2392/ndbmtd
tcp 0 0 192.168.197.142:40758 192.168.197.142:60231 ESTABLISHED 2349/ndbmtd
可以看到以下信息:
數據節點的4個進程各自與管理節點建立了1個TCP連接,數據節點之間也建立了TCP連接。
(c)mysqld相關連接。
[[email protected]:/opt/mysql_cluster]$sudo netstat -nap |grep tcp |grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2635/mysqld
tcp 0 0 192.168.197.142:46707 192.168.197.142:49677 ESTABLISHED 2635/mysqld
tcp 0 0 192.168.197.142:38288 192.168.197.142:1186 ESTABLISHED 2635/mysqld
tcp 0 0 192.168.197.142:53294 192.168.197.142:35334 ESTABLISHED 2635/mysqld
可以看到,SQL節點建立了3306端口的監聽,同時連接到了2個數據節點。
(4)使用sql查詢節點之間的連接狀態。
mysql> select node_id,remote_node_id,status from ndbinfo.transporters;
+---------+----------------+--------------+
| node_id | remote_node_id | status |
+---------+----------------+--------------+
| 1 | 1 | DISCONNECTED |
| 1 | 2 | CONNECTED |
| 1 | 49 | CONNECTED |
| 1 | 61 | CONNECTED |
| 2 | 1 | CONNECTED |
| 2 | 2 | DISCONNECTED |
| 2 | 49 | CONNECTED |
| 2 | 61 | CONNECTED |
+---------+----------------+--------------+
8 rows in set (0.01 sec)
可以看到,兩個數據節點(1和2)分別跟其它所有節點(包括管理節點49,SQL節點61)都建立了連接。
1.1.7. 集群啟動腳本
通過這種圖形化的Web應用來部署集群非常方便,但是每次啟動集群都使用這個工具就很不方便,而且可能會覆蓋在主機中手工修改的集群參數。此時編寫一個簡單的腳本即可解決此問題。
總共有5個腳本文件:
[[email protected]:/opt/mysql_cluster/home]$ls
start_ndb_mgmd.sh 啟動管理節點。
start_ndbmtd1.sh 啟動數據節點1。
start_ndbmtd2.sh 啟動數據節點2。
start_mysqld.sh 啟動SQL節點。
cluster_start.sh 啟動整個集群的總控制腳本文件。
各個腳本的內容如下:
[[email protected]:/opt/mysql_cluster/home]$cat start_ndb_mgmd.sh
#!/bin/bash
/usr/sbin/ndb_mgmd --initial --ndb-nodeid=49 --config-dir=/opt/mysql_cluster/1/data/49/ --config-file=/opt/mysql_cluster/1/data/49/config.ini
[[email protected]:/opt/mysql_cluster/home]$cat start_ndbmtd1.sh
#!/bin/bash
/usr/sbin/ndbmtd --ndb-nodeid=1 --ndb-connectstring=mc1.coe2coe.me:1186,
[[email protected]:/opt/mysql_cluster/home]$cat start_ndbmtd2.sh
#!/bin/bash
/usr/sbin/ndbmtd --ndb-nodeid=2 --ndb-connectstring=mc1.coe2coe.me:1186,
[[email protected]:/opt/mysql_cluster/home]$cat start_mysqld.sh
#!/bin/bash
/usr/sbin/mysqld --defaults-file=/opt/mysql_cluster/3/data/61/my.cnf &
[[email protected]:/opt/mysql_cluster/home]$cat cluster_start.sh
#!/bin/bash
echo "Starting ndb_mgmd ....."
/opt/mysql_cluster/home/start_ndb_mgmd.sh
sleep 5
echo "Starting ndbmtd1 ....."
/opt/mysql_cluster/home/start_ndbmtd1.sh
sleep 3
echo "Starting ndbmtd2 ......"
/opt/mysql_cluster/home/start_ndbmtd2.sh
sleep 3
echo "Starting mysqld ......"
/opt/mysql_cluster/home/start_mysqld.sh
echo "Done."
echo "==========================="
通過調整cluster_start.sh腳本的具體內容,可以控制在某臺主機上需要啟動的節點。
將所有節點部署在同一臺主機上時,運行啟動腳本:
[[email protected]:/opt/mysql_cluster/home]$./cluster_start.sh
Starting ndb_mgmd .....
MySQL Cluster Management Server mysql-5.7.19 ndb-7.5.7
2017-07-29 12:44:02 [MgmtSrvr] WARNING -- at line 22: [DB] BackupMemory is deprecated, use Total memory allocated for backups per node (in bytes) instead
Starting ndbmtd1 .....
2017-07-29 12:44:08 [ndbd] INFO -- Angel connected to ‘mc1.coe2coe.me:1186‘
2017-07-29 12:44:08 [ndbd] INFO -- Angel allocated nodeid: 1
Starting ndbmtd2 ......
2017-07-29 12:44:11 [ndbd] INFO -- Angel connected to ‘mc1.coe2coe.me:1186‘
2017-07-29 12:44:11 [ndbd] INFO -- Angel allocated nodeid: 2
Starting mysqld ......
Done.
===========================
集群啟動成功。
1.1.8. 關閉集群
執行以下命令關閉集群:
ndb_mgmd -e shutdown
執行以下命令關閉SQL節點的mysqld服務:
mysql -uroot -p -e shutdown
MySQL學習筆記03MySQL集群的安裝部署