ElastiCacheの学習 〜AWS学習 6日目〜
社内esaにまとめてたら満足してしまっていた、気をつけねば
ElastiCacheとは
- 1つ以上のノードをクラスタ化して提供するサービス
- ノードとは固有DNSを持った1つのRedis(もしくはmemcache)サーバを指す
- クラスタとは1つ以上のノードが集まり、1つのキャッシュサーバのように振る舞っているもの
ノードタイプ
マルチAZ
- プライマリノードで障害が発生した場合にレプリケーションラグの低いリードレプリカをプライマリノードへ昇格させる
- レプリケーションラグ: リードレプリカへのデータ反映が非同期な為、リードレプリカのバージョンが古い可能性がある
オートディスカバリ
- memcached専用機能
- ノードの追加・削除をする際に、他のサーバーのElastiCacheへのエンドポイントを更新するため必要な再起動の手間をなくす機能
シャード(Shard)
- 水平分割機能
- id 1~100 までをサーバAへ、id 101~200 までをサーバBへ、id 201~300 をサーバCへの様な分割手法
- (ElastiCacheの) Redisのシャードの最大数は15サーバ
Redis
BGSAVE
- バックグラウンドで保存を行う
- lastsaveで保存が終了したかの確認が可能
- 書き込みが多いシステムの場合メモリ使用量が二倍になる場合がある
障害への対応
障害が起きるパターンと対応
- Redis パフォーマンス向上案 まとめ
- Redisもスロークエリが発生する
- インターバルタイムアウトを調整する。短すぎると勝手にコネクションが切断されるので要注意。
- Redisはシングルスレッドである。よって、スロークエリがあると瞬殺される。
- Redisをストレージとして使用している
- SwapUsageが上がり続けてしまう
- レコードに
expire
、redisの生存期間の設定をする - gem
redis-rb
でElastiCacheのプライマリクラスタが変更されると、redis-rbはDNSが変更された事に気づけない
参考
- Redis の永続化について調べた
- AWSのElactiCacheでRedisを導入してみた
- 構築方法
- Redis 本番障害から学んだコードレビューの勘所
Redis不適切利用による問題は本番運用が始まってから顕在化することが多く、時限爆弾みたいな存在です。事前に防ぐにはコードレビュー段階で叩くしかありません。
- 同記事の Redisサーバのよくある落ち方 ・ Redisサーバで障害発生時の基本対応 が詳しく解説されている
- AWS Redis固有のパラーメタ
- パラメータグループの
maxmemory-policy : volatile-lru
だとExpire付きデータは削除されるが、Expire付きではないデータは削除されない
- パラメータグループの
- Elasticache for Redisを使っていたらサービスが固まった件
- パラメータグループの
reserved-memory
をちゃんと設定しないとSwapUsageが急増してRedisが死ぬお話
- パラメータグループの
- ElastiCache がフェイルオーバーした際に気をつけるべき redis-rb の利用方法について
- Redis パフォーマンス向上案 まとめ
Redisはシングルスレッドである。よって、スロークエリがあると瞬殺される。
インターバルタイムアウトを調整する。短すぎると勝手にコネクションが切断されるので要注意。
- rdm(Redis Desktop Manager)
- Redis用GUIツール