rights reserved. 1. 耐障害性 a. 冗⻑化 - マルチ AZ 冗⻑化 の実装 • コンテナの AZ 分散配置 • インスタンスの AZ 分散配置 • Amazon EC2 Auto Scaling : Auto Scaling Group にて AZ 戦略を設定 • インスタンススケーリング時に指定 AZ で均等に配置 • Amazon EKS Auto Mode, Karpenter : デフォルトで AZ 分散 • Pod の配置戦略に合わせて、インスタンスを AZ に起動 ASG Capacity Provider Managed Node Group / Cluster Autoscaler Auto Mode EC2 Fleet ASG でスケール時に AZ 分散 Pod 配置戦略に沿って AZ に インスタンスを起動 https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/ec2-auto-scaling-availability-zone-balanced.html 19
rights reserved. 2. 障害分離 a. AZ 独⽴性 Region AZ-1 AZ-2 AZ-3 Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container トラフィックを AZ 内に閉じる事で、 障害を分離する ※プライマリ DB 接続等、必要な場合を除く https://docs.aws.amazon.com/ja_jp/whitepapers/latest/advanced-multi-az-resilience-patterns/availability-zone-independence.html https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html AWS Cloud Map Primary DB Reader DB Reader DB Reader DB 39
rights reserved. 2. 障害分離 a. AZ 独⽴性 Region AZ-1 AZ-2 AZ-3 Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container https://docs.aws.amazon.com/ja_jp/whitepapers/latest/advanced-multi-az-resilience-patterns/availability-zone-independence.html https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html AWS Cloud Map Primary DB Reader DB Reader DB Reader DB サービス間通信が発⽣する状況で、 AZ 障害時の回避可能性が⾼い フロント切離しで AZ 退避(後述)が可能 トラフィックを AZ 内に閉じる事で、 障害を分離する ※プライマリ DB 接続等、必要な場合を除く 40
rights reserved. 2. 障害分離 b. AZ 退避 – 静的安定性を考慮した退避が重要 • 静的安定性とは § 依存先に障害が発⽣しても、 追加の変更を加える必要がなく、通常どおり動作し続ける状態 1. 新規のリソースは可能な限り作成しない → 事前プロビジョニング 50% 50% 50% Availability Zone A Availability Zone B Availability Zone C 46
rights reserved. https://aws.amazon.com/jp/blogs/news/using-cross-zone-load- balancing-with-zonal-shift/ 2. 障害分離 b. AZ 退避 - Application Recovery Controller - ゾーンシフト 特定 AZ の ALB への ルーティングを退避 シフト時の挙動 1. 障害が発⽣した AZ の IP アドレスを DNS から削除(データプレーン動作) 2. 障害が発⽣した AZ のターゲットへの すべてのトラフィックをブロック シフト状態 51
rights reserved. https://aws.amazon.com/jp/blogs/news/using-cross-zone-load- balancing-with-zonal-shift/ 特定 AZ の ALB ターゲットを削除 2. 障害分離 b. AZ 退避 - Application Recovery Controller - ゾーンシフト シフト時の挙動 1. 障害が発⽣した AZ の IP アドレスを DNS から削除(データプレーン動作) 2. 障害が発⽣した AZ のターゲットへの すべてのトラフィックをブロック 52 シフト状態
rights reserved. 2. 障害分離 b. AZ 退避 – 障害検知 56 [1] https://health.aws.amazon.com/health/status [2] https://aws.amazon.com/jp/blogs/networking-and-content-delivery/configuring-amazon-application- recovery-controller-zonal-autoshift-observer-notifications/ どのように AZ 退避をキックするのか 1. システムメトリクスから、特定 AZ での障害を検知する 2. 外形監視により、特定 AZ の顧客体験メトリクス毀損をチェックする 3. AWS が提供するイベントを利⽤する 1. Service Health Dashboard の利⽤[1] 2. オートシフトオブザーバー通知[2]
rights reserved. どのように AZ 退避をキックするのか 1. システムメトリクスから、特定 AZ での障害を検知する 2. 外形監視により、特定 AZ の顧客体験メトリクス毀損をチェックする 3. AWS が提供するイベントを利⽤する 1. Service Health Dashboard の利⽤[1] 2. オートシフトオブザーバー通知[2] 2. 障害分離 b. AZ 退避 – 障害検知 6/26 14:50 - 15:30 AWS におけるグレー障害の検出と対策 57
rights reserved. 2. 障害分離 b. AZ 退避 – 障害検知 58 [1] https://health.aws.amazon.com/health/status [2] https://aws.amazon.com/jp/blogs/networking-and-content-delivery/configuring-amazon-application- recovery-controller-zonal-autoshift-observer-notifications/ どのように AZ 退避をキックするのか 1. システムメトリクスから、特定 AZ での障害を検知する 2. 外形監視により、特定 AZ の顧客体験メトリクス毀損をチェックする 3. AWS が提供するイベントを利⽤する 1. Service Health Dashboard の利⽤[1] 2. オートシフトオブザーバー通知[2]
rights reserved. b. 障害分離 考慮事項 • コスト効率低下 • 各 AZ での冗⻑化、かつ、事前プロビジョニング • 設計が複雑化する • AZ ごとの接続エンドポイント管理 ※特にフェイルオーバー時や退避の考慮 • AZ 毎のリソース管理 • AZ 退避の仕組み検討(特に Application Recovery Controller 未対応のサービス) →重要な⾼可⽤性⽬標を持つコンポーネントやパスへの適⽤を検討する 59
rights reserved. ⾼可⽤性設計検討ポイント振り返り 1. 耐障害性 a. 冗⻑化 b. 通信の信頼性 • ⾼速な切り離し︓ ヘルスチェック、サーキットブレーカー • 瞬断の軽減︓ リトライとタイムアウト 2. 障害分離 a. AZ 独⽴性 b. AZ 退避 Region AZ-1 AZ-2 AZ-3 Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container AWS Cloud Map Primary DB Reader DB Reader DB Reader DB 61
rights reserved. Key Takeaway • 「障害は必ず発⽣する」を前提に、⾼速に復旧させる設計を検討する • ⾼可⽤性に向けた設計検討ポイント • 障害シナリオと復旧⽬標を元に、どの設計パターンを導⼊するか検討 しましょう 1. 耐障害性 a. 冗⻑化 b. 通信の信頼性 2. 障害分離 a. AZ 独⽴性(トラフィック、デプロイ) b. AZ 退避 72
rights reserved. • Amazon ECS の機能として、Service Discovery や Service Connect には AZ に 閉じて通信を⾏う機能は現時点では存在しない • ECS Service を AZ 単位で作成することで、明⽰的に AZ を指定したルーティング が実現可能 79 2. 障害分離 a. AZ 独⽴性 - コンテナ側のトラフィックハンドリング Amazon ECS AZ-1 AZ-2 Amazon ECS Container Container Container Container Container Container Container Container Container Container Container Container ECS Service ECS Service ECS Service ECS Service