データベースシステムの可用性を確保することは、エンタープライズ環境では極めて重要です。
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)に適している。
- デメリット
- ダウンタイムが発生する。
- フェイルオーバーの判断と操作を管理者が手動で行う必要がある。
フェイルオーバーの手順
自動フェイルオーバーの仕組み
- プライマリレプリカが障害を検知。
- WSFCがクォーラム(クラスタの投票)を確認。
- セカンダリレプリカがプライマリへ昇格。
- リスナーが新しいプライマリへルーティングを変更。
- クライアント接続が新プライマリへ自動的に切り替わる。
手動フェイルオーバーの実施
手動フェイルオーバーは、管理者がSQL Server Management Studio(SSMS)やPowerShellを使用して手動で切り替えます。
手順(SSMSの場合)
- SQL Server Management Studio(SSMS)を開く。
- 「AlwaysOn 可用性グループ」 を展開し、対象の可用性グループを右クリック。
- 「フェイルオーバー」を選択し、ウィザードを進める。
- 新しいプライマリレプリカを選択し、フェイルオーバーを実行。
手順(PowerShellの場合)
$agName = "YourAvailabilityGroupName"
Invoke-Sqlcmd -Query "ALTER AVAILABILITY GROUP [$agName] FAILOVER" -ServerInstance "YourSecondaryReplica"
ベストプラクティス
- 自動フェイルオーバーを設定する場合は、同期コミットモードを必ず有効化する。
- WSFCクラスターのクォーラム設定を適切に管理する。
- セカンダリレプリカを適切に分散し、災害復旧(DR)対策を併用する。
- 定期的にフェイルオーバーテストを実施し、手順を確認する。
演習問題
問題1: AlwaysOn AGのフェイルオーバーの仕組み
以下の選択肢のうち、AlwaysOn AGの自動フェイルオーバーが発生する条件として正しいものを選びなさい。
- プライマリレプリカが非同期モードで構成されている
- WSFCクラスターがクォーラムを失っている
- プライマリレプリカが障害を検知し、セカンダリレプリカが同期コミットモードで設定されている
- SQL Serverサービスが一時的に遅延している
解答: 3
問題2: フェイルオーバーの種類
AlwaysOn AGの手動フェイルオーバーが適用できるレプリカの構成として正しいものはどれか。
- プライマリレプリカとセカンダリレプリカが同期モードである場合のみ適用可能
- プライマリレプリカとセカンダリレプリカが非同期モードでも適用可能
- フェイルオーバーは完全に自動でしか実行できない
- フェイルオーバーはWindowsサーバーの再起動時にのみ発生する
解答: 2
おわりに
AlwaysOn 可用性グループは、SQL Serverの高可用性を実現する強力な仕組みですが、適切なフェイルオーバー戦略を理解し、設計することが重要です。
本記事を参考に、運用環境に最適なフェイルオーバーの設定を検討してみてください。