フェイルオーバー

障害発生時にスタンバイシステムへ自動的に切り替え、サービスの継続性を確保する仕組み

可用性耐障害性

フェイルオーバーとは

フェイルオーバー (Failover) は、プライマリシステムに障害が発生した際に、スタンバイシステムへ自動的に切り替えてサービスを継続する仕組みである。ダウンタイムを最小化し、高可用性 (HA) を実現する。

フェイルオーバーの種類

種類 切り替え時間 コスト
ホットスタンバイ 秒単位 高い (常時稼働) RDS Multi-AZ
ウォームスタンバイ 分単位 中程度 EC2 + AMI
コールドスタンバイ 時間単位 低い (停止状態) バックアップからの復元

RDS Multi-AZ フェイルオーバー

通常時:
  アプリ → プライマリ DB (AZ-a) ← 同期レプリケーション → スタンバイ DB (AZ-c)

障害時:
  アプリ → スタンバイ DB (AZ-c) が新プライマリに昇格 (60〜120 秒)

RDS Multi-AZ は DNS エンドポイントが変わらないため、アプリケーションの変更は不要。DNS の TTL が切れるまでの間、接続エラーが発生する可能性がある。

Route 53 ヘルスチェック + フェイルオーバー

Route 53 (フェイルオーバールーティング)
  ├── プライマリ: ALB (ap-northeast-1) ← ヘルスチェック OK
  └── セカンダリ: S3 静的サイト (sorry ページ)

プライマリのヘルスチェックが失敗 → セカンダリに自動切り替え

Aurora のフェイルオーバー

Aurora は RDS より高速なフェイルオーバー (30 秒以内) を提供する。リーダーインスタンスがライターに昇格する。

Aurora クラスター:
  ├── ライター (AZ-a) ← 障害発生
  ├── リーダー 1 (AZ-c) ← 新ライターに昇格
  └── リーダー 2 (AZ-d)

ElastiCache (Redis) のフェイルオーバー

Redis クラスター (Multi-AZ):
  ├── プライマリ (AZ-a) ← 障害発生
  └── レプリカ (AZ-c) ← 新プライマリに昇格 (数秒)

フェイルオーバーのテスト

フェイルオーバーは定期的にテストしないと、いざという時に動かない。

よくある失敗

  • DNS キャッシュでフェイルオーバー後も旧エンドポイントに接続し続ける
  • コネクションプールが古い接続を保持し、新プライマリに接続できない
  • フェイルオーバーのテストを一度もしていない

理論と実装の両面から学ぶなら関連書籍が参考になる。

関連用語