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分以内で切り替わる
- 切り替わり中はパフォーマンスが著しく悪化する(通信断があるかどうかはクライアント次第?)
手順
Cache Subnet Groupを作成
- Multi-AZ構成を取るため、そのようにサブネットを登録
- S3のパスが設定できるのでここでAOFやRDBファイルが保存されるのだろう(未検証)
- S3にダンプファイルをアップロードしておくと、そこからリストアしてくれる
Cache Clusterを作成
- Clusterと呼称されているがノードは1つのみしか登録できない
- レプリカを組むと、自動でそのレプリカがClusterとして追加される
- Clusterというよりノードと呼んだ方がわかりやすい感じがする
- 実際Cache Cluster内のNodes項目では追加削除などはできない
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までと制限があるのが用途によっては厳しいかもしれません。