Webサイト制作コースのお申し込みはこちら

MySQL ClusterをDockerで起動して、実際の動作を確認し、まとめました。

MySQLClusterを最小のデフォルト構成で起動する

Dockerコンテナは、mysql提供のものを使用しました。OS/ARCHはlinux/amd64です。MySQL Clusterのバージョンは7.6.12です。

参考)mysql/mysql-cluster – Docker Hub

下記コマンドを実行して、管理ノードを起動します。

$ docker run -d --net=cluster --name=management1 --ip=192.168.0.2 mysql/mysql-cluster ndb_mgmd

mysql/mysql-clusterの最新イメージがpullされ、ノードが立ち上がります。

Unable to find image 'mysql/mysql-cluster:latest' locally
latest: Pulling from mysql/mysql-cluster
a316717fc6ee: Pull complete 
866cb79fcddd: Pull complete 
9a1fb4d8391d: Pull complete 
72d3c0bc335c: Pull complete 
8902f96f4114: Pull complete 
8b7efa57d819: Pull complete 
Digest: sha256:a3caeb4b83877f708c3424be886440087a3f20db3a4389259b96ed206053681e
Status: Downloaded newer image for mysql/mysql-cluster:latest
a8bd94d470bef11938dfc82f3ce56856b2c0e48c58579c42acc2a0c696fb676d

下記コマンドを実行し、データノードその1を起動します。

$ docker run -d --net=cluster --name=ndb1 --ip=192.168.0.3 mysql/mysql-cluster ndbd

下記コマンドを実行し、データノードその2を起動します。

$ docker run -d --net=cluster --name=ndb2 --ip=192.168.0.4 mysql/mysql-cluster ndbd

下記コマンドを実行し、SQLノードを起動します。

$ docker run -d --net=cluster --name=mysql1 --ip=192.168.0.10 -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql/mysql-cluster mysqld

最小構成は管理ノード1個、データノード2個、SQLノード1個のようです。SQLノード起動時に、ログにパスワードが出力されるので、下記コマンドを実行してパスワードを表示させます。

$ docker logs mysql1 2>&1 | grep PASSWORD

SQLノードが起動するまでは、ログにパスワードが出力されません。上記コマンドを、パスワードが表示されるまで何度か実行します。

[Entrypoint] GENERATED ROOT PASSWORD: ig94q4hQ4SaxUz-AG#Of]Er*uNu

パスワードが表示されました。このパスワードを使って、SQLノードにログインします。

$ docker exec -it mysql1 mysql -uroot -p

先ほど表示されたパスワードを使ってログインします。

Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.28-ndb-7.6.12-cluster-gpl MySQL Cluster Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQLのrootのパスワードを変更しておきましょう。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'q2O2t#m6Q6&1';

これで、最小構成でMySQL Clusterが起動しました。

Query OK, 0 rows affected (0.00 sec)

クラスタ操作 ノードのstop/startをおこなう

管理ノードからクラスタ情報を確認する

下記コマンドを実行し、管理用のCUIコマンドを実行します。

$ docker run -it --net=cluster mysql/mysql-cluster ndb_mgm

ndb_mgm>とプロンプトが表示されることを確認します。

[Entrypoint] MySQL Docker Image 7.6.12-1.1.13-cluster
[Entrypoint] Starting ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm>

showと入力します。

ndb_mgm> show

ノード情報が表示されます。

Connected to Management Server at: 192.168.0.2:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.3  (mysql-5.7.28 ndb-7.6.12, Nodegroup: 0, *)
id=3    @192.168.0.4  (mysql-5.7.28 ndb-7.6.12, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.2  (mysql-5.7.28 ndb-7.6.12)
[mysqld(API)]   1 node(s)
id=4    @192.168.0.10  (mysql-5.7.28 ndb-7.6.12)

id=1がMGM(管理ノード)、id=2、id=3がNDB(データノード)、id=4がAPI(SQLノード)です。

ノードのstop

データノードの一つをstop(シャットダウン)してみましょう。

「2 stop」でid=2のノードがシャットダウンします。

ndb_mgm> 2 stop
Node 2: Node shutdown initiated
Node 2 has shutdown.

showで確認すると、id=2のノードが「not connected」になってます。

ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2 (not connected, accepting connect from 192.168.0.3)
id=3    @192.168.0.4  (mysql-5.7.28 ndb-7.6.12, Nodegroup: 0, *)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.2  (mysql-5.7.28 ndb-7.6.12)
[mysqld(API)]   1 node(s)
id=4    @192.168.0.10  (mysql-5.7.28 ndb-7.6.12)
ndb_mgm> exit

mysqlコマンドでデータベースへの接続を確認します。

docker exec -it mysql1 mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 53
Server version: 5.7.28-ndb-7.6.12-cluster-gpl MySQL Cluster Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ndbinfo            |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

問題なく接続できています。

ノードのstart

停止させたノードを再度起動しましょう。

docker container pruneで停止済みのコンテナを全削除します。

$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
79af3abb839fca0d9930a163768b7ad42399bc0d76a9e8a12dc597bd80e3f898

id=2のコンテナを起動します。

$ docker run -d --net=cluster --name=ndb1 --ip=192.168.0.3 mysql/mysql-cluster ndbd

管理用CUIでクラスタの状態を確認しましょう。下記コマンドを実行します。

$ docker run -it --net=cluster mysql/mysql-cluster ndb_mgm

ndb_mgm>とプロンプトに、showと入力します。

[Entrypoint] MySQL Docker Image 7.6.12-1.1.13-cluster
[Entrypoint] Starting ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm>show

全てのノード情報が起動していることを確認します。

Connected to Management Server at: 192.168.0.2:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.3  (mysql-5.7.28 ndb-7.6.12, Nodegroup: 0, *)
id=3    @192.168.0.4  (mysql-5.7.28 ndb-7.6.12, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.2  (mysql-5.7.28 ndb-7.6.12)
[mysqld(API)]   1 node(s)
id=4    @192.168.0.10  (mysql-5.7.28 ndb-7.6.12)

まとめ

ポテパンダの一言メモ
  • MySQL Clusterの4ノード構成はdockerコンテナ起動で試すのが簡単
  • クラスタの状態は、管理用CUIコマンドを使う
  • 指定したノードをstart/stopさせることが可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。