* Fabricサーバーはファームに関する情報だけを提供して、
* 実際の接続のハンドルはFabric対応コネクターが提供する
Fabricサーバーがしゃべるプロトコルは2種類。XML-RPCとMySQLプロトコルで、問い合わせ結果はコネクター側にキャッシュされて、TTLによって破棄される(実際にはコネクターの実装に依存するんだろうけど)
現在MySQL Fabricに対応しているコネクターは
* Connector/Python (○racleさん謹製)
* Connector/J (○racleさん謹製)
* mysqlnd (PHPによるクライアント実装で、シャード機能のみ実験的にサポート(HA機能は(まだ?)サポートしない))
* Connector/C (○racleさん謹製だけどlabsリリース)
そして、Connector/Cが現在唯一FabricサーバーとMySQLプロトコルでしゃべる。
…ってか、
MYSQL mysql;https://blogs.oracle.com/mysqlconnectors-C/entry/using_fabric_with_connector_c
mysql_init(&mysql);
mysql_option(&mysql, MYSQL_OPT_USE_FABRIC, NULL);
mysql_real_connect(&mysql, "127.0.0.1", "user", "password",
NULL, 32275, NULL, 0);
( д ) ゚ ゚ え、mysql_real_connectで直接叩くの!? プロキシも直接兼ねる感じになるの!? (調べてない)
DBD::mysqlはlibmysqlclientを使ってるので、方式的にはこっちになるはず。他にlibmysqlclient使ってるのってなんかあったっけ。Rubyにも何かあった気がする(RubyのMySQLライブラリは名前がややこしすぎて憶えられない。。)
まあいいや。取り敢えず、コネクターのつもりになってXML-RPCでつついてみようという企画。
$ mysqlfabric group lookup_servers my_first_fabric Password for admin: Fabric UUID: 5ca1ab1e-a007-feed-f00d-cab3fe13249e Time-To-Live: 1 server_uuid address status mode weight ------------------------------------ --------------- --------- ---------- ------ 47cf54df-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20886 PRIMARY READ_WRITE 1.0 4b7036a9-63fc-11e4-942e-fa163e020fd0 127.0.0.1:20887 SECONDARY READ_ONLY 1.0 $ perl -MRPC::XML::Client -MData::Dumper -e '$client= RPC::XML::Client->new("http://localhost:32274/RPC2"); $request= RPC::XML::request->new("group.lookup_servers", RPC::XML::string->new("my_first_fabric")); print Dumper $client->send_request($request);' $VAR1 = 'RPC::XML::Client::send_request: HTTP server error: Unauthorized';
ありゃ、怒られた。そりゃそうか。認証があった。
$ perl -MRPC::XML::Client -MData::Dumper -e '$client= RPC::XML::Client->new("http://localhost:32274/RPC2"); $client->credentials("MySQL Fabric", "admin", "xxxx"); $request= RPC::XML::request->new("group.lookup_servers", RPC::XML::string->new("my_first_fabric")); print Dumper $client->send_request($request);' $VAR1 = 'RPC::XML::Client::send_request: HTTP server error: Bad Request';
Bad Request言われた(´・ω・`)
あんまり時間もかけたくないし、取り敢えずXML-RPC経由では認証要らない設定にして再起動。
$ mysqlfabric manage stop $ vim /etc/mysql/fabric.cfg .. [protocol.xmlrpc] disable_authentication = yes .. $ mysqlfabric manage start --daemonize
止める前に設定を変えてしまうと、クライアントとしてのmysqlfabric manage stopがそれを読んで認証をかっ飛ばそうとするので、まだ認証が有効なFabricサーバーがそれを蹴る。ので間にはさむ。
これでどうかというと
$ perl -MRPC::XML::Client -MData::Dumper -e '$client= RPC::XML::Client->new("http://localhost:32274/RP C2"); $client->credentials("MySQL Fabric", "admin", "xml"); $request= RPC::XML::request->new("group.lookup_servers", RPC::XML: :string->new("my_first_fabric")); print Dumper $client->send_request($request);' $VAR1 = bless( [ bless( do{\(my $o = '1')}, 'RPC::XML::int' ), bless( do{\(my $o = '5ca1ab1e-a007-feed-f00d-cab3fe13249e')}, 'RPC::XML::string' ), bless( do{\(my $o = '1')}, 'RPC::XML::int' ), bless( do{\(my $o = '')}, 'RPC::XML::string' ), bless( [ bless( { 'info' => bless( { 'names' => bless( [ bless( do{\(my $o = 'server_uuid')}, 'RPC::XML::string' ), bless( do{\(my $o = 'address')}, 'RPC::XML::string' ), bless( do{\(my $o = 'status')}, 'RPC::XML::string' ), bless( do{\(my $o = 'mode')}, 'RPC::XML::string' ), bless( do{\(my $o = 'weight')}, 'RPC::XML::string' ) ], 'RPC::XML::array' ) }, 'RPC::XML::struct' ), 'rows' => bless( [ bless( [ bless( do{\(my $o = '47cf54df-63fc-11e4-942e-fa163e020fd0')}, 'RPC::XML::string' ), bless( do{\(my $o = '127.0.0.1:20886')}, 'RPC::XML::string' ), bless( do{\(my $o = 'PRIMARY')}, 'RPC::XML::string' ), bless( do{\(my $o = 'READ_WRITE')}, 'RPC::XML::string' ), bless( do{\(my $o = '1.0')}, 'RPC::XML::double' ) ], 'RPC::XML::array' ), bless( [ bless( do{\(my $o = '4b7036a9-63fc-11e4-942e-fa163e020fd0')}, 'RPC::XML::string' ), bless( do{\(my $o = '127.0.0.1:20887')}, 'RPC::XML::string' ), bless( do{\(my $o = 'SECONDARY')}, 'RPC::XML::string' ), bless( do{\(my $o = 'READ_ONLY')}, 'RPC::XML::string' ), bless( do{\(my $o = '1.0')}, 'RPC::XML::double' ) ], 'RPC::XML::array' ) ], 'RPC::XML::array' ) }, 'RPC::XML::struct' ) ], 'RPC::XML::array' ) ], 'RPC::XML::array' );
よっしゃよっしゃ。
これでFabric非対応のコネクターからでもほげほげふがふができそう(認証さえ何とかすれば)
…やー、Fabricサーバー以外の追加コンポーネントがなしでできるからMySQL Fabricいいなーと思ってるのに、ゴニョゴニョするとか正直やりたくないけど。。
0 件のコメント :
コメントを投稿