repcached の動作確認
http://lab.klab.org/wiki/Repcached#.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB
をほとんどそのままやってみた。
レプリケーション用のポート番号は -X で指定する。(default=11212)
まず一個目のセッションにて、以下。
$ /usr/local/bin/memcached -v -p 11212 -u mysql -X 11213 replication: listen
二個目のセッションにて、以下。
$ memcached -v -p 11214 -u mysql -x localhost -X 11213 replication: connect (peer=127.0.0.1:11213) replication: marugoto copying replication: start
二個目のインスタンスを立ち上げた時点で、一個目のほうにも、
replication: accept
と出る。(出なかったら繋がってない)
以下動作確認。まず、foo というキーを一個目に入れる。
$ telnet localhost 11212 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. set foo 0 0 3 bar STORED get foo VALUE foo 0 3 bar END quit
2個目でも foo が取れる。
$ telnet localhost 11214 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. get foo VALUE foo 0 3 bar END quit
2個目を殺してみる。
(ctrl-c) で殺す。 replication: cleanup start replication: close replication: cleanup complete
一個目で、
replication: close replication: listen
と表示される。
2個目を立ち上げなおすと、
$ memcached -v -p 11214 -u mysql -x localhost -X 11213 replication: connect (peer=127.0.0.1:11213) replication: marugoto copying replication: start
一個目で、
replication: accept replication: marugoto start replication: marugoto 2 replication: marugoto owari
と表示される。
立ち上げたばかりの二個目に接続して foo を取ってみる。
$ telnet localhost 11214 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. get foo VALUE foo 0 3 bar END
ちゃんと取れる。
同じ要領で、一個目を殺して、再起動、、、
※ -x localhost (レプリケーション先)を追加するのがポイント
(kill) # /usr/local/bin/memcached -v -p 11212 -u mysql -X 11213 -x localhost replication: connect (peer=127.0.0.1:11213) replication: marugoto copying replication: start
・・・という感じで、後はいくらでも同じことが出来る。
ちなみに、データはどちらに入れても両方から取り出せるというマルチマスタ構成。
レプリケーションしている分、オリジナルの memcached よりも速度は落ちるだろうが、一個だけなら落ちてもデータが回復可能な memcached ということで、使える範囲が広がるのではないかと思う。パフォーマンスに関しては後日 memcached との比較を取ってみる予定。C でクライアント作らないと単なるクライアント側の負荷テストになっちゃうことは既にわかっているので、C 版を作ろうと思う。