SQL Serverで高可用性とディザスタリカバリを実現するための最も強力な機能の一つが「Always On可用性グループ」です。
従来のデータベースミラーリングやログ配布に替わる現代的な高可用性ソリューションとして、SQL Server 2012以降で広く採用されています。
本記事では、Always On可用性グループの概要・仕組み・主要コンポーネント・フェイルオーバーの動作・設計・運用のポイントについて詳しく解説していきます。
SQL Serverの管理・設計を担当するDBAやインフラエンジニアの方に役立つ内容をお届けします。
Always On可用性グループとは何か?概要と特徴
それではまず、Always On可用性グループの概要と特徴について解説していきます。
Always On可用性グループ(Always On Availability Groups、AG)とは、SQL Server 2012以降で提供されるエンタープライズレベルの高可用性・ディザスタリカバリ機能であり、複数のSQL Serverインスタンス間でデータベースをリアルタイムで同期し、障害時に自動または手動でフェイルオーバーを行う仕組みです。
従来の高可用性技術との違い
Always On可用性グループはSQL Server以前の高可用性技術(データベースミラーリング・ログ配布)と比べて多くの優れた特性を持ちます。
| 機能 | Always On AG | ミラーリング | ログ配布 |
|---|---|---|---|
| 対象単位 | データベースグループ | 1データベース | 1データベース |
| 最大レプリカ数 | 最大9台(SQL 2019) | 2台 | 複数台 |
| セカンダリの読み取り | 可能(読み取り専用) | 制限あり | 可能 |
| 自動フェイルオーバー | 対応 | 対応 | 非対応 |
| RPO | 同期モード:0秒 | 0秒 | 数分〜 |
Always On可用性グループは複数のデータベースをグループとして管理でき、セカンダリレプリカを読み取り専用として活用することで報告・分析用途に活用できる点が大きな利点です。
Always On可用性グループの主要コンポーネント
Always On可用性グループを構成する主なコンポーネントは以下の通りです。
可用性グループ(Availability Group):1つ以上のデータベースを管理するグループ単位
プライマリレプリカ:読み書き可能なメインのデータベースを持つSQL Serverインスタンス
セカンダリレプリカ:プライマリからデータを受け取って同期するSQL Serverインスタンス(最大8台)
可用性グループリスナー:クライアントがプライマリ・セカンダリに透過的に接続するための仮想ネットワーク名
Windowsサーバーフェイルオーバークラスタリング(WSFC):Always On AGの基盤となるクラスタリング技術
Always On可用性グループの同期モードとフェイルオーバー
続いては、Always On可用性グループの同期モードとフェイルオーバーの動作を確認していきます。
同期モードの選択はRPO(目標復旧時点)とパフォーマンスに直接影響するため、適切な理解が重要です。
同期コミットモードと非同期コミットモード
Always On可用性グループには二つの同期モードがあります。
同期コミットモード(Synchronous-Commit):プライマリでのトランザクションコミットは、セカンダリがログの受信・ハード化を確認するまで待機。データ損失ゼロ(RPO=0)を実現できるが、セカンダリの応答待ちでレイテンシが増加する可能性がある。
非同期コミットモード(Asynchronous-Commit):プライマリはセカンダリの確認を待たずにコミットを完了。パフォーマンスへの影響が少ないが、フェイルオーバー時にデータ損失が発生する可能性がある(RPO>0)。地理的に離れたサイトへのDRレプリカに適している。
同一サイト内のセカンダリは同期コミット、地理的に離れたDRサイトは非同期コミットというように、レプリカの役割と距離に応じてモードを使い分けることが一般的なベストプラクティスです。
自動フェイルオーバーと手動フェイルオーバー
Always On可用性グループでは自動フェイルオーバーと手動フェイルオーバーの両方がサポートされています。
自動フェイルオーバーは同期コミットモードのレプリカ間でのみ設定可能であり、プライマリの障害を検出すると自動的にセカンダリにフェイルオーバーします。
手動フェイルオーバーは計画的なメンテナンスやDRテストの際に管理者が意図的に実行するフェイルオーバーです。
可用性グループリスナーによる透過的接続
可用性グループリスナーは、クライアントアプリケーションが現在のプライマリレプリカを意識せずに接続できる仮想ネットワーク名(VNN)とIPアドレスを提供します。
フェイルオーバー後もクライアントはリスナー名に接続するだけで自動的に新しいプライマリに接続されるため、アプリケーション側にフェイルオーバーを意識した実装をする必要がなく、透過的なフェイルオーバーが実現されます。
Always On可用性グループの設計と運用のポイント
続いては、Always On可用性グループの設計と運用における重要なポイントを確認していきます。
適切な設計と運用管理が、高可用性を継続的に維持するための鍵となります。
WSFCの設計と構成の注意点
Always On可用性グループはWindows Server フェイルオーバークラスタリング(WSFC)を基盤として動作するため、WSFCの適切な設計が前提条件となります。
クォーラム構成(ノードマジョリティ・ファイル共有監視・クラウド監視など)を正しく設定しないと、スプリットブレインの発生やクラスター全体の停止リスクがあります。
セカンダリレプリカの読み取り専用活用
Always On可用性グループのセカンダリレプリカを読み取り専用ワークロード(報告クエリ・バックアップ・DBCC確認など)に活用することで、プライマリの負荷を分散できます。
読み取りルーティングを設定することで、読み取り専用として接続を要求するクライアントをセカンダリに自動的にルーティングすることが可能です。
バックアップの設計とオフロード
Always On可用性グループ環境ではバックアップをセカンダリレプリカで実行することでプライマリへの負荷を軽減できます。
バックアップ優先設定(Backup Preference)を適切に構成することで、自動バックアップジョブが最適なレプリカで実行されるように制御できます。
まとめ
本記事では、Always On可用性グループの概要・主要コンポーネント・同期モード・フェイルオーバー・設計と運用のポイントについて解説してきました。
Always On可用性グループはSQL Server環境における最高水準の高可用性・ディザスタリカバリ機能であり、同期コミット・自動フェイルオーバー・可用性グループリスナーなどの機能を組み合わせることでRPO=0・最短のRTOを実現できます。
WSFCの適切な設計・同期モードの使い分け・リスナーを活用した透過的接続・セカンダリの読み取り活用といった設計ポイントを押さえることが、Always On可用性グループを本番環境で安定運用するための重要な前提となります。
SQL Serverの高可用性設計においてAlways On可用性グループを積極的に活用し、ビジネスの継続性を確保していきましょう。