SQL Serverの高可用性と冗長化:AlwaysOn 可用性グループのフェイルオーバーの仕組み

データベースシステムの可用性を確保することは、エンタープライズ環境では極めて重要です。

SQL Serverの高可用性を実現する手段の一つとしてAlwaysOn 可用性グループ(AG: Availability Groups)が広く採用されています。

本記事では、SQL ServerのAlwaysOn 可用性グループを用いたフェイルオーバー(Failover)の仕組みについて詳しく解説します。

特に、手動フェイルオーバーと自動フェイルオーバーの動作原理やメリット・デメリットを深掘りし、実運用でのベストプラクティスを学びます。


フェイルオーバーの種類

フェイルオーバーとは、プライマリレプリカで障害が発生した際に、セカンダリレプリカへ処理を引き継ぐ仕組みです。AlwaysOn AGには以下の2種類のフェイルオーバーがあります。

自動フェイルオーバー(Automatic Failover)

  • 動作条件
    • プライマリレプリカがダウンすると、自動的にセカンダリレプリカへ切り替わる。
    • 同期コミットモード(Synchronous Commit Mode) で動作している必要がある。
    • ウィットネス(Windows Server Failover Clustering: WSFC)による正常性の監視が必要。
  • メリット
    • ダウンタイムが最小限に抑えられる。
    • 手動操作が不要で、業務の継続性が確保される。
  • デメリット
    • 同期コミットモードのオーバーヘッドにより、レイテンシ(遅延)が発生する可能性がある。
    • ネットワーク障害などで誤ったフェイルオーバーが発生するリスクがある。

手動フェイルオーバー(Manual Failover)

  • 動作条件
    • 管理者が手動でフェイルオーバーを実施する。
    • 同期・非同期どちらのモードでも動作可能。
  • メリット
    • 管理者の判断でフェイルオーバーを制御できる。
    • 非同期コミットモード(Asynchronous Commit Mode) でも適用でき、地理的に離れたサイト間の災害復旧(DR: Disaster Recovery)に適している。
  • デメリット
    • ダウンタイムが発生する。
    • フェイルオーバーの判断と操作を管理者が手動で行う必要がある。

フェイルオーバーの手順

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

  1. プライマリレプリカが障害を検知。
  2. WSFCがクォーラム(クラスタの投票)を確認。
  3. セカンダリレプリカがプライマリへ昇格。
  4. リスナーが新しいプライマリへルーティングを変更。
  5. クライアント接続が新プライマリへ自動的に切り替わる。

手動フェイルオーバーの実施

手動フェイルオーバーは、管理者がSQL Server Management Studio(SSMS)やPowerShellを使用して手動で切り替えます。

手順(SSMSの場合)
  1. SQL Server Management Studio(SSMS)を開く。
  2. 「AlwaysOn 可用性グループ」 を展開し、対象の可用性グループを右クリック。
  3. 「フェイルオーバー」を選択し、ウィザードを進める。
  4. 新しいプライマリレプリカを選択し、フェイルオーバーを実行。
手順(PowerShellの場合)
$agName = "YourAvailabilityGroupName"
Invoke-Sqlcmd -Query "ALTER AVAILABILITY GROUP [$agName] FAILOVER" -ServerInstance "YourSecondaryReplica"

ベストプラクティス

  1. 自動フェイルオーバーを設定する場合は、同期コミットモードを必ず有効化する。
  2. WSFCクラスターのクォーラム設定を適切に管理する。
  3. セカンダリレプリカを適切に分散し、災害復旧(DR)対策を併用する。
  4. 定期的にフェイルオーバーテストを実施し、手順を確認する。

演習問題

問題1: AlwaysOn AGのフェイルオーバーの仕組み

以下の選択肢のうち、AlwaysOn AGの自動フェイルオーバーが発生する条件として正しいものを選びなさい。

  1. プライマリレプリカが非同期モードで構成されている
  2. WSFCクラスターがクォーラムを失っている
  3. プライマリレプリカが障害を検知し、セカンダリレプリカが同期コミットモードで設定されている
  4. SQL Serverサービスが一時的に遅延している

解答:

問題2: フェイルオーバーの種類

AlwaysOn AGの手動フェイルオーバーが適用できるレプリカの構成として正しいものはどれか。

  1. プライマリレプリカとセカンダリレプリカが同期モードである場合のみ適用可能
  2. プライマリレプリカとセカンダリレプリカが非同期モードでも適用可能
  3. フェイルオーバーは完全に自動でしか実行できない
  4. フェイルオーバーはWindowsサーバーの再起動時にのみ発生する

解答:


おわりに

AlwaysOn 可用性グループは、SQL Serverの高可用性を実現する強力な仕組みですが、適切なフェイルオーバー戦略を理解し、設計することが重要です。

本記事を参考に、運用環境に最適なフェイルオーバーの設定を検討してみてください。