repcachedのインストールと使いかた

memcachedはDanga Interactive社とやらで作られた外国産のソフトだけど
repcachedはYASUI Masanobu氏とHIROSE Masaaki氏がmemcachedレプリケーション機能を加えて拡張した物。
現時点での最新memcachedはバージョン1.4.1、最新repcached2.2はmemcachedの1.2をベースにしている。どう違うのかは余裕があったら調べて書こうと思う。

△インストール
http://lab.klab.org/wiki/Repcached
まずはここからrepcachedの本体を落としてくる。
公式の手順に手を加えて

$ ./configure --enable-replication --program-transform-name=s/memcached/repcached/
$ make
# make install

でインストールすれば起動時もrepcachedになる上、memcachedとの共存が可能でおすすめ。


△起動
とりあえず端末内で2つのrepcachedを立ち上げて挙動を確認する。
GUI環境ならターミナルを2つ開いて

$ repcached -p 11211

$ repcached -p 11222 -x 127.0.0.1

にて2つ立ち上げる。
11211と付いている側がサーバ側、11222がクライアント側で、サーバ→クライアント の順で立ち上げる必要がある。

ポート番号は11211がmemcachedのデフォルトで、11212がレプリケーション用ポートのデフォルトである。それぞれ-p -Xで指定できる。
立ち上げた後はマルチマスタ構成のためにどちらがサーバ/クライアントといった区別はなくなる。

  • xオプションは自分がレプリケーションにおけるクライアント側であることを示し、repcachedサーバのアドレスを指定するために付ける。常に-xオプションを付けてサーバ側として立ち上げたとしてもこの場合127.0.0.1にいる自分自身がサーバとしても応答するので、自分から自分への空のまるごとコピーが実行されるだけで害はなさそう。

片方のrepcachedを落とし、別のプロセスとしてrepcachedを立ち上げる場合は常に-xオプションでサーバ側のアドレスを教えてやる必要がある。

△操作
さらに2つターミナルを開いて

$ telnet 127.0.0.1 11211

$ telnet 127.0.0.1 11222

にてそれぞれのrepcachedサーバに接続。
11211に向かって

set hello 0 0 5
world

と打って保存した物を
11222に向かって

get hello
world

と打って帰ってくるのを楽しめる。
どちらのサーバにdeleteやappendやreplaceなどのコマンドを打った場合でもすぐに同期が取られて一貫性が保たれる。
コマンドを解釈して実行すると同時に、データに影響のある操作ならばレプリケーション相手にも同様の操作をするように別コネクションから命令を飛ばしている様子。

telnetから操作するレベルではコヒーレンシが保たれなくなるような状況は発生しない模様。

2つ起動しているrepcachedのどちらかをCtrl + cで止めて、再び

$ repcached -p 11222 -x 127.0.0.1

で立ち上げると、先ほどsetしたデータは止める前と同じように読み書きできることがわかる。
repcachedサーバにconnectしたrepcachedはまるごとコピーという操作が行われてデータの一貫性が保たれる。まるごとコピーが完了するまではあらゆる操作を受け付けさせない事で不整合の発生を防いでいる。
まるごとコピーという名前はソースコード中の関数名にまでmarugotoと書いてあるためrepcachedのための専門用語だと解釈したほうが正解だろう。