Amazon Aurora PostgreSQL での擬似障害の実行 (1)

はじめに

Amazon Aurora PostgreSQL (以下、Aurora PostgreSQL) で擬似障害試験を実施することがあったのでまとめる。

Amazon Aurora における擬似障害

Amazon Aurora で擬似障害を発生させる方法には、大きく3つの方法がある。

  1. AWS マネジメントコンソールによる手動のフェイルオーバーを発生させる方法
  2. 障害挿入クエリを利用して DB インスタンスをクラッシュさせる方法
  3. AWS Fault Injection Simulator を利用する方法

Amazon Aurora には MySQL 互換の DB エンジン (以下、Aurora MySQL) も用意されているが、Aurora PostgreSQL と Aurora MySQL で障害挿入クエリが異なるため、具体的な擬似障害の発生方法が異なる点に注意する。

今回は Aurora PostgreSQL を対象とする。

検証環境の構成

Aurora PostgreSQL のバージョンは 3.2 (PostgreSQL バージョン 11.7 との互換性あり) とし、DB クラスタの構成を下記とする。

DB 識別子 ロール フェイルオーバー優先順位
aurora-test-cluster-instance-1 書き込み 1
aurora-test-cluster-read-replica-1 読み込み 1
aurora-test-cluster-read-replica-2 読み込み 2

「フェイルオーバー優先順位」は、0 (最高) から 15 (最低) までの16段階で設定可能である。

プライマリ DB (aurora-test-cluster-instance-1) に障害があった場合、優先度の高いリードレプリカ 1 (aurora-test-cluster-read-replica-1) がプライマリ DB に昇格することになる。

なお、Amazon Aurora の仕様では、優先度が同じ場合は、その中でサイズが最も大きいリードレプリカが選択される。 優先度もサイズも同じ場合は、その中からランダムに選択される。

AWS マネジメントコンソールによる手動のフェイルオーバーを発生させる方法

事前の準備が必要ないので、最も単純に実施できる方法である。

1. AWS マネジメントコンソールで Amazon RDS のコンソールに移動する

手動フェイルオーバー-1

2. 「データベース」を選択する

手動フェイルオーバー-2

3. DB クラスタと DB インスタンスの「ステータス」を確認する

DB クラスタと DB インスタンスとリードレプリカの「ステータス」が「利用可能」であることを確認する。

手動フェイルオーバー-3

4. フェイルオーバーを発生させる

「アクション > フェイルオーバー」を選択する。

手動フェイルオーバー-4-1

フェイルオーバーを発生させるクラスタクラスタ名 (ここでは、aurora-test-cluster) を確認する。 間違いがなければ「フェイルオーバー」を選択する。

手動フェイルオーバー-4-2

5. フェイルオーバーの発生を確認する

問題がなければ、元の「データベース」の画面に戻る。 画面のリフレッシュを行うと、DB クラスタののステータスが「Failing-over」となる。

手動フェイルオーバー-5

DB クラスタに1つ以上のリードレプリカが含まれる場合、一般的には120秒未満、多くの場合は60秒未満でリードレプリカの1つへのフェイルオーバーが完了する。

DB クラスタに1つ以上のリードレプリカが含まれない場合は、DB インスタンスの再作成処理が行われる。通常は10分未満で完了する。

6. フェイルオーバーの完了を確認する

1分程度待ち、「ステータス」が「利用可能」となれば、フェイルオーバーは完了。

手動フェイルオーバー-6

今回のフェイルオーバーにより、リードレプリカ 1 (aurora-test-cluster-read-replica-1) がプライマリ DB に昇格して、元プライマリ DB がリードレプリカとなったため、期待通り。

参考文献