首页 > 代码库 > MySQL学习笔记03MySQL集群的安装部署

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)部署成功之后集群目录结构:

前面部署的各个主机mc1mc5通过域名服务器映射到同一个物理机器(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参数。

 

 

管理节点的配置文件的具体内容如下:

 

[d@192.168.197.142:/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节点的配置文件具体内容如下:

[d@192.168.197.142:/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个管理节点,1SQL节点和2个数据节点。MySQL集群已经成功启动运行了。

 

 

(2)进程状态:

[d@192.168.197.142:/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

[d@192.168.197.142:/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进程,进程ID2334

2个数据节点的ndbmtd进程,其中节点12个进程ID分别为2349,2348;节点22个进程ID分别为2391,2392

1SQL节点的mysqld进程,进程ID2635

 

 

(3)TCP连接状态:

(a)ndb_mgmd相关连接。

[d@192.168.197.142:/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相关连接。

数据节点建立的监听端口:

[d@192.168.197.142:/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

 

数据节点与管理节点的连接:

[d@192.168.197.142:/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  

 

数据节点之间的连接:

[d@192.168.197.142:/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     

[d@192.168.197.142:/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     

[d@192.168.197.142:/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个进程各自与管理节点建立了1TCP连接,数据节点之间也建立了TCP连接。

 

(c)mysqld相关连接。

[d@192.168.197.142:/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)

 

可以看到,两个数据节点(12)分别跟其它所有节点(包括管理节点49,SQL节点61)都建立了连接。

 

 

1.1.7. 集群启动脚本

 

通过这种图形化的Web应用来部署集群非常方便,但是每次启动集群都使用这个工具就很不方便,而且可能会覆盖在主机中手工修改的集群参数。此时编写一个简单的脚本即可解决此问题。

总共有5个脚本文件:

[d@192.168.197.142:/opt/mysql_cluster/home]$ls

start_ndb_mgmd.sh  启动管理节点。

start_ndbmtd1.sh    启动数据节点1

start_ndbmtd2.sh    启动数据节点2

start_mysqld.sh      启动SQL节点。

cluster_start.sh     启动整个集群的总控制脚本文件。

 

各个脚本的内容如下:

[d@192.168.197.142:/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

 

[d@192.168.197.142:/opt/mysql_cluster/home]$cat start_ndbmtd1.sh

#!/bin/bash

/usr/sbin/ndbmtd --ndb-nodeid=1 --ndb-connectstring=mc1.coe2coe.me:1186,

 

[d@192.168.197.142:/opt/mysql_cluster/home]$cat start_ndbmtd2.sh

#!/bin/bash

/usr/sbin/ndbmtd --ndb-nodeid=2 --ndb-connectstring=mc1.coe2coe.me:1186,

 

[d@192.168.197.142:/opt/mysql_cluster/home]$cat start_mysqld.sh

#!/bin/bash

/usr/sbin/mysqld --defaults-file=/opt/mysql_cluster/3/data/61/my.cnf &

 

[d@192.168.197.142:/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脚本的具体内容,可以控制在某台主机上需要启动的节点。

 

 

将所有节点部署在同一台主机上时,运行启动脚本:

[d@192.168.197.142:/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集群的安装部署