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 版を作ろうと思う。