フェイルオーバー

このセクションでは、フェイルオーバーを行い、その挙動を確認します。

オプションのページでも確認していますが、改めて動きを確認してみます。

  • フェイルオーバーが発生する(必要になる)状況は複数ありえますが、例えば、AZレベルの障害発生時が挙げられます。
  • AZ障害で writerノード の動作が不可能な状態になると、書き込みが行えなくなってしまい、サービスに大きな影響が出てしまいます。
  • そこで、readerノード を writerノードへ 昇格 させて、別の writerノード を用意するのが Auroraクラスターにおける フェイルオーバー です。

  • 新規にノードを起動する場合に比べ復旧が早く、writer がいない場合はAuroraでは自動的にフェイルオーバー行われます。

  • また、Aurora では 最大15ノード まで reader を追加できるため、様々なAZ、インスタンスタイプで用意しておくことで耐障害性を高めることができます。

では、実際に手順を行います。

  • まず、読み込みDB (reader) を再起動するとどうなるかを確認します
  • readerのパラメータグループを先ほどと同様の手順で変更します。
  • そして再起動を行い、状況を確認すると、次のような状況が確認できます。
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:27:19 | 97930 |
+----+---------------------+-------+
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:27:20 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:27:20 | 97930 |
+----+---------------------+-------+
---- reader ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-ro-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:27:21 | 97930 |
+----+---------------------+-------+
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:27:22 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:27:22 | 97930 |
+----+---------------------+-------+
  • こちらも再起動により数秒間接続できない状況が発生しました。
  • 接続先である「読み込みエンドポイント」は、TTLが1秒のDNSを利用しており、writerの方に接続先が素早く切り替わっています。
  • 今回は readerを複数(2つ以上)用意していないため 再起動の間は reader が 0個 になってしまいますが、事前に reader を追加しておくことで、writerへの負荷集中を避けることができます。

reader の設定が完了したので、フェイルオーバーを実行し、この readerノード を writer に変更します。 reader のDBを選択し、「アクション」から「フェイルオーバー」をクリックし、実行します。

---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:46 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:46 | 97930 |
+----+---------------------+-------+
---- reader ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-ro-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:47 | 97930 |
+----+---------------------+-------+
---- reader ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-ro-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- writer ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- reader ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-ro-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- writer ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- reader ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-ro-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- writer ----
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
ERROR 2003 (HY000): Can't connect to MySQL server on 'aurora-user1-cluster.cluster-hogehoge.ap-northeast-1.rds.amazonaws.com' (111)
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
ERROR 1290 (HY000) at line 1: The MySQL server is running with the --read-only option so it cannot execute this statement
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
ERROR 1290 (HY000) at line 1: The MySQL server is running with the --read-only option so it cannot execute this statement
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
ERROR 1290 (HY000) at line 1: The MySQL server is running with the --read-only option so it cannot execute this statement
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
ERROR 1290 (HY000) at line 1: The MySQL server is running with the --read-only option so it cannot execute this statement
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
ERROR 1290 (HY000) at line 1: The MySQL server is running with the --read-only option so it cannot execute this statement
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
ERROR 1290 (HY000) at line 1: The MySQL server is running with the --read-only option so it cannot execute this statement
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
---- writer ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:48 | 97930 |
+----+---------------------+-------+
---- reader ----
+----+---------------------+-------+
| id | ts                  | value |
+----+---------------------+-------+
|  1 | 2020-xx-yy 12:46:59 | 97930 |
+----+---------------------+-------+
  • まずreaderへの接続がエラーになります。
  • 次にwriterへの接続もエラーになります。
    • ここで昇格処理が行われ、readerとwriterの役割が変更されています。
  • その後 数秒間、writerへの書き込みでエラーが出ています。
  • これはreader用の設定--read-onlyがまだ適用されており、書き込みが行えないためです。
  • その後、昇格処理が完了し、無事書き込みが行えるようになっています。