mysql spider engineを2台のマシンで利用する
いろいろな制約の元で2台のマシンが手元で使えます。
で、こいつらでブログを立ち上げたいんですが、
- web x 2 + db x 2(master + slave)
ってできると気持いいけど、2台しかマシンはもらえない。
- (web + db.master) + (web + db.slave)
ってのも、負荷分散を考えると(一般的かどうかは別として)気持ちは良くない
ということで
という構成でspiderを組んでみることにしました。
とりあえず最初は漢(オトコ)のコンピュータ道: HA化機能を手に入れたSPIDERストレージエンジンにはもはや死角はなかった。を参考にちゃちゃっと組んで様子見をしました。
材料
- 1. CentOS 5.3 x 2 (hoge001とhoge002とします。両方で処理する場合はなにも書きません)
- 2. http://launchpad.net/spiderformysql/spider-2.x/2.23-for-5.1.44/+download/spider-init-2.23-for-5.1.44.tgz:title:spider for mysql
- 3. http://mysqlsandbox.net/:title:MySQL::Sandbox
- disk性能とかは設定ファイルでいじれるので、削除追加がご自由なsandboxでやります
下ごしらえ (基本的なmysql)
- 1. 入手
$ wget http://launchpad.net/spiderformysql/spider-2.x/2.23-for-5.1.44/+download/mysql-5.1.44-spider-2.23-vp-0.12-linux-i686-glibc23.tgz $ wget http://launchpad.net/spiderformysql/spider-2.x/2.23-for-5.1.44/+download/spider-src-2.23-for-5.1.44.tgz $ su # cpan MySQL::Sandbox # exit $
- 2. sandbox上で展開
$ mv mysql-5.1.44-spider-2.23-vp-0.12-linux-i686-glibc23.tgz mysql-5.1.44-spider-2.23-vp-0.12-linux-i686-glibc23.tar.gz $ make_multiple_sandbox --how_many_nodes=4 mysql-5.1.44-spider-2.23-vp-0.12-linux-i686-glibc23.tar.gz
- 3. ネットワーク周り: iptablesを良きに->netstatで確認, hostsいじる
- 4. mysqlのsandbox立ち上げる
$ cd sandbox/multi_msb_5_1_44/ $ ./start_all
- 5. Grantする
$ MYCLIENT_OPTIONS="-uroot" ./use_all 'grant all privileges on *.* to msandbox@"%" identified by "msandbox" with grant option;'
- 6. 外部からつないでみる
hoge002$ telnet hoge001 16545 Trying XXX.XXX.XXX.XXX... Connected to hoge001 (XXX.XXX.XXX.XXX). Escape character is '^]'. 8 5.1.44-log*B+O.5^]?p9i&|bXnCBa > quit $ $ mysql -umsandbox -P16545 -hhoge001 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 5.1.44-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
- うっかり、権限が無いところにtar.gzを置くとsandboxはsrcの場所で解凍を始めるらしく死ぬほどパーミションで怒られます
- 外部接続でport変更(といってもsandboxのデフォルト)を指定し忘れてはまりました
- $HOME/sandbox/multi_msb_5_1_44配下の実行ファイルはこんな感じ
$ls ./ check_slaves install_spider.sql mysql-5.1.44.spider.diff n2 n4 node2 node4 send_kill_all start_all stop_all clear_all mysql-5.1.44.slave-trx-retry.diff n1 n3 node1 node3 restart_all spider status_all use_all
-
- how_many_nodesで指定した数のノードがnode1~4にあり、それぞれに設定ファイル(my.sandbox.cnf)とかが入ってる
- node1~4には他にmysql相当のもの(node*/use)や、start/stop/restart/statusなんかが入ってる。全部shell scriptだから読めばすぐわかる
- n1~4はnode1~4/useと同じ
- *_allは全部のノードに対してそれぞれの配下のstartとかを叩くのと同じ
- use_allは全部のノードに対して-eするのと同じ
- 「mysql -uroot」的な気分でオプションを渡せないので、渡したい場合はMYCLIENT_OPTIONSで指定する
手順
- 1. spiderの初期化スクリプト
$ tar zxvf spider-src-2.23-for-5.1.44.tgz -C $HOME/sandboxes/multi_msb_5_1_44/ $ ./use_all 'source install_spider.sql'
- 2. VPストレージエンジンのインストール
$ ./use_all "install plugin vp soname 'ha_vp.so'" $ ./use_all "create function vp_copy_tables returns int soname 'ha_vp.so'; "
- 3. リモートホストの登録
- とりあえず今回はmon+select系を「f」と、実データを保持するのを「d」とします
./use_all "CREATE SERVER f1 FOREIGN DATA WRAPPER mysql OPTIONS (USER 'msandbox', PASSWORD 'msandbox', HOST 'hoge001', PORT 16545); CREATE SERVER f2 FOREIGN DATA WRAPPER mysql OPTIONS (USER 'msandbox', PASSWORD 'msandbox', HOST 'hoge001', PORT 16546); CREATE SERVER f3 FOREIGN DATA WRAPPER mysql OPTIONS (USER 'msandbox', PASSWORD 'msandbox', HOST 'hoge002', PORT 16545); CREATE SERVER f4 FOREIGN DATA WRAPPER mysql OPTIONS (USER 'msandbox', PASSWORD 'msandbox', HOST 'hoge002', PORT 16546); CREATE SERVER d5 FOREIGN DATA WRAPPER mysql OPTIONS (USER 'msandbox', PASSWORD 'msandbox', HOST 'hoge001', PORT 16547); CREATE SERVER d6 FOREIGN DATA WRAPPER mysql OPTIONS (USER 'msandbox', PASSWORD 'msandbox', HOST 'hoge001', PORT 16558); CREATE SERVER d7 FOREIGN DATA WRAPPER mysql OPTIONS (USER 'msandbox', PASSWORD 'msandbox', HOST 'hoge002', PORT 16557); CREATE SERVER d8 FOREIGN DATA WRAPPER mysql OPTIONS (USER 'msandbox', PASSWORD 'msandbox', HOST 'hoge002', PORT 16558)"
終わり
と、まあ、ここまでやると、漢のコンピューター道さんで書かれているように、モニタリングノードの定義、実データ「d」でのテーブル定義、と「f」でのspiderエンジンテーブルの定義を済ませてしまえば終わりなわけです。
1台に8ノードを立ち上げるのも、2台に合計8ノード立ち上げるのも同じでした。
後は、partitionとして、必ずd5とd7、d6とd8がペアになるように組めば、単ホスト障害に対して耐性を担保できるので、SPOFが消えると。幸せ幸せ。
パフォーマンスがどうなるかは気になるのでもう少しいじります。