ElastiCache for Redisの構築を依頼されました。
インメモリで、EC2とDBの間にキャッシュとして利用したり、EC2をステートレスに扱う為のセッション保存などに利用できるということは知っているくらいで、いざ構築しようとしても、「ノード、シャード、クラスターってなんでしょね。」ってなりました。
BlackBeltとか読んでみたんですが、よくわかんねー。
その他、ググってもイマイチよくわかんねー。
ってなってたのですが、これが一番わかりやすかったですね。
要点整理から攻略する『AWS認定 データベース-専門知識』
(4か月前にDBS取得した時に購入して読んでいたはずなのにその後、4つくらい資格とって本の存在も学んだ知識も既に忘れていた)
私なりに理解した点をメモ(構築手順までは記載していません)
登場物
・ノード・・・最小単位。データが保存される場所。
・シャード・・・複数ノードの集まり。プライマリノードは1つ。レプリカノードが0以上。シャード内のノードは、プライマリノードからレプリカノードにレプリケートされる(1シャード内のノードに存在するデータは全て同じ)
・クラスター・・・複数シャードの集まり。クラスターに向けて書き込み指示がきたらシャードが複数ある場合は分散して書き込まれる。
構築の仕方は?
以下、3つのパターンがある
- シングルノード・・・シャードなし、単一ノード
- クラスターモードが無効 ・・・シャードは1つ。シャード内に、プライマリノード1つ、レプリカノードが1つ以上(最大5つまで)。エンドポイントはプライマリ用、レプリカ用の2つが存在。
- クラスターモードが有効 ・・・シャード複数。1シャード内。シャード内に、プライマリノード1つ、レプリカノードが1つ以上(最大5つまで)。エンドポイントは1つ。
この辺りの詳細は、
・Amazon ElastiCache for Redis でクラスターモードを使用する
https://aws.amazon.com/jp/blogs/news/work-with-cluster-mode-on-amazon-elasticache-for-redis/
に記載されている。
スケーリングは?
クラスターモードで作成した場合は、以下のアプローチがある。
- 書き込みを改善
・シャードを追加
・ノードタイプ(EC2でいうインスタンスタイプみたいなもの)を変更 - 読み込みを改善
・ノードを追加
・シャードを追加
・ノードタイプ(EC2でいうインスタンスタイプみたいなもの)を変更
因みに、5.0.4以上バージョンであれば上記はどれもダウンタイムなしで変更可能みたい。
また、最近AutoScallingもサポートされました。
・Elasticache for RedisでAutoScalingを利用できるようになりました
https://dev.classmethod.jp/articles/autoscaling-elasticache-for-redis/
費用
EC2やRDSのように停止できない。停止させたいなら削除になる。
ノードタイプ「cache.t3.micro」で、2022.02.05現在の価格だと東京リージョンだと0.026USD。1ノードで月額約20USD。
でどうする?
ノード、シャードの両方の追加が可能なクラスターを有効化した構成にする。クラスターだとエンドポイントは1つでそこにアクセスすればAWSさんが良しなにやってくれる。ノードが死んでも生きてるノードからまたノードを作成し自動復旧。
一旦最安で、ノードタイプ「cache.t3.micro」でノードは2つ。AZを分けて配置。シャードは1つからスタートしてみることにしました。
構築後の稼働確認
Nginx + PHPから使う想定で、以下を参考に稼働確認
https://aws.taf-jp.com/blog/38956
■その他参考資料
・AWS Blackbelt
https://d1.awsstatic.com/webinars/jp/pdf/services/20171214_AWS-Blackbelt-ElastiCache.pdf
・ElastiCacheは良いサービス!!特徴や使い方をおさらいしましょ!
https://dev.classmethod.jp/articles/elasticache-is-very-good-lets-review/
・RedisとElastiCacheを分かりやすくまとめてみた
https://qiita.com/gold-kou/items/966d9a0332f4e110c4f8
・レプリケーション: Redis (クラスターモードが無効) 対 Redis (クラスターモードが有効)
https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/Replication.Redis-RedisCluster.html