MySQL Clusterの詳細は非常に奥深いので、私が適当な事を書くと叱られると思いますので、書籍やMySQLの先生方にお願いするとして(適当ですみません)、とりあえずSolarisゾーンで試してみる。
今回はSolarisゾーンへのインストールから初期動作までということで...
パッケージサーバーの準備
まずはインストールとか言われても、やる気が起きるわけがないので、こちらに用意しました。IPSサーバーを準備すればソースからのビルドは免れます。
gentoo install battleの猛者には叱られるかもしれません...
まずはゾーンを準備
構築環境
- Gentoo Linux Linux 3.14.2-gentoo #7 SMP
- Solaris11.1 x86 on vmware player
で仮想環境のSolaris上へ、準備するゾーンは全部で5つ、
- iichiko2-spec(IPSパッケージ用)
- mgm(マネージメントノード)
- sql1(SQLノード1)
- sql2(SQLノード2)
- data1(データノード1)
- data2(データノード2)
以上のゾーンで構成します、実際はvmware player for gentoo上の仮想環境上のSolaris11なのでその辺の環境の差は各自で調整してください。
iichiko2-specゾーン
create -b set brand=solaris set zonepath=/rpool/zones/iichiko2-spec set autoboot=false set ip-type=shared add net set address=192.168.254.103/24 set configure-allowed-address=true set physical=net0 endmgmゾーン
create -b set brand=solaris set zonepath=/rpool/zones/mgm set autoboot=false set ip-type=shared add net set address=192.168.254.80/24 set configure-allowed-address=true set physical=net0 endsql1ゾーン
create -b set brand=solaris set zonepath=/rpool/zones/sql1 set autoboot=false set ip-type=shared add net set address=192.168.254.81/24 set configure-allowed-address=true set physical=net0 endsql2ゾーン
create -b set brand=solaris set zonepath=/rpool/zones/sql2 set autoboot=false set ip-type=shared add net set address=192.168.254.82/24 set configure-allowed-address=true set physical=net0 enddata1ゾーン
create -b set brand=solaris set zonepath=/rpool/zones/data1 set autoboot=false set ip-type=shared add net set address=192.168.254.83/24 set configure-allowed-address=true set physical=net0 enddata2ゾーン
create -b set brand=solaris set zonepath=/rpool/zones/data2 set autoboot=false set ip-type=shared add net set address=192.168.254.84/24 set configure-allowed-address=true set physical=net0 end
ゾーン作成とパッケージインストール
iichiko2-specを作成しIPSを利用できるようにする
global-zone ~ # zoneadm -z iichiko2-spec install global-zone ~ # zlogin -C iichiko2-spec
IPS設定
root@iichiko2-spec:~# wget http://www.karky7.com/files/ips-mysql-cluster-7.4.6_2015.05.06.zfs.img.gz root@iichiko2-spec:~# zfs create -p -o mountpoint=/var/pkglocal rpool/pkglocal root@iichiko2-spec:~# gunzip < ips-mysql-cluster-7.4.6_2015.05.06.zfs.img.gz | zfs recv -F rpool/pkglocal root@iichiko2-spec:~# svccfg -s application/pkg/server setprop pkg/inst_root=/var/pkglocal root@iichiko2-spec:~# svccfg -s pkg/server setprop pkg/port=80 root@iichiko2-spec:~# svccfg -s svc:/application/pkg/server setprop pkg/readonly=true root@iichiko2-spec:~# svcadm refresh pkg/server root@iichiko2-spec:~# svcadm enable pkg/server
こんな画面が出ればOK、これでpkg installが可能になる
global-zone ~ # pkg set-publisher -g http://192.168.254.103 iichiko2-spec global-zone ~ # pkg publisher 発行元 タイプ ステータス P 場所 solaris 起点 オンライン F http://192.168.254.100/ iichiko2-spec 起点 オンライン F http://192.168.254.103/ global-zone ~ #続いて各サーバーを作成
global-zone ~ # zoneadm -z mgm install global-zone ~ # zlogin -C mgmとりあえずmgmゾーンでパッケージを入れて、後はゾーンのクローンで済ませる(面倒)
global-zone ~ # zlogin mgm [Connected to zone 'mgm' pts/3] Oracle Corporation SunOS 5.11 11.1 September 2012 root@mgm:~# pkg install pkg://iichiko2-spec/database/mysql-cluster-gpl-74 \ pkg://iichiko2-spec/database/mysql-cluster-gpl-74/devel \ pkg://iichiko2-spec/database/mysql-cluster-gpl-74/doc \ pkg://iichiko2-spec/database/mysql-cluster-gpl-74/library \ pkg://iichiko2-spec/database/mysql-cluster-gpl-74/server \ pkg://iichiko2-spec/database/mysql-cluster-gpl-74/tests Packages to install: 6 Create boot environment: No Create backup boot environment: No Services to change: 1 DOWNLOAD PKGS FILES XFER (MB) SPEED Completed 6/6 15897/15897 329.3/329.3 3.0M/s PHASE ITEMS Installing new actions 16957/16957 Updating package state database Done Updating image state Done Creating fast lookup database Done root@mgm:~#後はcloneで増産
global-zone ~ # zoneadm -z mgm shutdown global-zone ~ # zoneadm -z sql1 clone mgm global-zone ~ # zoneadm -z sql2 clone mgm global-zone ~ # zoneadm -z data1 clone mgm global-zone ~ # zoneadm -z data2 clone mgm global-zone ~ # zoneadm -z sql1 boot global-zone ~ # zoneadm -z sql2 boot global-zone ~ # zoneadm -z data1 boot global-zone ~ # zoneadm -z data2 boot global-zone ~ # zlogin -C sql1 global-zone ~ # zlogin -C sql2 global-zone ~ # zlogin -C data1 global-zone ~ # zlogin -C data2 global-zone ~ # zoneadm -z mgm boot全部揃うとこんな感じでゾーンが稼働中
ID NAME STATUS PATH BRAND IP 0 global running / solaris shared 3 iichiko2-spec running /rpool/zones/iichiko2-spec solaris shared 10 sql1 running /rpool/zones/sql1 solaris shared 11 sql2 running /rpool/zones/sql2 solaris shared 12 data1 running /rpool/zones/data1 solaris shared 13 data2 running /rpool/zones/data2 solaris shared 14 mgm running /rpool/zones/mgm solaris shared
ここからMySQL Clusterの設定
マネージメントサーバーの設定
global-zone ~ # zlogin mgm root@mgm:~# cp /etc/mysql/7.4/ndb-mgmd_74.config.sample /etc/mysql/config.ini root@mgm:~# svcadm enable svc:/application/database/ndb-mgmd_74:default root@mgm:~# ls -l /var/mysql/7.4/mgm/ total 7 -rw-r--r-- 1 mysql mysql 5 2015-05-07 08:03 ndb_1.pid -rw-r--r-- 1 mysql mysql 687 2015-05-07 08:03 ndb_1_cluster.log -rw-r--r-- 1 mysql mysql 4380 2015-05-07 08:03 ndb_1_config.bin.1 -rw-r--r-- 1 mysql mysql 81 2015-05-07 08:03 ndb_1_out.log root@mgm:~#
とりあえずこんな感じで動く、他のゾーンはまだ動いてないよ
root@mgm:~# ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> show Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=4 (not connected, accepting connect from 192.168.254.83) id=5 (not connected, accepting connect from 192.168.254.84) [ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.254.80 (mysql-5.6.24 ndb-7.4.6) [mysqld(API)] 2 node(s) id=2 (not connected, accepting connect from 192.168.254.81) id=3 (not connected, accepting connect from 192.168.254.82) ndb_mgm>各ゾーンのIPとIDが重要なので、変更する場合は各自で調整してください
data1の設定
IDがプロセスIDのpidファイル名に含まれてしまうので、ここは調整しておく
global-zone ~ # zlogin data1 root@data1:~# cp /etc/mysql/7.4/ndb-ndbmtd_74.my.cnf.ndb /etc/mysql/my.cnf root@data1:~# svcprop svc:/application/database/ndb-ndbmtd_74:default | grep pid ndb-ndbmtd_74/pid astring /var/mysql/7.4/data/ndb_5.pid root@data1:~# svccfg -s svc:/application/database/ndb-ndbmtd_74:default setprop ndb-ndbmtd_74/pid="/var/mysql/7.4/data/ndb_4.pid" root@data1:~# svcadm refresh svc:/application/database/ndb-ndbmtd_74:default root@data1:~# svcadm enable svc:/application/database/ndb-ndbmtd_74:default root@data1:~# ls -l /var/mysql/7.4/data/ total 4 -rw-r--r-- 1 mysql mysql 5 2015-05-07 08:08 ndb_4.pid -rw-r--r-- 1 mysql mysql 2227 2015-05-07 08:08 ndb_4_out.log root@data1:~#
data2の設定
global-zone ~ # zlogin data2 root@data2:~# cp /etc/mysql/7.4/ndb-ndbmtd_74.my.cnf.ndb /etc/mysql/my.cnf root@data2:~# svcprop svc:/application/database/ndb-ndbmtd_74:default | grep pid ndb-ndbmtd_74/pid astring /var/mysql/7.4/data/ndb_5.pid root@data2:~# svcadm enable svc:/application/database/ndb-ndbmtd_74:default root@data2:~# svcs -xv root@data2:~# ls -l /var/mysql/7.4/data/ total 4 -rw-r--r-- 1 mysql mysql 5 2015-05-07 08:10 ndb_5.pid -rw-r--r-- 1 mysql mysql 2227 2015-05-07 08:10 ndb_5_out.log root@data2:~#sql1の設定
global-zone ~ # zlogin sql1 [Connected to zone 'sql1' pts/3] Oracle Corporation SunOS 5.11 11.1 September 2012 root@sql1:~# cp /etc/mysql/7.4/ndb-sql_74.my.cnf.sql /etc/mysql/my.cnf root@sql1:~# svcadm enable svc:/application/database/ndb-sql_74:default ...ちょっと時間がかかります svcs -xvでエラーがでなければOKです root@sql1:~# svcs -xv root@sql1:~# root@sql1:~# ls -l /var/mysql/7.4/data/ total 110641 -rw-rw---- 1 mysql mysql 56 2015-05-07 08:13 auto.cnf -rw-rw---- 1 mysql mysql 50331648 2015-05-07 08:13 ib_logfile0 -rw-rw---- 1 mysql mysql 50331648 2015-05-07 08:12 ib_logfile1 -rw-rw---- 1 mysql mysql 12582912 2015-05-07 08:13 ibdata1 drwx------ 2 mysql mysql 81 2015-05-07 08:12 mysql drwx------ 2 mysql mysql 63 2015-05-07 08:12 ndbinfo drwx------ 2 mysql mysql 55 2015-05-07 08:12 performance_schema -rw-r----- 1 mysql mysql 3536 2015-05-07 08:14 sql1.err -rw-rw---- 1 mysql mysql 3 2015-05-07 08:13 sql1.pid drwx------ 2 mysql mysql 2 2015-05-07 08:12 test root@sql1:~#sql2の設定
global-zone ~ # zlogin sql2 [Connected to zone 'sql2' pts/3] Oracle Corporation SunOS 5.11 11.1 September 2012 root@sql2:~# cp /etc/mysql/7.4/ndb-sql_74.my.cnf.sql /etc/mysql/my.cnf root@sql2:~# svcadm enable svc:/application/database/ndb-sql_74:default root@sql2:~# ls -l /var/mysql/7.4/data/ total 110641 -rw-rw---- 1 mysql mysql 56 2015-05-07 08:16 auto.cnf -rw-rw---- 1 mysql mysql 50331648 2015-05-07 08:16 ib_logfile0 -rw-rw---- 1 mysql mysql 50331648 2015-05-07 08:15 ib_logfile1 -rw-rw---- 1 mysql mysql 12582912 2015-05-07 08:16 ibdata1 drwx------ 2 mysql mysql 81 2015-05-07 08:15 mysql drwx------ 2 mysql mysql 63 2015-05-07 08:15 ndbinfo drwx------ 2 mysql mysql 55 2015-05-07 08:15 performance_schema -rw-r----- 1 mysql mysql 3575 2015-05-07 08:16 sql2.err -rw-rw---- 1 mysql mysql 4 2015-05-07 08:16 sql2.pid drwx------ 2 mysql mysql 2 2015-05-07 08:15 test root@sql2:~#
SQLノードでクラスタ利用可能か確認
sql1、sql2のどちらのSQLノードでもいいのでzloginし、mysqlコマンドで利用可能なストレージエンジンを確認してみる。
sol11-1dev ~ # zlogin sql1 [Connected to zone 'sql1' pts/5] Oracle Corporation SunOS 5.11 11.1 September 2012 root@sql1:~# mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.24-ndb-7.4.6 MySQL Community Server (GPL) Copyright (c) 2000, 2015, 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 engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | ndbcluster | YES | Clustered, fault-tolerant tables | YES | NO | NO | | CSV | YES | CSV 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 | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | ndbinfo | YES | MySQL Cluster system information storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 11 rows in set (0.00 sec) mysql>「ndbcluster」ストレージエンジンが「YES」なら利用可能、この時点で感動していいレベル
クラスターを起動させる
まだデータノードは「not started」、SQLノードも「not connected」です。
これを起動するには「ALL START」コマンドで起動する、データノードのサービス開始をマネージメントノードから実行するように、データノードのmy.cnfに書いてあるので、データノードのサービススタートと同時にデーターノードが走り出さないような設定にしてあります。
ndb_mgm> ALL START Node 4: Started (version 7.4.6) Node 5: Started (version 7.4.6) ndb_mgm> ndb_mgm> show Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=4 @192.168.254.83 (mysql-5.6.24 ndb-7.4.6, Nodegroup: 0, *) id=5 @192.168.254.84 (mysql-5.6.24 ndb-7.4.6, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.254.80 (mysql-5.6.24 ndb-7.4.6) [mysqld(API)] 2 node(s) id=2 @192.168.254.81 (mysql-5.6.24 ndb-7.4.6) id=3 @192.168.254.82 (mysql-5.6.24 ndb-7.4.6) ndb_mgm>データノードへ*マークついて無事起動確認、データノード2台で1グループの設定で動作を確認できます(nodegroup 0)、SQLノードも接続できてます。
使ってみる
まずは簡単なことから始める、sql1ゾーンでクラスタ用テーブルをつくってみる、テーブルを作るときに「NDB」を指定して作成する。
root@sql1:~# mysql -u root ... ... mysql> CREATE DATABASE IICHIKODB; Query OK, 1 row affected (0.06 sec) mysql> use IICHIKODB Database changed mysql> create table cava_club_user(id BIGINT PRIMARY KEY, name VARCHAR(256)) ENGINE NDB; Query OK, 0 rows affected (0.42 sec) mysql> INSERT INTO cava_club_user(id, name) VALUES('1', 'Kazuto'); Query OK, 1 row affected (0.01 sec) mysql>sql2ゾーンで先ほど入れたデータを確認してみる
root@sql2:~# mysql -u root ... ... mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | IICHIKODB | | mysql | | ndbinfo | | performance_schema | | test | +--------------------+ 6 rows in set (0.00 sec) mysql> mysql> use IICHIKODB Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> SELECT * FROM cava_club_user; +----+--------+ | id | name | +----+--------+ | 1 | Kazuto | +----+--------+ 1 row in set (0.00 sec) mysql>すばらしい、細かいことは抜きにしてとりあえずデータのクラスタ化が確認できる。
こういったシステムは運用がしっかりしていないと大変な感じがしましたね、でもその辺がノウハウであるとも思いますが、PHP書きながら片手間で触るようなシステムではないようです(笑)...
0 件のコメント:
コメントを投稿