【Amazon RDS】マルチAZとリードレプリカの違い

# はじめに
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

![RDS_マルチAZ構成_20210508.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/f652f7a4-ff0c-2d05-d035-5cc1d9e2833c.jpeg)
AWS管理コンソール上のダッシュボードからは、「データベースの作成」ボタン押下後、以下にて設定することが可能。
選択するDBによって表示内容が異なる。

**Amazon Auroraの場合**
![RDS_AZ構成_エンジンタイプ_Aurora.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/12fd0386-3db3-3430-2d65-b26af0877bb8.jpeg)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/f82d6e56-de1e-e684-f9e4-097a70c9a564.png)
**MySQL、MariaDB、PostgreSQL、Oracleの場合**
![RDS_AZ構成_エンジンタイプ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/39fab6a1-72d0-0f10-d2d6-80188fc793ef.jpeg)
![RDS_AZ構成_管理コンソール_01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/31f4cff1-c87c-ae73-1aa2-03a50a621064.jpeg)
**Microsoft SQL Severの場合**
![RDS_AZ構成_エンジンタイプ_SQLServer.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/f5d3e03c-943f-f9c3-9407-96213c59bc5d.jpeg)
![RDS_AZ構成_管理コンソール_エンジンタイプ_SQLServer.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/2197936a-51f1-a140-28f5-5000b6b17c19.jpeg)

# リードレプリカを作成する場合
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/
![RDS_リードレプリカ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/1e497f21-6fa4-168a-38cd-3875920610d9.jpeg)
AWS管理コンソール上からは以下の手順で操作することが出来る。
DB作成後のみ利用することが可能。DB作成時には、リードレプリカ作成の操作項目が存在しない。
これは、リードレプリカが拡張性(スケーラビリティ)を向上させることが目的のため。DBが存在していない以上、拡張しようがないため、DB作成時には、リードレプリカ作成の操作項目が存在しないと推測している。
![RDS_リードレプリカ_操作方法_管理コンソール_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/9d704866-4083-e90d-3b14-78190468cf57.jpeg)
![RDS_リードレプリカ_操作方法_管理コンソール_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429119/46d37eef-1ee6-50be-166b-f8cb93bd5fa1.jpeg)