Memo

メモ > サーバ > サービス: AWS > ElastiCache

■ElastiCache
キャッシュに特化したインスタンスを作成できる 大きく分けて以下3つの使い方がある ・Redis(クラスターモード無効) ・Redis(クラスターモード有効) ・Memcached Redisについてはそれぞれ後述の「ElastiCache (Redis)」を、Memcachedについては後述の「ElastiCache (Memcached)」を参照 以下、Redisを使用する前提でElastiCacheの概要を記載する ■それぞれの関係性 ElastiCache > クラスター > シャード > ノード ■前提知識 レプリケーションとは、リアルタイムにデータをコピーする技術のこと プライマリノードへの書き込みを、プライマリノードに紐づくすべてのセカンダリノードへ非同期的に反映する 読み込みの負荷分散や、障害対策のホットスタンバイとして使用される シャーディングとは、データベースの負荷分散を行う手法の一つ 一つの表(テーブル)を複数の物理コンピュータに分割して記録する方式 各コンピュータは共有資源を持たずに独立しており、データが増大してもコンピュータの台数を増やしていくことで負荷に対応できる どのデータがどのコンピュータに記録されているか把握する必要があるため、システムが複雑になる ■それぞれの役割 ノードとは、通信の主体となる個々の機器 ElastiCacheの最小単位で、データの保存領域(RAM)を持つ 設定したノードタイプによって、CPU性能や保存領域のサイズが異なる シャードとは、ノードをまとめるグループ データはノード間で同期され、2つ以上のノードを用いることでレプリケーションできる 1つのシャードの中には、読み書きができるプライマリーノードを1つと、読み込み専用のセカンダリノード(リードレプリカ)を0〜5個持つ クラスターとは、シャードをまとめる論理グループ クラスターモードが有効の場合、クラスターの中に複数(最大15個)のシャードを持つことができる 複数のシャードがあると、名前のとおりデータはシャーディングされる。つまりデータはシャード間で分割される クラスターモードが無効の場合、クラスターの中に1つのシャードを持つ この場合、データはもちろん分割されない ■障害時の挙動 プライマリノードで障害が発生した場合、 自動で選択されたリードレプリカがプライマリノードに昇格する アプリケーションで利用しているエンドポイントは、変更する必要が無い 昇格にかかる数分間、プライマリノードへの書き込みの一部は失われる リードレプリカで障害が発生した場合、 新しいノードと置き換えらえる 置き換えが行われる際、レプリカが本来行う読み込み処理をプライマリノードが引き受けるため、プライマリノードの負荷が上がる アプリケーションで利用しているリードレプリカエンドポイントは、変更する必要がある ■ノードタイプなどの変更 クラスターモードが有効の場合、ノードタイプ・シャード数・レプリカ数・エンジンのバージョンを変更できない 変更するには、新たなクラスタを作ってデータを移行する必要がある …だったが、2021年時点でエンジンのバージョン以外は変更できるらしい? また2023年3月時点で、エンジンのバージョンも互換性があるバージョンに限って変更できるみたい? クラスターモードが無効の場合、ノードタイプ・エンジンのバージョンを変更できる ただし変更中は読み書き処理がブロックされ、インスタンスを利用できない(t2.microをt2.smallにする場合でも、10分ほどかかるみたい) ノードタイプの変更はスケールアップのみに対応している。スケールダウンは、新しくクラスタを作る必要がある レプリカの追加は、クラスターを停止することなくできるみたい ■メモ 基本的には「シャード1(クラスターモード無効)、ノード2」でいいかもしれない RDSでもマルチAZは使っているものの、シャーディングするほどの規模になったことは無い ただしクラスターモード無効の場合、パフォーマンスの天井が低いらしい。本番環境ではクラスターモード有効が推奨されるらしい ノードタイプなどの変更には制限があるようなので、例えば意図したインスタンスタイプにスケールダウンしたい場合、 1. ElastiCacheで新たにクラスターを、スケールダウンしたい内容で作成する 2. サーバやアプリケーションの設定を変更し、新しく作成したクラスターを参照させる 3. 問題無ければ、以前のクラスターは削除する という手順で行う必要があるかもしれない ■参考 ElastiCache + Redis に出てくる概念と、クラスタモードごとの違い - nyamadoriの日記 https://nyamadori.hatenablog.com/entry/2017/09/12/103523 ElastiCache for Redisのクラスターモードについて調べてみる | DevelopersIO https://dev.classmethod.jp/articles/elasticache-cluster-mode/ シャードのレプリカの数を減らす - Amazon ElastiCache for Redis https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/decrease-replica-count.html 「Redis (クラスターモードが有効) のシャード、または Redis (クラスターモードが無効) のレプリケーショングループのレプリカ数を減らすことができます。」 「最小の実行として、レプリカを少なくともシャードあたり2つにすることをお勧めします。」 ElastiCache for Redis クラスターのクラスターモードが有効かどうかを一括で確認するワンライナー | DevelopersIO https://dev.classmethod.jp/articles/elasticache-for-redis-cluster-enabled-check/ クラスターモード無効/有効の比較表がある ElastiCache のスケーリングについてまとめてみた - サーバーワークスエンジニアブログ https://blog.serverworks.co.jp/elasticache-scaling 「クラスターモード無効の場合、パフォーマンスの天井が低いので、本番ワークロードではクラスタモード有効が推奨」

Advertisement