フェイルオーバーとは?高可用性を実現する仕組みを徹底解説【障害対策の基礎】

Web

「サーバーが落ちたら、サービスが全部止まってしまう…」
「システムダウンによる損失を最小限に抑えたい!」

現代のビジネスでは、システムの停止は大きな損失につながります。そこで重要になるのがフェイルオーバーという技術です。

フェイルオーバーは、障害が発生した時に自動的に予備のシステムへ切り替える仕組み。この技術により、ユーザーはシステムの障害をほとんど意識することなく、サービスを継続して利用できるんです。

この記事では、フェイルオーバーの基礎から実践的な実装方法まで、初心者の方にも分かりやすく解説していきます!


スポンサーリンク
  1. フェイルオーバーとは?基本を理解しよう
    1. 一言で説明すると
    2. 身近な例で理解しよう
  2. フェイルオーバーの仕組み
    1. 基本的な構成
    2. 詳細な処理フロー
  3. フェイルオーバーの種類
    1. アクティブ/スタンバイ構成
    2. アクティブ/アクティブ構成
    3. ホットスタンバイ
    4. コールドスタンバイ
    5. ウォームスタンバイ
  4. フェイルオーバーの実装例
    1. データベースのフェイルオーバー
    2. Webサーバーのフェイルオーバー
    3. ロードバランサーでのフェイルオーバー
  5. クラウド環境でのフェイルオーバー
    1. AWS での実装
    2. Azure での実装
    3. GCP での実装
  6. フェイルオーバーのメリット
    1. 1. ダウンタイムの最小化
    2. 2. ビジネス継続性(BCP)
    3. 3. 顧客満足度の向上
    4. 4. 計画メンテナンスの容易化
  7. フェイルオーバーのデメリット
    1. 1. コストの増加
    2. 2. 複雑性の増大
    3. 3. データ同期の問題
    4. 4. スプリットブレイン
  8. フェイルオーバーとフェイルバック
    1. フェイルバックとは
    2. フェイルバックの種類
    3. フェイルバックの注意点
  9. ヘルスチェックの重要性
    1. ヘルスチェックの種類
    2. ヘルスチェックの設計ポイント
  10. 実践的な設計パターン
    1. パターン1:Webアプリケーションの高可用性
    2. パターン2:地理的冗長構成
    3. パターン3:マルチクラウド構成
  11. よくある質問
    1. Q1. フェイルオーバーは完全に自動化できる?
    2. Q2. フェイルオーバー中にデータは失われる?
    3. Q3. 予備システムの性能は同等である必要がある?
    4. Q4. フェイルオーバーのテストはどのくらいの頻度で?
    5. Q5. クラウドなら自動的にフェイルオーバーされる?
  12. まとめ:フェイルオーバーで高可用性を実現しよう

フェイルオーバーとは?基本を理解しよう

一言で説明すると

フェイルオーバーとは、メインシステムに障害が発生した際、自動的に予備システムに切り替えてサービスを継続する仕組みです。

日本語では「障害時自動切替」や「自動待機系切替」と呼ばれることもあります。

身近な例で理解しよう

野球のピッチャー交代をイメージ:

先発ピッチャー(メインシステム):

  • 試合開始から投げ続ける
  • 体調が悪くなる(障害発生)

救援ピッチャー(予備システム):

  • ブルペンで準備して待機
  • 先発が降板したら、すぐにマウンドへ
  • 試合を続行(サービス継続)

フェイルオーバーも、この交代劇と同じ仕組みなんです。

もう一つの例:消防署の待機体制:

  • 第1出動隊が出動中(メインが稼働中)
  • 別の火災が発生(障害発生)
  • 第2出動隊がすぐに出動(フェイルオーバー)
  • 常に誰かが対応できる体制(高可用性)

フェイルオーバーの仕組み

基本的な構成

通常時:

クライアント → メインサーバー(稼働中)
                予備サーバー(待機中)

障害発生時:

クライアント → メインサーバー(停止)
              ↓ 自動切替
                予備サーバー(稼働開始)

詳細な処理フロー

ステップ1:常時監視

監視システムが、メインサーバーの状態を常に確認しています。

監視内容:

  • サーバーの応答時間
  • CPUやメモリの使用率
  • ネットワーク接続
  • アプリケーションの動作状況

ステップ2:障害検知

メインサーバーから応答がない、または異常な状態を検知します。

検知方法:

  • ハートビート(定期的な生存確認信号)が途絶える
  • ヘルスチェックに失敗
  • 応答時間が閾値を超える

ステップ3:切替判断

本当に切り替えるべきか判断します。

判断基準:

  • 複数回の確認(誤検知を防ぐ)
  • タイムアウト時間の設定
  • 予備システムの準備状況

ステップ4:フェイルオーバー実行

予備システムを起動し、トラフィックを切り替えます。

実行内容:

  • 予備システムの起動(既に起動していることも)
  • IPアドレスの切替
  • DNSの更新
  • ロードバランサーの設定変更

ステップ5:サービス継続

予備システムが新しいメインとして動作を開始します。


フェイルオーバーの種類

アクティブ/スタンバイ構成

最も一般的な構成です。

特徴:

  • メインシステムが稼働中
  • 予備システムは待機状態
  • 障害時に予備が起動

メリット:

  • シンプルで分かりやすい
  • コストが比較的安い
  • 設定が容易

デメリット:

  • 予備システムが遊んでいる(リソースの無駄)
  • 切替に時間がかかることがある

図解:

通常時:
メインサーバー [稼働中] ← クライアント
予備サーバー   [待機中]

障害時:
メインサーバー [停止]
予備サーバー   [稼働中] ← クライアント

アクティブ/アクティブ構成

両方のシステムが常に稼働している構成です。

特徴:

  • 全てのサーバーが同時に稼働
  • 負荷分散も同時に実現
  • 1台が落ちても残りで継続

メリット:

  • リソースの無駄がない
  • 負荷分散による性能向上
  • 切替が高速

デメリット:

  • 構成が複雑
  • データ同期が必要
  • コストが高い

図解:

通常時:
サーバー1 [稼働中] ← クライアント
サーバー2 [稼働中] ← クライアント

障害時:
サーバー1 [停止]
サーバー2 [稼働中] ← クライアント(全てのトラフィック)

ホットスタンバイ

予備システムが常に起動している状態です。

特徴:

  • 予備システムも起動済み
  • データは常に同期
  • 瞬時に切替可能

切替時間:
数秒~数十秒

コールドスタンバイ

予備システムが停止している状態です。

特徴:

  • 予備システムは電源オフ
  • 障害時に起動開始
  • 低コスト

切替時間:
数分~数十分

ウォームスタンバイ

ホットとコールドの中間です。

特徴:

  • 予備システムは起動済み
  • データ同期は定期的
  • バランスの良い構成

切替時間:
数十秒~数分


フェイルオーバーの実装例

データベースのフェイルオーバー

MySQL レプリケーション

マスター・スレーブ構成:

マスターDB(書き込み・読み込み)
    ↓ レプリケーション
スレーブDB(読み込みのみ)

障害時:
スレーブをマスターに昇格させます。

設定例(簡略版):

-- マスター側
CHANGE MASTER TO MASTER_HOST='slave-server';

-- スレーブ側
CHANGE MASTER TO MASTER_HOST='master-server';
START SLAVE;

PostgreSQL Streaming Replication

# プライマリサーバーの設定
# postgresql.conf
wal_level = replica
max_wal_senders = 3

# スタンバイサーバーの設定
# standby.signal(ファイルを作成)
primary_conninfo = 'host=primary-server port=5432'

自動フェイルオーバーツール:

  • Patroni
  • repmgr
  • pgpool-II

Webサーバーのフェイルオーバー

Nginx + Keepalived

KeepalivedでVIP(仮想IPアドレス)を管理します。

keepalived.conf(マスター):

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100

    virtual_ipaddress {
        192.168.1.100
    }
}

keepalived.conf(バックアップ):

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90

    virtual_ipaddress {
        192.168.1.100
    }
}

マスターが落ちると、バックアップが自動的にVIPを引き継ぎます。

ロードバランサーでのフェイルオーバー

HAProxy の設定

backend web_servers
    balance roundrobin
    option httpchk GET /health

    server web1 192.168.1.10:80 check
    server web2 192.168.1.11:80 check backup
    server web3 192.168.1.12:80 check backup

動作:

  • web1が正常なら、全てweb1へ
  • web1が落ちたら、web2とweb3で負荷分散

クラウド環境でのフェイルオーバー

AWS での実装

RDS Multi-AZ

AWSのRDS(Relational Database Service)では、Multi-AZ機能で自動フェイルオーバーが可能です。

特徴:

  • マスターとスタンバイを異なるAZ(アベイラビリティゾーン)に配置
  • 同期レプリケーション
  • 自動フェイルオーバー(1~2分)

設定:

# AWS CLIでの設定
aws rds create-db-instance \
    --db-instance-identifier mydb \
    --multi-az \
    --db-instance-class db.t3.medium

ELB(Elastic Load Balancer)

複数のEC2インスタンス間で自動的にフェイルオーバーします。

ヘルスチェック設定:

{
  "HealthCheckPath": "/health",
  "HealthCheckIntervalSeconds": 30,
  "HealthCheckTimeoutSeconds": 5,
  "HealthyThresholdCount": 2,
  "UnhealthyThresholdCount": 2
}

Azure での実装

Azure SQL Database

自動フェイルオーバーグループ機能があります。

設定:

# フェイルオーバーグループの作成
New-AzSqlDatabaseFailoverGroup `
    -ResourceGroupName "myResourceGroup" `
    -ServerName "primary-server" `
    -PartnerServerName "secondary-server" `
    -FailoverGroupName "myFailoverGroup"

Azure Traffic Manager

DNSベースのフェイルオーバーを提供します。

エンドポイント設定:

{
  "type": "Microsoft.Network/trafficManagerProfiles",
  "properties": {
    "trafficRoutingMethod": "Priority",
    "endpoints": [
      {
        "name": "primary",
        "type": "Microsoft.Network/trafficManagerProfiles/azureEndpoints",
        "priority": 1
      },
      {
        "name": "secondary",
        "priority": 2
      }
    ]
  }
}

GCP での実装

Cloud SQL

高可用性構成でフェイルオーバーが可能です。

# gcloudコマンドでのHA有効化
gcloud sql instances create myinstance \
    --availability-type=REGIONAL \
    --region=us-central1

フェイルオーバーのメリット

1. ダウンタイムの最小化

サービスの停止時間を劇的に減らせます。

例:

  • フェイルオーバーなし:数時間のダウンタイム
  • フェイルオーバーあり:数秒~数分の切替時間

2. ビジネス継続性(BCP)

災害や障害時でも、事業を継続できます。

重要な指標:

RTO(Recovery Time Objective):
目標復旧時間。どれだけ早く復旧するか。

RPO(Recovery Point Objective):
目標復旧時点。どこまでデータを復元するか。

フェイルオーバーにより、RTOとRPOを大幅に改善できます。

3. 顧客満足度の向上

ユーザーはサービスの中断をほとんど意識しません。

効果:

  • 離脱率の低下
  • 信頼性の向上
  • ブランドイメージの維持

4. 計画メンテナンスの容易化

メンテナンス時も、フェイルオーバーを利用できます。

手順:

  1. 予備システムに切替
  2. メインシステムをメンテナンス
  3. 完了後にフェイルバック

ダウンタイムなしでメンテナンス可能です。


フェイルオーバーのデメリット

1. コストの増加

予備システムの分だけ、コストが上がります。

必要なコスト:

  • 追加のハードウェア
  • ソフトウェアライセンス
  • 運用管理の人件費
  • データセンターの費用

2. 複雑性の増大

システムが複雑になり、管理が難しくなります。

課題:

  • 設定ミスのリスク
  • トラブルシューティングの難易度
  • ドキュメント管理の負担

3. データ同期の問題

完全なデータ同期は難しい場合があります。

同期の課題:

  • ネットワーク遅延
  • 書き込み競合
  • 同期遅延(レプリケーションラグ)

4. スプリットブレイン

ネットワーク分断により、両方のシステムが同時にマスターになる問題です。

発生条件:

  • ネットワーク障害
  • ハートビートの失敗

対策:

  • クォーラム(過半数)の確認
  • フェンシング(強制停止)
  • STONITH(Shoot The Other Node In The Head)

フェイルオーバーとフェイルバック

フェイルバックとは

障害が復旧した後、元のシステムに戻す操作です。

流れ:

1. 通常運用(メイン稼働)
2. 障害発生
3. フェイルオーバー(予備に切替)
4. メイン復旧
5. フェイルバック(メインに戻す)

フェイルバックの種類

自動フェイルバック:

  • メインが復旧したら自動的に戻る
  • 管理が楽
  • 不安定な復旧だと再障害のリスク

手動フェイルバック:

  • 管理者が判断して戻す
  • 慎重な運用が可能
  • 手間がかかる

フェイルバックの注意点

データの整合性確認:
フェイルオーバー中に更新されたデータを、元のシステムに反映する必要があります。

タイミングの選択:
業務影響の少ない時間帯に実施しましょう。

十分なテスト:
本当に元のシステムが正常か、入念に確認します。


ヘルスチェックの重要性

フェイルオーバーの精度は、ヘルスチェックの品質で決まります。

ヘルスチェックの種類

ICMP Ping:

ping -c 3 192.168.1.10

最もシンプルですが、サーバーが生きているだけで、アプリが正常かは分かりません。

TCP接続チェック:

nc -zv 192.168.1.10 80

ポートが開いているか確認します。

HTTP/HTTPSチェック:

curl -f http://192.168.1.10/health

アプリケーションレベルでの正常性を確認できます。

アプリケーション固有チェック:

# データベース接続確認
mysql -h 192.168.1.10 -e "SELECT 1"

実際の機能が動作するか確認します。

ヘルスチェックの設計ポイント

適切な間隔:

  • 短すぎる:負荷が増える
  • 長すぎる:障害検知が遅れる
  • 推奨:10~30秒

タイムアウト設定:

  • ネットワーク遅延を考慮
  • 誤検知を防ぐ

リトライ回数:

失敗 → 再確認 → 失敗 → 再確認 → 失敗 → フェイルオーバー

複数回確認してから切り替えると安全です。


実践的な設計パターン

パターン1:Webアプリケーションの高可用性

クライアント
    ↓
ロードバランサー(冗長化)
    ↓
Webサーバー x 3(アクティブ/アクティブ)
    ↓
DBサーバー(マスター/スレーブ)

ポイント:

  • ロードバランサー自体も冗長化
  • Webサーバーは複数台でアクティブ
  • DBはレプリケーションでスタンバイ

パターン2:地理的冗長構成

東京データセンター(プライマリ)
    ↓ 同期
大阪データセンター(セカンダリ)

メリット:

  • 災害対策(DR)
  • 地震などの広域災害にも対応

課題:

  • 拠点間の通信遅延
  • コストが高い

パターン3:マルチクラウド構成

AWS(メイン)
    ↓ DNS切替
Azure(バックアップ)

メリット:

  • クラウド障害への対応
  • ベンダーロックインの回避

よくある質問

Q1. フェイルオーバーは完全に自動化できる?

多くの場合、自動化できます。

ただし、スプリットブレインなどの複雑な状況では、人間の判断が必要になることもあります。

Q2. フェイルオーバー中にデータは失われる?

構成によります。

同期レプリケーションなら、ほぼデータロスなし。非同期レプリケーションでは、数秒~数分のデータが失われる可能性があります。

Q3. 予備システムの性能は同等である必要がある?

理想的には同等ですが、必須ではありません。

ピーク時の負荷に耐えられる性能があれば、一時的には性能が低くても問題ない場合もあります。

Q4. フェイルオーバーのテストはどのくらいの頻度で?

最低でも年2回、できれば四半期に1回が推奨されます。

本当に動作するか、定期的な確認が重要です。

Q5. クラウドなら自動的にフェイルオーバーされる?

設定次第です。

AWSのMulti-AZ RDSなど、自動フェイルオーバー機能を持つサービスもありますが、適切な設定が必要です。


まとめ:フェイルオーバーで高可用性を実現しよう

フェイルオーバーについて、基礎から実践まで解説してきました。

重要ポイントのおさらい:

  1. 障害時の自動切替が基本
    メインから予備へ、シームレスに移行
  2. アクティブ/スタンバイが一般的
    シンプルで分かりやすい構成
  3. ヘルスチェックが成功の鍵
    適切な監視で確実な障害検知
  4. データ同期の設計が重要
    RPOとRTOを考慮した構成
  5. 定期的なテストが必須
    本当に動作するか確認を怠らない

フェイルオーバーは、現代のシステムにおいて必須の技術です。ビジネスの継続性を守り、ユーザーに安定したサービスを提供するために、ぜひ導入を検討してくださいね!

コメント

タイトルとURLをコピーしました