はじめに
仕事でMySQL Cluster使う事が決まったので最新版で環境構築を行なっていたが8.0がのDMRがリリースされたのでそちらで環境構築をし直し(メモ)
参考URL
8.0の手順
https://dev.mysql.com/doc/refman/8.0/en/installing.html
環境
ちょっぱやで作りたかったのでVagrantで環境構築(Vagrantは相性とかあるのでバージョンは以下)
Vagrant Version:2.2.4
VertualBox Version:6.0.4
vagrant box addで困った人がいたので追記。
vagrant box add centos7 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
vagrant init centos7
設定ファイルはこんな感じ。
### server1の設定内容
config.vm.define "d01" do |server|
server.vm.hostname = config.vm.box + "-d01" + ".vagrant"
server.vm.network "private_network", ip: "192.168.200.101", host: "52001"
config.vm.provider "virtualbox" do |vb|
### virtualbox上で表示される名前
vb.name = config.vm.box + "_d01"
vb.customize ["modifyvm", :id, "--memory", "2048"]
vb.customize ["modifyvm", :id, "--cpus", "2"]
end
end
### server2の設定内容
config.vm.define "d02" do |server|
server.vm.hostname = config.vm.box + "-d02" + ".vagrant"
server.vm.network "private_network", ip: "192.168.200.102", host: "52002"
config.vm.provider "virtualbox" do |vb|
### virtualbox上で表示される名前
vb.name = config.vm.box + "_d02"
vb.customize ["modifyvm", :id, "--memory", "2048"]
vb.customize ["modifyvm", :id, "--cpus", "2"]
end
end
### serverMの設定内容
config.vm.define "sM" do |server|
server.vm.hostname = config.vm.box + "-sM" + ".vagrant"
server.vm.network "private_network", ip: "192.168.200.100", host: "52000"
config.vm.provider "virtualbox" do |vb|
### virtualbox上で表示される名前
vb.name = config.vm.box + "_sM"
vb.customize ["modifyvm", :id, "--memory", "2048"]
vb.customize ["modifyvm", :id, "--cpus", "1"]
end
end
構成
サイトで推奨している最小構成で構築(こんな想定)
sM:192.168.200.100:管理サーバ(MGMノード)
d01:192.168.200.101:SQLノード+データノードA(NDBDノード)
d02:192.168.200.102:SQLノード+データノードB(NDBDノード)
インストールパッケージ
今回はRPMパッケージでインストール(パッケージはこれ(RPMのバンドル):wgetとかで持ってくる。)
https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-8.0.16-0.1.dmr.el7.x86_64.rpm-bundle.tar
確認
SSHの疎通確認
ssh 192.168.200.100 -l root
ssh 192.168.200.101 -l root
ssh 192.168.200.102 -l root
※passwordは全てvagrant
SCPでコピー
・管理サーバ(MGMノード)
MySQL-Cluster-management-server-XXXXXX.rpm
・SQLノード
MySQL-Cluster-server-XXXXXX.rpm
→ MySQL-Cluster-client-XXXXXX.rpm
→ MySQL-Cluster-common-XXXXXX.rpm
→ MySQL-Cluster-lib-XXXXXX.rpm
・データノード
MySQL-Cluster-data-node-XXXXXX.rpm
RPMインストール
rpm -Uhv XXX.rpm
注意
SQLノードでclientのRPMが入らない。。(client)
警告: mysql-cluster-community-client-8.0.16-0.1.dmr.el7.x86_64.rpm: ヘッダー V3 DSA/SHA1 Signature、鍵 ID 5072e1f5: NOKEY
エラー: 依存性の欠如:
perl(Class::MethodMaker) は mysql-cluster-community-client-8.0.16-0.1.dmr.el7.x86_64 に必要とされています
perl(DBI) は mysql-cluster-community-client-8.0.16-0.1.dmr.el7.x86_64 に必要とされています
perl(Data::Dumper) は mysql-cluster-community-client-8.0.16-0.1.dmr.el7.x86_64 に必要とされています
perl-DBIとperl-Class-MethodMakerが必要。
perl-DBIは、yumで入れた。(yum -y install perl-DBI)
perl-Class-MethodMakerは、wgetでRPM落としてきてインストール。
http://repo.openfusion.net/centos7-x86_64//perl-Class-MethodMaker-2.21-1.of.el7.x86_64.rpm
SQLノードでserverのRPMが入らない。。(client)
警告: mysql-cluster-community-server-8.0.16-0.1.dmr.el7.x86_64.rpm: ヘッダー V3 DSA/SHA1 Signature、鍵 ID 5072e1f5: NOKEY
エラー: 依存性の欠如:
net-tools は mysql-cluster-community-server-8.0.16-0.1.dmr.el7.x86_64 に必要とされています
net-toolsは、wgetでRPM落としてきてインストール。
http://mirror.centos.org/centos/7/os/x86_64/Packages/net-tools-2.0-0.24.20131004git.el7.x86_64.rpm
設定
設定ファイル
全てのサーバに配布
[mysqld]
# Options for mysqld process:
ndbcluster # run NDB storage engine
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.200.100 # location of management server
ディレクトリ作成(データノード)
mkdir -p /usr/local/mysql/data
ディレクトリ作成(管理ノード)
管理ノードで設定ファイル作成
% mkdir /var/lib/mysql-cluster
% cd /var/lib/mysql-cluster
% vi config.ini
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of replicas
DataMemory=80M # How much memory to allocate for data storage
[ndb_mgmd]
# Management process options:
HostName=192.168.200.100 # Hostname or IP address of MGM node
DataDir=/var/lib/mysql-cluster # Directory for MGM node log files
[ndbd]
# Options for data node "d01":
# (one [ndbd] section per data node)
HostName=192.168.200.101 # Hostname or IP address
NodeId=2 # Node ID for this data node
DataDir=/usr/local/mysql/data # Directory for this data node's data files
[ndbd]
# Options for data node "d02":
HostName=192.168.200.102 # Hostname or IP address
NodeId=3 # Node ID for this data node
DataDir=/usr/local/mysql/data # Directory for this data node's data files
[mysqld]
# SQL node options:
HostName=192.168.200.101 # Hostname or IP address
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
[mysqld]
# SQL node options:
HostName=192.168.200.102 # Hostname or IP address
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
起動
管理ノード起動
% ndb_mgmd -f /var/lib/mysql-cluster/config.ini
MySQL Cluster Management Server mysql-8.0.16 ndb-8.0.16-dmr
データノード起動
% ndbd
2019-05-09 04:05:12 [ndbd] INFO -- Angel connected to '192.168.200.100:1186'
2019-05-09 04:05:12 [ndbd] INFO -- Angel allocated nodeid: 2
起動しない時は管理ノードなどのFireWallをOFFにする
CentOS7ならこれでいける。
% systemctl stop firewalld
起動確認
確認にはndb_mgmが必要。(今回入れたのはSQLノードなのでSQLノードで確認)
% ndb_mgm
ndb_mgm> show
[ndbd(NDB)] 2 node(s)
id=2 @192.168.200.101 (mysql-8.0.16 ndb-8.0.16, Nodegroup: 0, *)
id=3 @192.168.200.102 (mysql-8.0.16 ndb-8.0.16, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.200.100 (mysql-8.0.16 ndb-8.0.16)
[mysqld(API)] 2 node(s)
id=4 (not connected, accepting connect from 192.168.200.101)
id=5 (not connected, accepting connect from 192.168.200.102)
SQLノード以外は起動できている。
SQLノード起動
まずはmySQLの初期化
% mysqld --initialize --user=mysql
--user=mysqlのオプションをつけないとroot実行となるため、以下エラーが出てハマる。
[ERROR] [MY-010123] [Server] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
次に/var/log/mysqld.logを開いて初期パスワードを確認(メモっておく)
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: [XXXXXXXX]
% mysqld --ndbcluster --user=mysql
% ndb_mgm
ndb_mgm> show
[ndbd(NDB)] 2 node(s)
id=2 @192.168.200.101 (mysql-8.0.16 ndb-8.0.16, Nodegroup: 0, *)
id=3 @192.168.200.102 (mysql-8.0.16 ndb-8.0.16, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.200.100 (mysql-8.0.16 ndb-8.0.16)
[mysqld(API)] 2 node(s)
id=4 @192.168.200.101 (mysql-8.0.16 ndb-8.0.16)
id=5 @192.168.200.102 (mysql-8.0.16 ndb-8.0.16)
ログイン
各SQLノードで実行が必要っぽい。
メモったroot初期パスワードでログインする
% mysql -uroot -p
Enter password:
初回ログイン時はパスワード変更を行うまで何もできない。
mysql>XXXXXXXXX
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; /*パスワード変更*/
Query OK, 0 rows affected (0.01 sec)
mysql> select * from information_schema.ENGINES; /*エンジンの確認 */
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ENGINE | SUPPORT | COMMENT | TRANSACTIONS | XA | SAVEPOINTS |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ndbcluster | YES | Clustered, fault-tolerant tables | YES | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| ndbinfo | YES | MySQL Cluster system information storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
11 rows in set (0.02 sec)
mysql> select * from ndbinfo.nodes; /*NDBDノードの確認*/
+---------+--------+---------+-------------+-------------------+
| node_id | uptime | status | start_phase | config_generation |
+---------+--------+---------+-------------+-------------------+
| 2 | 2752 | STARTED | 0 | 1 |
| 3 | 2743 | STARTED | 0 | 1 |
+---------+--------+---------+-------------+-------------------+
2 rows in set (0.02 sec)
一つのSQLノードで以下実行
mysql> CREATE DATABASE NDB01 default character set utf8mb4;USE NDB01;
Query OK, 1 row affected (0.08 sec)
Database changed
mysql> CREATE TABLE test_poc(id INT NOT NULL AUTO_INCREMENT, jdoc JSON NOT NULL, PRIMARY KEY(id)) ENGINE=NDBCLUSTER;
Query OK, 0 rows affected (0.25 sec)
mysql> show tables;
+-----------------+
| Tables_in_NDB01 |
+-----------------+
| test_poc |
+-----------------+
1 row in set (0.00 sec)
mysql> desc test_poc;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| jdoc | json | NO | | NULL | |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
もう一方のSQLノードから上記テーブルが参照できれば一先ずOKかな?
外部アクセス用にフルアクセスユーザを作る。
mysql> create user 'test'@'%' identified by 'test';
Query OK, 0 rows affected (0.02 sec)
mysql> grant all privileges on NDB01.* to 'test'@'%';
Query OK, 0 rows affected (0.01 sec)
停止
停止もndb_mgmを使う
% ndb_mgm -e shutdown
とりあえず以上。