2014年12月25日木曜日

MySQL Fabricつらい(クライアントとしてのmysqlfabricとサーバーとしてのmysqlfabricのオプションの扱いが一緒)

/etc/mysql/fabric.cfg はイケてない。
何がどうイケてないかというと、クライアントとしてのmysqlfabricとサーバーとしてのmysqlfabricを全く区別していないところ。

最初に(そしてこれは随分前から)気が付いたのは、[protocol.xmlrpc]セクションと[protocol.mysql]セクションのdisable_authentication。

[protocol.xmlrpc]
disable_authentication = no


デフォルトはnoだが、認証を無効化したいと思うとyesにする。
だがしかしこれ、サーバーとして起動されたときとクライアントとして起動されたときで同じパラメーターを使っているため、MySQL Fabricサーバーが起動している最中に書き換えたりすると(サーバーは再起動するまでその内容が有効にならないので)、結構アレってなる。

それはいい。それは全然いい。困らない。


だがこれはつらい。


$ less /etc/mysql/fabric.cfg
..
[protocol.xmlrpc]
..
address = localhost:32274
..

$ mysqlfabric manage start
[INFO] 1419482563.650106 - MainThread - Initializing persister: user (backingstore), server (localhost:3306), database (fabric).
[WARNING] 1419482563.670879 - MainThread - Provider error: No module named novaclient.
[INFO] 1419482563.671135 - MainThread - Loading Services.
[WARNING] 1419482563.686219 - MainThread - Authentication disabled
[INFO] 1419482563.686369 - MainThread - MySQL-RPC protocol server started, listening on localhost:32275
[WARNING] 1419482563.686489 - MainThread - Authentication disabled
[INFO] 1419482563.695672 - MainThread - Fabric node starting.
[INFO] 1419482563.698753 - MainThread - Starting Executor.
[INFO] 1419482563.698855 - MainThread - Setting 5 executor(s).
[INFO] 1419482563.699274 - Executor-0 - Started.
[INFO] 1419482563.701372 - Executor-1 - Started.
[INFO] 1419482563.702225 - Executor-2 - Started.
[INFO] 1419482563.703481 - Executor-3 - Started.
[INFO] 1419482563.705299 - Executor-4 - Started.
[INFO] 1419482563.705777 - MainThread - Executor started.
[INFO] 1419482563.710501 - MainThread - Starting failure detector.
[INFO] 1419482563.711543 - XML-RPC-Server - XML-RPC protocol server ('127.0.0.1', 32274) started.
[INFO] 1419482563.712189 - XML-RPC-Server - Setting 1 XML-RPC session(s).
[INFO] 1419482563.712714 - XML-RPC-Session-0 - Started XML-RPC-Session.

$ ss -ltp
State      Recv-Q Send-Q                             Local Address:Port                                 Peer Address:Port
LISTEN     0      0                                      127.0.0.1:32274                                           *:*        users:(("mysqlfabric",675,4))
LISTEN     0      0                                      127.0.0.1:32275                                           *:*        users:(("mysqlfabric",675,6))
LISTEN     0      0                                             :::mysql                                          :::*

[protocol.xmlrpc]セクションのaddressはmysqldでいうところの--bind-addressと--portをあわせたような用途で使われる。つまりが、address=localhost:32274で起動していると、127.0.0.1:32274で起動してしまうので、他のホストから叩けなくなる。しょんぼり。

なので当然、address=0.0.0.0:32274とかやるわけだ。


[INFO] 1419482742.772749 - MainThread - Initializing persister: user (backingstore), server (localhost:3306), database (fabric).
[WARNING] 1419482742.792821 - MainThread - Provider error: No module named novaclient.
[INFO] 1419482742.793089 - MainThread - Loading Services.
[WARNING] 1419482742.805074 - MainThread - Authentication disabled
[INFO] 1419482742.805208 - MainThread - MySQL-RPC protocol server started, listening on 0.0.0.0:32275
[WARNING] 1419482742.805334 - MainThread - Authentication disabled
[INFO] 1419482742.814918 - MainThread - Fabric node starting.
[INFO] 1419482742.818677 - MainThread - Starting Executor.
[INFO] 1419482742.818770 - MainThread - Setting 5 executor(s).
[INFO] 1419482742.819158 - Executor-0 - Started.
[INFO] 1419482742.819843 - Executor-1 - Started.
[INFO] 1419482742.821553 - Executor-2 - Started.
[INFO] 1419482742.822262 - Executor-3 - Started.
[INFO] 1419482742.825073 - Executor-4 - Started.
[INFO] 1419482742.825355 - MainThread - Executor started.
[INFO] 1419482742.829459 - MainThread - Starting failure detector.
[INFO] 1419482742.830409 - XML-RPC-Server - XML-RPC protocol server ('0.0.0.0', 32274) started.
[INFO] 1419482742.830877 - XML-RPC-Server - Setting 1 XML-RPC session(s).
[INFO] 1419482742.831168 - XML-RPC-Session-0 - Started XML-RPC-Session.

State      Recv-Q Send-Q                             Local Address:Port                                 Peer Address:Port
LISTEN     0      0                                              *:32274                                           *:*        users:(("mysqlfabric",702,4))
LISTEN     0      0                                              *:32275                                           *:*        users:(("mysqlfabric",702,6))
LISTEN     0      0                                             :::mysql                                          :::*

$ mysqlfabric group lookup_groups
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1

                  group_id description failure_detector master_uuid
-------------------------- ----------- ---------------- -----------
fabric_server_in_container        None                0        None


ここまではいい。
さて、じゃあ隣のノードからこのmysqlfabricサーバーを叩くにはどうしたらいいか?

そう、 *クライアント側のfabric.cfgの[protocol.xmlrpc]のaddressをここに指定する*


$ 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
-------------------------- ----------- ---------------- -----------
fabric_server_in_baremetal        None                0        None

$ vim /etc/mysql/fabric.cfg
..
[protocol.xmlrpc]
..
#address = localhost:32274
address = 172.17.0.144:32274
..

$ 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
-------------------------- ----------- ---------------- -----------
fabric_server_in_container        None                0        None




--paramオプションを使えば特定のオプションだけ上書きできるはずだから、わざわざ書き換えなくてもいいはずなんだけど、エラーメッセージも謎いし、受け取っても気に食わない形だとエラーも何もせずに読み飛ばしやがるので、全然わからない。

フンス。


【2014/12/25 14:04】
もともとは MySQL FabricのファームになれるようなDockerイメージを作ったやつ のついでに、だったらMySQL FabricサーバーそのものもDockerイメージにすればいいんじゃん? と思ってハマったのがこの記事だったり。

yoku0825/mysql_fabric_server ってイメージもつくりました。バッキングストアとMySQL Fabricサーバーがそのまま起動できるヤーツ。

【2015/01/02 16:43】↑リポジトリとリンク張り替えた

0 件のコメント :

コメントを投稿