前回の記事で無事にMySQL Fabric Cache Pluginでマスター/スレーブの構成をMySQL Fabricに管理させつつ、コネクションはMySQL Routerでハンドルさせることができたので、みなさんそろそろ
「MySQL Router つらくない!」
「MySQL Fabircつらいけど 試してみたい!」
とテンションが上がっているところだと思います。
お願いします、上げてください。
日々の覚書: MySQL Routerつらくない(MySQL Fabricと組み合わせて使ってみる編)
という訳で、このアドベントカレンダーのために用意した一連のDockerイメージ群を紹介します。
「MySQL Router つらくない!」
「MySQL Fabirc
とテンションが上がっているところだと思います。
お願いします、上げてください。
日々の覚書: MySQL Routerつらくない(MySQL Fabricと組み合わせて使ってみる編)
という訳で、このアドベントカレンダーのために用意した一連のDockerイメージ群を紹介します。
- yoku0825/mysql_fabric_server
- https://github.com/yoku0825/docker_for_mysqlfabric/tree/master/Dockerfile/mysql_fabric_server
- MySQL Fabricのサーバー。
- mysqlfabric(デーモン)
- 初期アカウントは一応 admin/admin
- ただしdisable_authentication= yesにしてあるのでどんな組み合わせでも認証が通る
- mysqld
- MySQL Fabricが構成情報を保存するためのバッキングストア
- パスワードなしのroot@'%'
- パスワードなしのfabric@localhost
- yoku0825/mysql_fabric_aware
- https://github.com/yoku0825/docker_for_mysqlfabric/tree/master/Dockerfile/mysql_fabric_aware
- MySQL Fabricに *管理される側の* MySQLサーバー
- gtid_mode= ON, enforce_gtid_consistency= ON
- --auto-server-id という独自オプションをmysqld_safeにパッチしてある
- IPアドレスからserver_idを自動生成するようにした
- なので起動するだけでMySQL Fabricに登録することができる
- パスワードなしのroot@'%'
- パスワードなしのfabric@'%'
- パスワードなしのap@'%'
- apスキーマに対して権限のあるユーザー。Superなし。
- yoku0825/mysql_fabric_command
- https://github.com/yoku0825/docker_for_mysqlfabric/tree/master/Dockerfile/mysql_fabric_command
- コマンドラインクライアントとしてmysqlfabric
- disable_authentication= yesだけしてある
- MySQL Utilitiesのインストールすら面倒になったので
- yoku0825/mysql_router
- https://github.com/yoku0825/docker_for_mysqlfabric/tree/master/Dockerfile/mysql_router
- MySQL Router
- デフォルトの /etc/mysqlrouter/mysqlrouter.ini にはルーティングセクションを書いていなくて、それと別に /tmp/setup/router.ini を読み込むようなENTRYPOINTにしてあるので、 `docker run -v`でそっちをマウントしてあげて読み込ませるイメージ
さてじゃあ使い方。真っ新なAmazon Linux AMI 2015.09.1のEC2のインスタンスを20GBのEBSで起動したところからなので、他の環境でもほぼ応用が利くはず。
まずはMySQL Fabricサーバー(mysqlfabricのデーモン(いやフォアグラウンドだけど)とバッキングストアのmysqld)を起動。
まずはMySQL Fabricサーバー(mysqlfabricのデーモン(いやフォアグラウンドだけど)とバッキングストアのmysqld)を起動。
# yum install docker # service docker start # docker run -d --hostname=mysql-fabric --name mysql_fabric_server yoku0825/mysql_fabric_server .. # docker inspect -f "{{.Config.Hostname}}, {{.NetworkSettings.IPAddress}}" mysql_fabric_server mysql-fabric, 172.17.0.1
次にMySQL Fabricにすぐ組み込める状態になっているMySQLサーバーを3台起動。
# docker run -d --hostname=mysql-server1 --name mysql_server1 yoku0825/mysql_fabric_aware .. # docker run -d --hostname=mysql-server2 --name mysql_server2 yoku0825/mysql_fabric_aware .. # docker run -d --hostname=mysql-server3 --name mysql_server3 yoku0825/mysql_fabric_aware .. # docker inspect -f "{{.Config.Hostname}}, {{.NetworkSettings.IPAddress}}" $(docker ps | awk '/mysql_fabric_aware/{print $1}') mysql-server3, 172.17.0.4 mysql-server2, 172.17.0.3 mysql-server1, 172.17.0.2
コマンドラインクライアントとしてのmysqlfabricも`docker run`で起動。MySQL Utilitiesをインストールしなくても試せる! つらくない!
`mysqlfabric group create`でmy_new_fabricというグループを作成。
# docker run --rm yoku0825/mysql_fabric_command --param=protocol.xmlrpc.address=172.17.0.1:32274 group create my_new_fabric .. Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 uuid finished success result ------------------------------------ -------- ------- ------ 69700c6c-bbd2-4371-9940-1c4e1e0c259a 1 1 1 state success when description ----- ------- ------------- ------------------------------------------------------------- 3 2 1.45008e+09 Triggered by <mysql.fabric.events.Event object at 0x25af890>. 4 2 1.45008e+09 Executing action (_create_group). 5 2 1.45008e+09 Executed action (_create_group).
MySQL Fabricサーバーにグループが作成できたら、Fabric-awareなMySQL(MySQL Fabricで管理される側のサーバーをそんな風に呼ぶらしい。正しくないかも知れない)を1つずつ3つ追加。
# docker run --rm yoku0825/mysql_fabric_command --param=protocol.xmlrpc.address=172.17.0.1:32274 group lookup_groups Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 group_id description failure_detector master_uuid ------------- ----------- ---------------- ----------- my_new_fabric None 0 None # docker run --rm yoku0825/mysql_fabric_command --param=protocol.xmlrpc.address=172.17.0.1:32274 group add my_new_fabric 172.17.0.2 .. # docker run --rm yoku0825/mysql_fabric_command --param=protocol.xmlrpc.address=172.17.0.1:32274 group add my_new_fabric 172.17.0.3 .. # docker run --rm yoku0825/mysql_fabric_command --param=protocol.xmlrpc.address=172.17.0.1:32274 group add my_new_fabric 172.17.0.4 .. # docker run --rm yoku0825/mysql_fabric_command --param=protocol.xmlrpc.address=172.17.0.1:32274 group lookup_servers my_new_fabric Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 server_uuid address status mode weight ------------------------------------ --------------- --------- --------- ------ 14f81155-a23b-11e5-aa7e-0242ac110002 172.17.0.2:3306 SECONDARY READ_ONLY 1.0 15548339-a23b-11e5-aa35-0242ac110003 172.17.0.3:3306 SECONDARY READ_ONLY 1.0 1591026a-a23b-11e5-aa28-0242ac110004 172.17.0.4:3306 SECONDARY READ_ONLY 1.0
登録できたら、1台をマスターに昇格させる。`mysqlfabric group promote`してやると、1台をマスターに、それ以外をそのマスターのスレーブにするように構成してくれるので、
# docker run --rm yoku0825/mysql_fabric_command --param=protocol.xmlrpc.address=172.17.0.1:32274 group promote my_new_fabric .. docker run --rm yoku0825/mysql_fabric_command --param=protocol.xmlrpc.address=172.17.0.1:32274 group lookup_servers my_new_fabric Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 server_uuid address status mode weight ------------------------------------ --------------- --------- ---------- ------ 14f81155-a23b-11e5-aa7e-0242ac110002 172.17.0.2:3306 SECONDARY READ_ONLY 1.0 15548339-a23b-11e5-aa35-0242ac110003 172.17.0.3:3306 SECONDARY READ_ONLY 1.0 1591026a-a23b-11e5-aa28-0242ac110004 172.17.0.4:3306 PRIMARY READ_WRITE 1.0
はい、これでMySQL Fabric側完成。
# cat mysqlrouter.ini [fabric_cache:docker_demo] address = 172.17.0.1 user = admin [routing:master] bind_address= 0.0.0.0:13306 mode = read-write destinations= fabric+cache://docker_demo/group/my_new_fabric [routing:slave] bind_address= 0.0.0.0:23306 mode = read-only destinations= fabric+cache://docker_demo/group/my_new_fabric
mysqlrouter.iniはルーティング部分がDockerイメージに組み込まれてない(docker build時に指定すると固定になっちゃう && パラメーターではなくiniファイルで指定しないといけないぽい)ので、iniファイルを適当に作ってやって
日々の覚書: MySQL Routerつらくない(MySQL Fabricと組み合わせて使ってみる編)
# docker run -d -v /root/mysqlrouter.ini:/tmp/setup/router.ini yoku0825/mysql_router .. # docker inspect -f "{{.Config.Hostname}}, {{.NetworkSettings.IPAddress}}" mysql-router mysql-router, 172.17.0.17
あとはMySQL Routerの指定したポート(↑の場合は13306がマスター用のread-writeモード、23306がスレーブ用のread-onlyモード)を叩いてやれば
# mysql -h 172.17.0.17 -P 13306 -u ap mysql> SELECT @@hostname; +---------------+ | @@hostname | +---------------+ | mysql-server3 | +---------------+ 1 row in set (0.00 sec) # docker run --rm yoku0825/mysql_fabric_command --param=protocol.xmlrpc.address=172.17.0.1:32274 group lookup_servers my_new_fabric Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 server_uuid address status mode weight ------------------------------------ --------------- --------- ---------- ------ 14f81155-a23b-11e5-aa7e-0242ac110002 172.17.0.2:3306 SECONDARY READ_ONLY 1.0 15548339-a23b-11e5-aa35-0242ac110003 172.17.0.3:3306 SECONDARY READ_ONLY 1.0 1591026a-a23b-11e5-aa28-0242ac110004 172.17.0.4:3306 PRIMARY READ_WRITE 1.0
ちゃんと一致してますね! (mysql-server$nとIPアドレスの末尾1バイトが微妙にズレてるので見にくかった。。)
これで誰でもMySQL Routerで遊べる! つらくない!
このへんとかも合わせてご利用ください。 https://github.com/yoku0825/docker_for_mysqlfabric/blob/master/start_3container_fabric.sh
看不懂啊
返信削除