mikasafabric for MySQLクイックスタート

ぬいぐるみが好きな方のDBAです。
mikasafabric for MySQLをオープンソースライセンスで公開しました で紹介した mikasafabric for MySQL(以下mikasafabric)のチュートリアルです。
決して社内向けのドキュメントを書くのが面倒になったからブログに書いている訳ではありません。なお、特に明記しない場合はmikasafabricとMySQL Fabricで手順は変わりませんので、オリジナルのMySQL Fabricのクイックスタートとしてもご利用いただけるようになっております。一粒で二度美味しい。
まず、mikasafabricはMySQL Fabricのクローンなので同じコンポーネントが必要になります。
- バッキングストアと呼ばれるmysqld
- mikasafabricデーモン(mysqlfabric)
mikasafabricなのにプロセス名がmysqlfabricなのは、MariaDBのプロセス名がmysqldなのと似たようなものだと思います。
MySQL Fabricと同じく python setup.py install
でインストールできますが、 mikasafabricのリポジトリー には mikasafabric.spec ファイルが含まれているので、CentOS 6.6くらい~CentOS 7.2くらいであればrpmファイルにしてしまった方が楽だと思います(setup.pyが容赦なく/usr/binとかに突っ込んでしまうので。。)
$ git clone https://github.com/gmo-media/mikasafabric.git
$ cd mikasafabirc
$ sudo python setup.py install
バッキングストアはMySQLであれば何でも良いはずです。5.7でしか動作確認はしていませんが、5.6でも動きます。弊社では標準的な構成としてバイナリーの.tar.gzを展開するスクリプトがあるのでそれを使っていますが、yumでも何でも構わないです。my.cnfの [mysqld] セクションに event_scheduler= ON
を設定しておいてあげてください。
バッキングストアのmysqldを起動したら、mikasafabric用のMySQLアカウントを作成します。
$ mysql -uroot -p
mysql> CREATE USER backingstore_user@127.0.0.1 IDENTIFIED BY 'backingstore_password';
Query OK, 0 rows affected (0.05 sec)
アカウント名とパスワードは任意です(/etc/mysql/fabric.cfgの[storage]セクションの中で指定します)。fabric.cfgには予め user= fabric が指定されていますが、mikasafabric がMySQLに接続するユーザーは複数あるため、混じらないようにバッキングストア用だとわかる名前にしました。
バッキングストアのユーザーには、mikasafabric用のスキーマ(これも/etc/mysql/fabric.cfgの[storage]セクションで指定します)に対する以下の権限が必要です。
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER
ぶっちゃけ、 GRANT ALL ON fabric.* TO backingstore_user@127.0.0.1
でいいと思います。ちなみに、mikasafabricは権限が足りないと起動時に怒りますが、MySQL Fabricは接続したDBにSELECT権限さえあれば黙って起動しやがります。はふん。
mysql> GRANT ALL ON fabric.* TO backingstore_user@127.0.0.1;
この時点では CREATE DATABASE
でmikasafabric用のスキーマは作成しま せん 。mysqlfabric manage setup
の中で作成しようとするので、先に作ってしまうと mysqlfabric manage setup
が転けます。
これでバッキングストア内の作業は終わりです。
/etc/mysql/fabric.cfg の [storage] セクションに、 user, password, database の情報を転記します。
$ sudo vim /etc/mysql/fabric.cfg
..
[storage]
address = localhost:3306
user = backingstore_user
password = backingstore_password
database = fabric
auth_plugin = mysql_native_password
connection_timeout = 6
connection_attempts = 6
connection_delay = 1
..
ウッパスワード平文…いつか何とかしたいところですが正直そこは本家MySQL Fabricが対応したらmikasafabricにもポートしたい、くらいの感じです。
fabric.cfgにバッキングストアの情報を転記したら、 mysqlfabric manage setup
でテーブルをセットアップします。
$ sudo mysqlfabric manage setup
[INFO] 2016-08-19 17:32:04,647 - MainThread - Initializing persister: user (backingstore_user), server (localhost:3306), database (fabric).
[WARNING] 2016-08-19 17:32:04,655 - MainThread - Backing store's event_scheduler is disabled. MySQL Fabric uses event_scheduler for deleting log-table.
[WARNING] 2016-08-19 17:32:06,986 - MainThread - Backing store's event_scheduler is disabled. MySQL Fabric uses event_scheduler for deleting log-table.
Finishing initial setup
=======================
Password for admin user is not yet set.
Password for admin/xmlrpc:
Repeat Password:
Password set.
Password set.
ワーニングが出た場合は注意してください。MySQL Fabricは全コマンドを何故かfabric.logテーブルにINSERTで記録します(mikasafabricは0.0.13現在、この機能を止めていますが)
もちろんこのログは定期的にパージされないといけないものですが、定期的にパージする仕組みはMySQLの event_scheduler に依存しています(mysqld内部にcrondみたいなものが入ってるやつです)
event_schedulerはデフォルトでOFFですが、ONにしておかないとこのログテーブルが簡単に溢れます。ちなみにこのワーニング、MySQL Fabricでは出ません。。orz
更にちなみに、MySQL Fabricでは登録されるイベントにバグがあり、event_schedulerがONでもログは消えません。。orz (mikasafabricは直してあります)
プロンプトに促されるままadminというユーザー(これはバッキングストアのものでも、ファームのものでもなく、mikasafabricの中のユーザーです)にパスワードを設定したら、セットアップは終わりです。mysqlfabric manage start
で起動します。
$ sudo mysqlfabric manage start --daemonize
$ mysqlfabric group lookup_groups
Password for admin:
Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1
group_id description failure_detector master_uuid
これでmikasafabricの設定が終わりました。
mikasafabricのデーモンはMHA for MySQLでいうマネージャープロセスに当たります。
コイツがファーム(MySQL Fabricでは 管理される側 のmysqldのことをファームと呼んでいるようです)の死活監視をしたり、マスター昇格を行ったりします。
なお、このあたりのことまでを一括で docker build
できるDockerfileを作ったつもりなのですが、なんかDocker Hubのautomated buildに失敗するので、そっとファイルだけこちらに置いておきます。。
https://github.com/yoku0825/docker_for_mysqlfabric/tree/master/Dockerfile/mikasafabric_server
次はファーム側mysqldの設定をしたいと思います。気力が続けば。