0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

パブリッククラウドのゾーン縮退を検証する - IaaS編

Posted at

AWS上でALBとAutoscaling Groupで構成されたIaaSのシステムのゾーン縮退について検証してみました。

前回書いた記事(パブリッククラウドの大規模ゾーン障害について考える)で、ゾーン縮退をオプションとして用意しも良いのではないかと考えました。本記事はその検証です。

検証環境

ALBの下に、Autoscaling group経由でNginxを動作させているEC2をZone AとZone Cに1台づつぶら下げています。

IaaS_1.png

検証結果と考察

今回の構成ではゾーン縮退自体は可能でした。
但し、以下課題が残ります。

  1. どのゾーン(ゾーンID)が障害になったかオフィシャルには公開されなかった認識ですが、ゾーン縮退するために障害ゾーンの特定が必要
  2. ゾーンの属性がないサービス(WAF等)は、手動によるゾーン縮退ができない

ゾーン障害でもゾーン縮退よりディザスタリカバリ(DR)をするほうが、良いかもしれません。
念の為DRできるように準備するのでは無く2,3年に1回DRが発生する位のつもりで準備しておけば万全だと思います。

以下、ゾーン縮退の検証の詳細です。

1. ALBの特性

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html
ロードバランサー用のアベイラビリティーゾーンを有効にすると、Elastic Load Balancing はアベイラビリティーゾーンにロードバランサーノードを作成します。ターゲットをアベイラビリティーゾーンに登録したが、アベイラビリティーゾーンを有効にしていない場合、登録したターゲットはトラフィックを受信しません。

アベイラビリティーゾーンを無効にすると、そのアベイラビリティーゾーン内のターゲットはロードバランサーに登録されたままですが、ロードバランサーはトラフィックをターゲットにルーティングしなくなります。

AWSのドキュメントからの引用です。
障害の発生したALBのゾーンを無効化すればそのゾーンにトラフィックが流れなくなります。一方ALBに最低2ゾーン登録しておく必要があります。
つまり2ゾーン登録されている状態で、ゾーンを無効化するためには、同時に別のゾーンを追加する必要があります。

2. ALBのゾーン縮退の検証

Zone AとZone Cで構成されているシステムで、実際にZone Aを縮退させてみました。

No およその経過時間 Zone AのEC2へのトラフィック Zone CのEC2へのトラフィック ALBのヘルスチェック ALBのネットワークインターフェースの状態 説明
1 - Zone AとZone Cから流れる Zone AとZone Cから流れる Zone AとZone Cから流れる Zone AとZone C ALB変更前
2 0分 流れなくなる ALBに対しZone A無効化・Zone D追加を手動実行
3 2分半 Zone CとZone Dから流れる Zone AとZone CとZone Dから流れる Zone AとZone CとZone D ALBのZone Dのネットワークインターフェースが利用中になる
4 1時間 Zone CとZone Dから流れる Zone CとZone D

alb-seni.png

ALBでZone Aを無効化した直後から、Zone AのNginxへのトラフィックは来なくなりました。
また(ヘルスチェックを除き)ALBのZone Dのネットワークインターフェースが利用中になった位から、ALBのZone AのインターフェースからZone CのNginxへのトラフィックも来なくなりました。

手元で確認した限りでは、うまくゾーン縮退できているようです。

ALBはマネージドサービスでノードが直接見える訳ではなく、ALBのネットワークインターフェースが見えているだけなので、上図のALBのノードはあくまで推測です。

ALBに対しZone A無効化・Zone D追加を設定

alb_ac_to_cd.png

3. Autoscaling group配下のEC2インスタンスのゾーン縮退

ALBをゾーン縮退させれば障害ゾーンにあるEC2インスタンスにトラフィックは流れなくなりますが
障害ゾーンにあるEC2が無駄になります。

以下手順でAutoscaling group配下のEC2インスタンスに対しゾーン縮退させることが出来ます。

A. インスタンス台数が可変の場合

  1. Autoscaling groupから障害ゾーンに属するサブネットを削除
  2. 残ったサブネットにインスタンスが作成される
  3. 障害ゾーンに属するサブネットにあるインスタンスが削除される

1. Autoscaling groupから障害ゾーンに属するサブネットを削除

削除前
ac_2_1_before.png

削除後
ac_2_2_after.png

2. 残ったサブネットにインスタンスが作成される

ac_2_3_3dai.png

3. 障害ゾーンに属するサブネットにあるインスタンスが削除される

ac_2_4_2dai.png

B. インスタンス台数固定の場合

  1. 障害ゾーン以外のインスタンスに対し、Instance protectionを設定
  2. Autoscaling gropuのインスタンス数を変更
  3. 障害ゾーンのインスタンスが削除される

1. 障害ゾーン以外のインスタンスに対し、Instance protectionを設定

ac_1_1_2dai.png

2. Autoscaling gropuのインスタンス数を変更

ac_1_2_2_to_1.png

3. 障害ゾーンのインスタンスが削除される

ac_1_3_1dai.png
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?