フェイルオーバー
障害発生時にスタンバイシステムへ自動的に切り替え、サービスの継続性を確保する仕組み
可用性耐障害性
フェイルオーバーとは
フェイルオーバー (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 キャッシュでフェイルオーバー後も旧エンドポイントに接続し続ける
- コネクションプールが古い接続を保持し、新プライマリに接続できない
- フェイルオーバーのテストを一度もしていない
理論と実装の両面から学ぶなら関連書籍が参考になる。