こんにちは、運用開発グループの森です。
現在、私が担当しているサービスにおいて、AZ 障害が発生した場合には、Amazon Route 53 Application Recovery Controller のゾーンシフト機能を利用し、障害が発生した AZ をサービスから切り離すことを検討しています。この機能を導入することで、期待通りにサービスから切り離されるまでの時間を検証しました。
ゾーンシフトとは
詳細については参照先をご確認いただければと思いますが、以下が概要です。
https://aws.amazon.com/jp/about-aws/whats-new/2023/01/general-availability-amazon-route-53-application-recovery-controller-zonal-shift/
- AZ でのアプリケーション障害からの迅速な回復に役立つ
- ALB と NLB をサポート
- クロスゾーン負荷分散がオフになっている ALB、NLBで利用可
- ゾーンシフトは追加料金なしで使用可
- 東京リージョンは GA
- 他リージョンの詳細は以下参照
検証
まず、クロスゾーン負荷分散がオフになっている ALB を用意します。今回は東京リージョンで、ap-northeast-1a と ap-northeast-1c の二つの AZ でクロスゾーン負荷分散がオフになっている ALB を用意しました。
なお、ALB のクロスゾーン負荷分散は ALB の設定からではなく、ALB に関連付けされているターゲットグループから設定します。
ALB を準備しましたので、ALB の A レコードを確認してみます。ALB の DNS 名の A レコードは以下のとおり2件となり、各 AZ 毎に割り当てられた ENI の A レコードであることが分かります。
$ dig demo-183677942.ap-northeast-1.elb.amazonaws.com A +short
52.197.222.49
54.65.113.167
$ dig ap-northeast-1a.demo-183677942.ap-northeast-1.elb.amazonaws.com A +short
52.197.222.49
$ dig ap-northeast-1c.demo-183677942.ap-northeast-1.elb.amazonaws.com A +short
54.65.113.167
それでは早速、ap-northeast-1a を切り離します。以下の画面にあるように、Start zonal shift を押します。
次にゾーンシフトに必要な情報を入力します。
- Select the Availability Zone: 切り離したい AZ を選択
- Expires in: ゾーンシフトが実施されている期間を選択
- Comment: コメント
- Acknowledge: アプリケーションの処理量が減ることを理解してチェック
機能の目的を考えれば当然なのですが、無期限にゾーンシフトをし続けることは不可のようです。今回は以下のように入力し、最後に confirm を押して実行しました。
何度かゾーンシフトを試してみたところ、マネジメントコンソールには即時でゾーンシフトされていることが反映されますが、DNS に反映されるまでには1分以上処理に時間がかかっていることが分かりました。
ゾーンシフトした後の結果を確認します。
$ dig demo-183677942.ap-northeast-1.elb.amazonaws.com A +short
54.65.113.167
$ dig ap-northeast-1a.demo-183677942.ap-northeast-1.elb.amazonaws.com A +short
52.197.222.49
$ dig ap-northeast-1c.demo-183677942.ap-northeast-1.elb.amazonaws.com A +short
54.65.113.167
ALB の DNS 名の A レコードは1件のみで、ap-northeast-1c の値のみが設定されていることが分かります。ALB の DNS 名の A レコードから ap-northeast-1a の値が返却されないため、障害のある AZ への新規リクエストが流入しないようになります。
ゾーンシフトの振る舞いが分かりましたので、ゾーンシフトを戻してみます。以下のように、Cancel zonal shift を押し、次の画面で Confirm を押して実行します。
キャンセルについてもマネジメントコンソールには即時で反映されますが、DNS レコードへの反映には1分以上かかることが分かりました。
まとめ
ゾーンシフトを利用することで障害のある AZ をサービスから切り離すことが簡単に実現できることが分かりました。
2AZ 構成を採用していた場合、ゾーンシフトした際に処理量が減ってしまうことも考えられるため、AZ 障害時にゾーンシフトを必ず利用する必要性は低いと考えています。ただし、障害点を切り離してサービスの回復を優先する場合には、有効な手段であると思います。そのため、随時利用できるようにマニュアルを整備しました。
DNS レコードへの反映がもう少し早いことを期待していましたが、この点については今後のアップデートに期待したいところです。
参考リンク
3.https://docs.aws.amazon.com/elasticloadbalancing/latest/application/zonal-shift.html