Memo

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

ElastiCache
キャッシュに特化したインスタンスを作成できる。 大きく分けて以下3つの使い方がある。 ・Redis(クラスターモード無効) ・Redis(クラスターモード有効) ・Memcached Redisについてはそれぞれ後述の「ElastiCache (Redis)」を、Memcachedについては後述の「ElastiCache (Memcached)」を参照。 以下、Redisを使用する前提でElastiCacheの概要を記載する。 ■それぞれの関係性 ElastiCache > クラスター > シャード > ノード ■前提知識 ElastiCacheを設定していると、「レプリケーション」「シャード」といった言葉が出てくる。 データベース(MySQLやPostgreSQLなど)の本番運用でも出てくる言葉ではある。 レプリケーションとは、リアルタイムにデータをコピーする技術のこと。 プライマリノードへの書き込みを、プライマリノードに紐づくすべてのセカンダリノードへ非同期的に反映する。 読み込みの負荷分散や、障害対策のホットスタンバイとして使用される。 書き込みは原則として一ヶ所。 バックアップのための仕組みではなく、可用性向上のための仕組み。 シャーディングとは、データベースの負荷分散を行う手法の一つ。 一つの表(テーブル)を複数の物理コンピュータに分割して記録する方式。 各コンピュータは共有資源を持たずに独立しており、データが増大してもコンピュータの台数を増やしていくことで負荷に対応できる。 どのデータがどのコンピュータに記録されているか把握する必要があるため、システムが複雑になる。 【MySQL】レプリケーションの設定をしろって言われたんです。 #初心者 - Qiita https://qiita.com/suzuko24/items/ace0a08f2b2aabd95045 データベースシャーディングとは?概要やメリット・デメリットを解説 https://products.sint.co.jp/siob/blog/sharding なおWebサーバと違い、データベースの負荷分散は書き込みも含めると容易ではない。 自力で設定することはできなくも無いが、設計も設定も障害時の対応も複雑なので、可能な限りマネージドサービスに任せたいところ。 RDSではそれを解消するサービスが発表されているが、以前調べたときは高額だったので見送った。 【新機能】 書き込み性能をスケールできる Amazon Aurora Limitless Database のプレビューが開始されました #AWSreInvent | DevelopersIO https://dev.classmethod.jp/articles/amazon-aurora-limitless-database-with-automatic-horizontal-scali... ■それぞれの役割 ノードとは、通信の主体となる個々の機器。 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