読者です 読者をやめる 読者になる 読者になる

set setting reset

インフラ関連の小ネタと備忘録

Elasticache (Redis) を試してみた

http://aws.typepad.com/aws_japan/2013/09/amazon-elasticache-now-with-a-dash-of-redis.html

概要

  • Master/Slave構成

    • Slaveは5つまで構成可能
  • Failover

    • PrivateDNSを内部でよしなにつけかえてくれる模様
    • ユーザ側で気にすることがない
  • Multi-AZ可能

  • Cache Cluster内のノードはインスタンスタイプ、コンフィグの内容が同一の構成
  • 通信先はReplication Group の Primary Endpoint を指定
  • 手動でプライマリ(Master)の変更が可能
    • 1分以内で切り替わる
    • 切り替わり中はパフォーマンスが著しく悪化する(通信断があるかどうかはクライアント次第?)

手順

  1. Cache Subnet Groupを作成

    • Multi-AZ構成を取るため、そのようにサブネットを登録
    • S3のパスが設定できるのでここでAOFやRDBファイルが保存されるのだろう(未検証)
    • S3にダンプファイルをアップロードしておくと、そこからリストアしてくれる
  2. Cache Clusterを作成

    • Clusterと呼称されているがノードは1つのみしか登録できない
    • レプリカを組むと、自動でそのレプリカがClusterとして追加される
    • Clusterというよりノードと呼んだ方がわかりやすい感じがする
    • 実際Cache Cluster内のNodes項目では追加削除などはできない
  3. Replication Groups作成

    • Primary Cluster Group ID に MasterとなるCache Clusterを指定
    • Replication Group IDに任意の文字列を入力して作成
    • 作成されたら Add Read Replica から Replication Groupを選択、Read Replica ID (ノード名)を入力、AZを選択する
    • 作成されるとPrimary EndPointとしてさらにDNSレコードが払い出される
    • これをVIP的な通信先に設定するとよいみたい
    • しばらく待つとReplicaが作成され、Cache Clusterに追加される

手動フェイルオーバ

  • Replication Groups から該当する Replication Group を選択する
  • Current Role が Read Replica の Cache Cluster の Action である Promote をクリック
  • Yes の状態で Promote をクリック

Primaryから降格もできるが、レスポンスがものすごく重くなる。 毎秒 redis-ping していて計測していたところ、PONG が帰ってくるのに5秒程度かかり、なかなか復旧しない。

Management Consoleを見ると Cache Cluster が Modifyng の状態に。 3分ほど待つとレスポンスは正常になった。

Redisのパフォーマンス

VPC 内で m1.small インスタンスに対して redis-benchmark 利用して計測しました。 EC2の計測はlocalhostに対して実施、ElastiCacheは同EC2ホストから実施したもの。

redis-benchmarkの内容としては

「同時接続クライアント = 50」 で 各コマンドを毎秒 10000 回実行した速度 のリクエスト成功数の最速値

command ec2 elasticache
ping 1.21 / 8264.46 0.85 / 11806
SET 1.23 / 8123 0.98 / 10183
GET 1.21 / 8285 0.93 / 10729
INCR 1.27 / 7898 0.94 / 10683
LPUSH 1.21 / 8278 0.97 / 10277
LPOP 1.20 / 8340 0.93 / 10752
SADD 1.21 / 8244 0.93 / 10752
SPOP 1.25 / 7974 0/93 / 10752
LRANGE 1.22 / 8210 1.18 / 8438
MSET 1.27 / 7886 1.00 / 9980

以上より、あらゆる数値がEC2よりElastiCacheが速い結果に。

NWレイテンシ

Avgが0.4ms前後であることを参考値として前提にさせてもらうと、 VPC内の他のEC2インスタンスへのicmpのレイテンシも約0.4msのため、大差はなさそう。

スケールアップ

こんな感じかなという程度です。

  • Replication Groupを作成
  • サイズをUPしたCache Clusterを作成
  • Read Replicaを作成
  • 新たに払い出される Primary Endpoint(PrivateDNS) を アプリケーション側に設定する
  • 古いCache Clusterを削除

料金

価格的には Redis も Memcached も変わりないようで m1.Large で1ヶ月だと以下のような感じ。

Type on demand price reserved initial reserved running
ElastiCache $603 $1640 $187
EC2 $512 $1548 $146

所感

VPCでのRedis運用において分散でなく、Master/Slave構成ならかなり使えると思います。すごい。 ただ、インスタンスサイズを最大にしてもメモリが68GBまでと制限があるのが用途によっては厳しいかもしれません。