はじめに
RDSインスタンス(DB)は、マルチAZに配置することが出来、また、リードレプリカを作成することが出来るが、それぞれの違いについてよく分かっていないため、まとめたいと思う。
通常、「マルチAZ」は、「マルチ(複数)のAZ(データセンター群)」を意味する。
RDSインスタンスをマルチAZに配置するとは、RDSインスタンスを複数のデータセンター群に配置することを意味する。
「リードレプリカ」は、1つ以上のデータセンター群、または別リージョンにて、「読込専用」のRDSインスタンスを複製することを意味する。
以下にて、RDSインスタンスをマルチAZに配置する場合、リードレプリカを作成する場合の違いについて記載する。
マルチAZに配置する場合
「高可用性」を実現したい時にRDSインスタンスをマルチAZに配置する。
「高可用性」は、システムの「稼働時間」に焦点を置いた言葉で、「長時間システムを利用できる状態」を意味する。
もし、1つのAZのみにRDSインスタンスを配置した場合、地震等の災害の影響でAZに障害が発生すると、RDSインスタンスも影響を受ける可能性がある。
そのため、RDSを使用する場合において、マルチAZの設定は必須と考えた方が良い。
以下の図では、可用性を高める(長時間システムを利用できる状態にする)ため、複数のデータセンター群に、「プライマリDBインスタンス」、「スタンバイレプリカ」をそれぞれ配置し、「同期レプリケーション」によって、DBを冗長化するイメージを表す。ちなみに、「レプリケーション」は、データの複製を意味する用語である。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html
AWS管理コンソール上のダッシュボードからは、「データベースの作成」ボタン押下後、以下にて設定することが可能。
選択するDBによって表示内容が異なる。
Amazon Auroraの場合
MySQL、MariaDB、PostgreSQL、Oracleの場合
Microsoft SQL Severの場合
リードレプリカを作成する場合
RDSインスタンスの「拡張性(スケーラビリティ)」を向上させたい時にリードレプリカを作成する。
ここでいう「拡張性(スケーラビリティ)」は、「RDSインスタンスのデータの読み取り性能の増減」を意味する。
例えば、データの更新、変更、削除は行わないが、ユーザーのDBアクセス数の増加に応じて、DBの読み取り性能を向上させたい場合が発生したと仮定する。
この時の対策として、わざわざRDSインスタンスを新たに作成しなくても、読み取り専用のDBであるリードレプリカを作成することで対応することが可能となる。
AWS公式ページには、「Amazon RDS リードレプリカは、マルチ AZ 配置を補完します。」と記載されている。
上記「マルチAZに配置する場合」にて、RDSインスタンスをマルチAZに配置する理由は、「高可用性」を実現することと記載したが、リードレプリカを作成しても「高可用性」は実現可能となる。但し、この高可用性は「読み取り専用のDB」に対してのみ実現可能となることに注意する。あくまでもリードレプリカの作成目的は、「拡張性(スケーラビリティ)」の向上となる。
マルチAZとの主な違いは、「データを非同期でレプリケーションすること」、「リージョンを跨いでレプリケーション(クロスリージョンレプリケーション)を行うことが可能」の2点となる。
詳細な違いについては、AWS公式ページに記載されている。
https://aws.amazon.com/jp/rds/features/read-replicas/
AWS管理コンソール上からは以下の手順で操作することが出来る。
DB作成後のみ利用することが可能。DB作成時には、リードレプリカ作成の操作項目が存在しない。
これは、リードレプリカが拡張性(スケーラビリティ)を向上させることが目的のため。DBが存在していない以上、拡張しようがないため、DB作成時には、リードレプリカ作成の操作項目が存在しないと推測している。