何がどうイケてないかというと、クライアントとしての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】↑リポジトリとリンク張り替えた