Memcashedでは、1月にリリースされた version 1.6.13から実験的にProxy機能が搭載されています。
公式のドキュメントはコチラ
github.com
概要
主な通信の流れは次の通りです
(通信内容は簡易的に記載するが、実際は通常のmemcacheプロトコルです)
- memcachedをproxyモードで起動する際、グループ毎にサーバプールを指定する (例: foo, bar)
- Clinetから値をsetする際は、keyにサーバプールを示すプレフィックスを付ける (例: /foo/, /bar/)
- Proxyは、サーバプールを示すプレフィックスを取り除いたものを、バックエンドのmemcachedサーバにsetする
- サーバプールに複数サーバがいる場合は、Keyのハッシュ計算に基づいて振り分け先が決まる (例: /foo/key1, /foo/key2)。
上記はsetの例だが、getも同様に動作する
サーバプールの指定
サーバプールの指定は、luaスクリプトで記述する。
サーバプール毎にnameを指定し、バックエンドとなるmemcachedサーバを指定するだけです。
local s = require("lib/simple") -- by default, sends "/foo/*" to "foo" and "/bar/*" to "bar" s.pool{ name = "foo", backends = {"127.0.0.1:11212", "127.0.0.1:11213"}, } s.pool{ name = "bar", backends = {"127.0.0.1:11214", "127.0.0.1:11215"}, }
起動時に proxy_configを読み込む
./memcached -o proxy_config=./example.lua
stats proxy
proxyモードのmemcachedは "stats proxy" コマンドで状態を統計情報を取得できる
$ echo "stats proxy" |nc localhost 11211 STAT user_simple_failovers 0 STAT cmd_mg 0 STAT cmd_ms 0 STAT cmd_md 0 STAT cmd_mn 0 STAT cmd_ma 0 STAT cmd_me 0 STAT cmd_get 1 STAT cmd_gat 0 STAT cmd_set 3 (略) END
ビルド
現状この機能を使うには、自分でビルドすることになる。手順は公式ドキュメントの通りです
github.com