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