2015年12月1日火曜日

MySQL Routerはつらくない。何故ならまだ触っていないからだ。

この記事は MySQL Casual Advent Calendar 2015 の1日目です。
MySQL Fabric&Routerつらくない Advent Calendar 2015 の1日目でもあります。

さて…昨年あんなにも MySQL Fabric関連のブログ を書いたのに、少なくとも2015/12/1現在、MySQL Fabricがちっとも流行ってないのは何故だろうとか考えてみました。

  1. Fabric対応コネクターが必要
  2. MySQL 5.6以上かつGTIDが必要
  3. バッキングストア(mysqlfabricデーモンが情報をストアするためのmysqld)を自前で冗長化しないといけない
  4. ググったら 「MySQL Fabric つらい」 とかサジェストされる
やっぱり1ですかね。いや、あるにはあるんですが、俺(と、俺の勤めている会社)の利用可能な範囲になくて、Connecto/J, Connector/Python がサポートされてるし…おや、 去年からずっと思ってた んですが相変わらずConnector/.NETがサポートしてるはずなのに書いてないぞ。。

肝心のConnector/C (DBD::mysqlはコイツ依存)はまだLabsにいるし、mysqlndのMySQL Fabricも2015/12/1現在でまだ"pre-alpha"ってことになってる(シャード機能には対応してるけどHA機能には対応してない…とか1年前には書いてあったけど、HA機能に対応した素振りもなければ対応してないとも書いてなくなった。。)


でも。2015年10月。
MySQL 5.7のGA と同時にMySQL Router のGAも発表されました(されたんですよ!)
このMySQL Router、ちょっと話を聞いてみた限りだと、

  • MySQL ProxyみたいにmysqlrouterがポートをLISTENして、実際の処理はバックエンドのMySQL Serverに投げる
  • MySQL Fabricのクライアントになれる(MySQL RouterがFabric対応Connectorの代わりにマスターやシャードの在り処の問い合わせをしてキャッシュしてくれる。アプリからはMySQL Routerにクエリーを投げればそれだけでMySQL Fabric無双)
  • プラグインを書けば他にもゴニョれる

MySQL Fabricのクライアントになって、MySQL Fabric非対応コネクターのクエリーもルーティングしてくれるということで、これで 自分でゴニョったDBD::mysql を使わなくてもMySQL Fabricが試せると。つらくない!


という訳でまずは試しなのでソースからビルドしてみることにしましょう。ダウンロードページは ここ


$ wget http://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-2.0.2.tar.gz
$ tar xf mysql-router-2.0.2.tar.gz
$ cd mysql-router-2.0.2
$ cmake -i
..
Variable Name: ROUTER_CONFIGDIR
Description: Location of configuration file(s) (config_folder)
Current Value: /usr/local/etc/mysqlrouter
New Value (Enter to keep current value):

Variable Name: ROUTER_LOGDIR
Description: Location of log files; empty is console (logging_folder)
Current Value: /var/local/mysqlrouter/log
New Value (Enter to keep current value):

Variable Name: ROUTER_PLUGINDIR
Description: Location MySQL Router plugins (plugin_folder)
Current Value: /usr/local/lib/mysqlrouter
New Value (Enter to keep current value):

Variable Name: ROUTER_RUNTIMEDIR
Description: Location runtime files such as PID file (runtime_folder)
Current Value: /var/local/mysqlrouter/run
New Value (Enter to keep current value):
..

取り敢えずcmakeしてみて思うことは、ちょっとあっちこっち散らばり過ぎじゃないですかねディレクトリ。
あとはいつもビルドに使うようなモジュールの他にDoxygenが必要だよって言われてみたりする。
Doxygenを入れたらCMakeCache.txtを消してからもう一度cmakeして、さあいざ


$ make
[  2%] Building CXX object harness/harness/CMakeFiles/harness-archive.dir/src/loader.cc.o
cc1plus: error: unrecognized command line option "-Wpedantic"
make[2]: *** [harness/harness/CMakeFiles/harness-archive.dir/src/loader.cc.o] Error 1
make[1]: *** [harness/harness/CMakeFiles/harness-archive.dir/all] Error 2
make: *** [all] Error 2

あっ! これ確かLabsの時にも引っかかったやつだ! つらくない!



メッセージはちょっと違ったっぽいけど。


$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ sudo wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
$ sudo yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++
$ scl enable devtoolset-2 bash

CentOS 6.5にGCC 4.8.2をレポジトリで入れてみた - 以下省略! こちら様を参考にしてgcc-4.8.2を放り込んで、cmakeのオプションに渡してやると

$ rm CMakeCache.txt
$ cmake -DCMAKE_CXX_COMPILER:FILEPATH=/opt/rh/devtoolset-2/root/usr/bin/g++ CMAKE_C_COMPILER:FILEPATH=/opt/rh/devtoolset-2/root/usr/bin/gcc .
$ make
..
Linking CXX executable ../../../stage/bin/mysqlrouter
[100%] Built target mysqlrouter

通ったー! やっと通ったー!

なお、ここまで(前に引っかかったにも関わらず)1時間かかっている。Labsの時にあった `cmake .`でインソースビルドできないやつ も直ってるけど、rpmで入れればよかった。でもrpmという選択肢がある時点でつらくない!



( ´-`).oO(MySQL Fabric&Routerつらくない Advent Calendar 2015 は明日からコメント欄127文字運用になる予定ですが続きます。

0 件のコメント :

コメントを投稿