dockerをインストールする
dockerがインストールされていないときは、インストールします。
$ sudo yum install docker
$ sudo systemctl start docker
$ sudo systemctl enable docker
$ sudo systemctl status docker
~~
Active: active (running)
dockerイメージの取得
hubから公式のイメージを取得します。
$ sudo docker pull mysql/mysql-cluster
$ sudo docker images
MySQL Cluster クラスタの構築
ドキュメント通りでできました。
$ sudo docker network create cluster --subnet=192.168.0.0/16
$ sudo docker run -d --net=cluster --name=management1 --ip=192.168.0.2 mysql/mysql-cluster ndb_mgmd
$ sudo docker run -d --net=cluster --name=ndb1 --ip=192.168.0.3 mysql/mysql-cluster ndbd
$ sudo docker run -d --net=cluster --name=ndb2 --ip=192.168.0.4 mysql/mysql-cluster ndbd
$ sudo docker run -d --net=cluster --name=mysql1 --ip=192.168.0.10 -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql/mysql-cluster mysqld
$ sudo docker logs mysql1 2>&1 | grep PASSWORD
$ sudo docker exec -it mysql1 mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
ndbdがクラスタのDB本体、ndb_mgmdがndbを管理するサービスです。
基本的にクライアントはSQLサーバに接続すれば良いようです。
確認する
確認のためのユーザとデータベースを作っておきます。
CREATE USER hoge;
SET PASSWORD FOR hoge = PASSWORD('hoge');
CREATE DATABASE mydb;
GRANT ALL ON mydb.* TO hoge;
作成したユーザでテーブルとテストデータを用意します。
CREATE TABLE person (
id int AUTO_INCREMENT NOT NULL PRIMARY KEY,
name varchar(256)
) engine=ndbcluster;
INSERT INTO person (name) VALUES ('Shibuya Rin');
INSERT INTO person (name) VALUES ('Futaba Anzu');
INSERT INTO person (name) VALUES ('Mimura Kanako');
ストレージエンジン「ndbcluster」がMySQL Clusterですが、特にInnoDBと構文的な違いはありませんね。
接続確認はホストのPythonから確認することにしました。
Pythonからの接続に使用するMySQLのドライバは複数あるようなのですが、特にこだわりもないので、公式のものを使用することにします。
$ sudo pip3.6 install --egg mysql-connector-python-rf
チュートリアルを参考にテストコードを作成します。
import mysql.connector
cnx = mysql.connector.connect(
host='192.168.0.10',
user='hoge',
password='hoge',
database='mydb'
)
cursor = cnx.cursor();
cursor.execute("SELECT * FROM person");
for (id, name) in cursor:
print("{}, {}".format(id, name))
cursor.close()
cnx.close()
実行してみます。
$ python3.6 mysql-python.py
1, Shibuya Rin
2, Futaba Anzu
3, Mimura Kanako
問題なさそうです。
終わりです。
参考
https://hub.docker.com/r/mysql/mysql-cluster/
https://dev.mysql.com/doc/connector-python/en/
http://blog.amedama.jp/entry/2015/09/24/222040
http://qiita.com/h-imaoka/items/5702d51d8447da1c045f