[新機能]RDS for Auroraでフェイルオーバー先の優先順序を指定できます

2016.03.15

ウィスキー、シガー、パイプをこよなく愛する大栗です。
Auroraは高速なフェイルオーバーができますがフェイルオーバー先を指定することができませんでした。本日Auroraのフェイルオーバー先の優先順序を指定できるようになりましたので、ご紹介します。

Auroraのフェイルオーバーとは?

Aurora以外の普通のRDSでは以下の図のように、障害発生時に「スタンバイ」へ切り替えるフェイルオーバーと、レプリカをマスタに変更する昇格があります。昇格の場合は明示的に操作をする必要があります。

normal-failover

Auroraでは以下の図のように、スタンバイへの切り替えは無く、障害発生時に「レプリカ」へ切り替えるフェイルオーバーになります。動きとしては普通のRDSのフェイルオーバーと昇格の中間の様になります。

aurora-failover

今までAuroraではフェイルオーバー先のレプリカを指定することができませんでした。負荷が大きいレプリカへフェイルオーバーする可能性があり、マスタとしての負荷とレプリカとしての負荷の両方がかかる場合があります。そのためバッチ用に利用していた場合などに過負荷になる可能性がありました。

これからは、Auroraの各インスタンスにフェイルオーバーの優先度として0〜15を設定できる様になり、切り替え先の優先順位を設定できます。

※:優先順位が同じ場合は、同じサブネット、同じAZの順で優先してフェイルオーバーします。

フェイルオーバーの優先度を設定する

Auroraを起動する時に[フェイルオーバー]-[優先度]という項目が増えており優先度を0〜15で設定可能です。

RDS_AWS_Console

以下の様にAuroraのレプリカを各AZに2個のサブネットに配置して合計4インスタンスを置いて、フェイルオーバーの動きを確認して見ます。

aurora-priority

全インスタンスの優先度を同じにする

全インスタンスの優先度、インスタンスクラスが同じ場合です。

レプリカ 優先度 インスタンスクラス フェイルオーバー 備考
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のフェイルオーバー先は以下の条件で、上が優先の条件となり、フェイルオーバー先が決定します。

  1. 優先度の順番
  2. 大きいインスタンス
  3. 同じサブネット
  4. 同じAZ

フェイルオーバー先の決定ロジックはきちんと覚えておきましょう。

さいごに

今まではAuroraのフェイルオーバー先が決まっていなかったため、バッチ処理を行っていたり、データエクスポートをしていたりするレプリカへフェイルオーバーをする恐れがありました。これからは、フェイルオーバー先の優先順位を決めることができます。
レプリカの負荷が高い環境ではフェイルオーバー時にシステム全体がスローダウンすることもありました。これからはフェイルオーバー専用レプリカ等も設定することができるようになるのでAuroraの使い方の幅が広がりますね。