1. 程式人生 > >MySQL學習筆記03MySQL集群的安裝部署

MySQL學習筆記03MySQL集群的安裝部署

key 復雜 手工 file python2.6 nap con 裝包 9.png

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參數。

管理節點的配置文件的具體內容如下:

[[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個管理節點,1SQL節點和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進程,進程ID2334

2個數據節點的ndbmtd進程,其中節點12個進程ID分別為2349,2348;節點22個進程ID分別為2391,2392

1SQL節點的mysqld進程,進程ID2635

(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個進程各自與管理節點建立了1TCP連接,數據節點之間也建立了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)

可以看到,兩個數據節點(12)分別跟其它所有節點(包括管理節點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集群的安裝部署