Tags

By year

  1. 2014 (28)

ElastiCache for memcached の分散処理をどうするか悩む(2)

AWS ElastiCache RDS memcached twemproxy Sensu

Posted on Apr 27


はじめに

twemproxy を使うことで memcached クラスタを負荷分散させることは出来そうだが、ノード間に散らばったデータの可用性や冗長性を担保しなければいけない状況ではチト辛そう…ということは解ったのでもう悩んではいませんが…

  • RDS for MySQL 5.6 + memcached Plugin の簡単なベンチマークを取ってみる
  • twemproxy-web というツールがあるのでそちらを使ってみる
  • twemproxy のメトリクスを graphite に飛ばす sensu のプラグインもあるみたい!(今回触るのは止めておきます)

尚、ベンチマーク結果は環境等により異なるのであくまでも指標の一つとして見て頂ければ幸いです。



RDS for MySQL 5.6 + memcached Plugin のベンチマーク

RDS for MySQL 5.6 + memcached Plugin の設定

以下のようなステップで設定する。

  1. Options Groups にて新しいオプショングループを作成する
  2. オプショングループに Add Option をクリックして MEMCACHED を選択する
  3. MEMCACHED オプション自身にもセキュリティグループを指定する必要があるので環境に応じて設定を行う
  4. 作成した Option Group(s)RDS のインスタンスに適用する

設定後は以下の様な状態になる(はず)。

個人的な注意点としては下記の通り。

  • 当然だが VPC 内の RDSMEMCACHED オプションを指定する場合にはセキュリティグループは VPC のセキュリティグループを指定する必要がある
  • 設定後はインスタンスの再起動が必要になる(ようだ※要確認)

以下のような環境となる。

ベンチマーク

前回と同様に memslap を利用してベンチマークを実行するので以下のように実行する。

memslap -s ${memcached_host}

結果は下記の通り。尚、RDS のインスタンスタイプは db.m1.small を利用した。

  1. 168.448 seconds
  2. 198.842 seconds
  3. 195.347 seconds

比較として普通に VPC 外に構築した ElastiCache に対してもベンチマークを実行してみた結果は下記の通り。尚、インスタンスタイプは cache.m1.small とした。

  1. 7.709 seconds
  2. 8.275 seconds
  3. 8.105 seconds

と同じ環境とは言いがたいが素の ElastiCache と比較すると RDS for MySQL 5.6 + memcached Plugin20 倍程度の処理時間が必要になるようだ。ムム。

私的な見解とか

  • 実装はmysqld プロセスの中で memcached Plugin がバックエンドとして innodb を利用する
  • 単純なキャッシュでの利用を想定すると ElastiCache の方が良さそう
  • MySQLmemcached を別々で運用する場合に MySQLmemcached 間の問い合わせオーバーヘッド軽減には貢献しそう


twemproxy の周辺ツール

twemproxy-web

twemporxyRuby から操作したい場合に nutcracker という gem がある。その gem を利用して twemproxyWeb インターフェースを提供するのが twemproxy-web だ(という認識)。

インストールは下記の通り。但し、Ruby 1.9 以上が必要になる。

sudo gem install nutcracker-web --no-ri --no-rdoc -V

インストール後、下記のように起動する。

nutcracker-web --config /path/to/nutcracker.yml --port 22122 -d

--configtwemporxy(nutcracker) の設定ファイルを指定して --port には nutcracker-web で利用するポートを指定する。また、-d でデーモンモードでの起動となる。起動してブラウザでアクセスすると以下のようなページが表示される。

おお…だが…nodes 等のプルダウンに何も表示されない等で現時点では利用出来る機能は限定的なのでも少し調べる。



参考

最後になるが、今回の記事を書くにあたり参考にさせて頂いたサイトや資料を自分の Bookmark 代わりにメモっておく。



さいごに

ElastiCache for memcached の分散構成について

今回、ElastiCache for memcached の分散処理についてちょっとだけ調べてみたが、ストアするデータの可用性、冗長性を考慮するのであれば、そもそも論だが memcached よりもレプリケーション機能のある Redis を選択するのもアリだと感じた。但し、自動でのフェイルオーバー等の細かい機能の調査を続けたい。

また、twemproxy を使えば複数ノードで構成された memcached クラスタにおいて、オーバーヘッドは最小限なままで分散構成は取れると思われる。


RDS for MySQL 5.6 + memcached Plugin について

RDS for MySQL 5.6 + memcached Plugin の組み合わせについてはクエリキャッシュとして、単体の memcached を使っている構成の場合には置き換えることを検討しても良いかもしれない。




2014 かっぱのほげふが