[新機能]RDS for Auroraでフェイルオーバー先の優先順序を指定できます
ウィスキー、シガー、パイプをこよなく愛する大栗です。
Auroraは高速なフェイルオーバーができますがフェイルオーバー先を指定することができませんでした。本日Auroraのフェイルオーバー先の優先順序を指定できるようになりましたので、ご紹介します。
Auroraのフェイルオーバーとは?
Aurora以外の普通のRDSでは以下の図のように、障害発生時に「スタンバイ」へ切り替えるフェイルオーバーと、レプリカをマスタに変更する昇格があります。昇格の場合は明示的に操作をする必要があります。
Auroraでは以下の図のように、スタンバイへの切り替えは無く、障害発生時に「レプリカ」へ切り替えるフェイルオーバーになります。動きとしては普通のRDSのフェイルオーバーと昇格の中間の様になります。
今までAuroraではフェイルオーバー先のレプリカを指定することができませんでした。負荷が大きいレプリカへフェイルオーバーする可能性があり、マスタとしての負荷とレプリカとしての負荷の両方がかかる場合があります。そのためバッチ用に利用していた場合などに過負荷になる可能性がありました。
これからは、Auroraの各インスタンスにフェイルオーバーの優先度として0〜15を設定できる様になり、切り替え先の優先順位を設定できます。
※:優先順位が同じ場合は、同じサブネット、同じAZの順で優先してフェイルオーバーします。
フェイルオーバーの優先度を設定する
Auroraを起動する時に[フェイルオーバー]-[優先度]という項目が増えており優先度を0〜15で設定可能です。
以下の様にAuroraのレプリカを各AZに2個のサブネットに配置して合計4インスタンスを置いて、フェイルオーバーの動きを確認して見ます。
全インスタンスの優先度を同じにする
全インスタンスの優先度、インスタンスクラスが同じ場合です。
レプリカ | 優先度 | インスタンスクラス | フェイルオーバー | 備考 |
---|---|---|---|---|
aurora-a1 (同じAZ,同じサブネット) | 1 |
db.r3.large | ◯ |
|
aurora-a2 (同じAZ,異なるサブネット) | 1 |
db.r3.large | ✕ |
|
aurora-c1 (異なるAZ,サブネット1) | 1 |
db.r3.large | ✕ |
|
aurora-c2 (異なるAZ,サブネット2) | 1 |
db.r3.large | ✕ |
最優先は同じサブネットになっています。
同じサブネットのインスタンスの優先度を下げる
同じサブネットのインスタンスの優先度を下げて、インスタンスクラスが同じ場合です。
レプリカ | 優先度 | インスタンスクラス | フェイルオーバー | 備考 |
---|---|---|---|---|
aurora-a1 (同じAZ,同じサブネット) | 5 |
db.r3.large | ✕ |
|
aurora-a2 (同じAZ,異なるサブネット) | 1 |
db.r3.large | ◯ |
|
aurora-c1 (異なるAZ,サブネット1) | 1 |
db.r3.large | ✕ |
|
aurora-c2 (異なるAZ,サブネット2) | 1 |
db.r3.large | ✕ |
AZでは同じAZが優先されています。
同じAZのインスタンスの優先度を下げる
同じAZのインスタンスの優先度を下げて、インスタンスクラスが同じ場合です。
レプリカ | 優先度 | インスタンスクラス | フェイルオーバー | 備考 |
---|---|---|---|---|
aurora-a1 (同じAZ,同じサブネット) | 5 |
db.r3.large | ✕ |
|
aurora-a2 (同じAZ,異なるサブネット) | 5 |
db.r3.large | ✕ |
|
aurora-c1 (異なるAZ,サブネット1) | 1 |
db.r3.large | ◯ |
|
aurora-c2 (異なるAZ,サブネット2) | 1 |
db.r3.large | ✕ |
優先度が高い場合に異なるAZへフェイルオーバーされます。
優先度が同じでインスタンスクラスが異なる
全インスタンスの優先度が同じで、異なるAZにあるインスタンスのインスタンスクラスを変更する場合です。
レプリカ | 優先度 | インスタンスクラス | フェイルオーバー | 備考 |
---|---|---|---|---|
aurora-a1 (同じAZ,同じサブネット) | 1 |
db.r3.large | ✕ |
|
aurora-a2 (同じAZ,異なるサブネット) | 1 |
db.r3.large | ✕ |
|
aurora-c1 (異なるAZ,サブネット1) | 1 |
db.r3.large | ✕ |
|
aurora-c2 (異なるAZ,サブネット2) | 1 |
db.r3.xlarge | ◯ |
同じ優先度の場合には大きいインスタンスへフェイルオーバーされます。
まとめ
Auroraのフェイルオーバー先は以下の条件で、上が優先の条件となり、フェイルオーバー先が決定します。
- 優先度の順番
- 大きいインスタンス
- 同じサブネット
- 同じAZ
フェイルオーバー先の決定ロジックはきちんと覚えておきましょう。
さいごに
今まではAuroraのフェイルオーバー先が決まっていなかったため、バッチ処理を行っていたり、データエクスポートをしていたりするレプリカへフェイルオーバーをする恐れがありました。これからは、フェイルオーバー先の優先順位を決めることができます。
レプリカの負荷が高い環境ではフェイルオーバー時にシステム全体がスローダウンすることもありました。これからはフェイルオーバー専用レプリカ等も設定することができるようになるのでAuroraの使い方の幅が広がりますね。