twemproxyとmemcached


アプリ側を改修をしなくてキーの分散を行えないかと調べてたら
twemproxyというミドルウェアがあったので試してみた

twemproxyドキュメントや日本語訳のドキュメントは下記URLを参考に
A fast, light-weight proxy for memcached and redis
twemproxy 本家ドキュメント日本語訳

■twemproxy(nutcracker)のインストール

git clone https://github.com/twitter/twemproxy.git
cd twemproxy
autoreconf -fvi
./configure
make
sudo make install

■twemproxy(nutcracker)の設定
/etc/twemproxy/nutcracker.ymlに設置

kvs:
listen: 0.0.0.0:22124
hash: fnv1a_64
distribution: ketama
auto_eject_hosts: false
server_retry_timeout: 3000
server_failure_limit: 1
servers:
- 127.0.0.1:11211:1
- 192.168.1.101:11211:1

■twemproxy(nutcracker)の起動

twemproxy -d -c /etc/twemproxy/nutcracker.yml -o /var/log/twemproxy/twemproxy.log

■動作確認

telnet localhost 22124
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

■twemproxyのモニタリング

curl -s localhost:22222 | jq .
{
  "service": "nutcracker",
  "source": "192.168.1.100",
  "version": "0.4.1",
  "uptime": 23,
  "timestamp": 1480123789,
  "total_connections": 3,
  "curr_connections": 2,
  "kvs": {
    "client_eof": 1,
    "client_err": 0,
    "client_connections": 0,
    "server_ejects": 0,
    "forward_error": 0,
    "fragments": 0,
    "127.0.0.1": {
      "server_eof": 0,
      "server_err": 0,
      "server_timedout": 0,
      "server_connections": 0,
      "server_ejected_at": 0,
      "requests": 0,
      "request_bytes": 0,
      "responses": 0,
      "response_bytes": 0,
      "in_queue": 0,
      "in_queue_bytes": 0,
      "out_queue": 0,
      "out_queue_bytes": 0
    },
    "192.168.1.101": {
      "server_eof": 0,
      "server_err": 0,
      "server_timedout": 0,
      "server_connections": 1,
      "server_ejected_at": 0,
      "requests": 2,
      "request_bytes": 30,
      "responses": 2,
      "response_bytes": 33,
      "in_queue": 0,
      "in_queue_bytes": 0,
      "out_queue": 0,
      "out_queue_bytes": 0
    }
  }
}

サポートしているmemcache commandは下記の通り
※memcached ASCIIコマンドのみサポートしています

Memcache Command Support

■参考URL
かっぱのほげふが | ElastiCache for memcached の分散処理をどうするか悩む
TwemproxyからElastiCacheに分散(同じキーは同じElastiCacheへ)してみる
ElastiCacheとELBとtwemproxy

twemproxyとmemcached
Tagged on: