夢見るエンジニアの肥溜めブログ

エンジニアである私の技術日記でございます。インターネッツという大海原にクソみたいな投稿を繰り返すのは申し訳なく思い、インターネットの片隅に肥溜めを配置しました。非常に環境に優しいブログです。

【Windows】SQL Server 2017 基本的な可用性グループ(AlwaysOn 可用性グループ)概要

SQL Server 2017 Standard Editionにおいて、基本的な可用性グループ(AlwaysOn 可用性グループ)を構築することとなったため、背景と構築手順を記す。

背景

  • SQL Server 2016より、Standard EditionにおいてもAlwaysOn 可用性グループが利用できるようになった。(ミラーリング機能の後継)
  • Standard EditionにおけるAlwaysON 可用性グループのことを"基本的な可用性グループ"と呼ぶ。
  • SQL Server 2016/2017でもミラーリング機能は利用できるが、非推奨である。(今後のバージョンアップで削除される可能性)
  • そのため、SQL Server 2016以降においては、基本的な可用性グループを利用することが一般的になっている。

AlwaysOn 可用性グループについて

  • データベースミラーリングに代わる、高可用性と災害復旧のための機能である。
  • 1つの書き込み/読み取り可能なプライマリデータベースと、1~8つの読み取り専用のセカンダリデータベースを構成する。
  • 上記を可用性データベースと呼ぶ。
  • 可用性グループ(可用性データベース)をインスタンス化したものを可用性レプリカと呼ぶ。
  • 可用性レプリカは、2種類ある。
    • プライマリ レプリカ
      クライアントからプライマリデータベースの読み取り/書き込みを可能にし、各プライマリデータベースのトランザクションログレコードをすべてのセカンダリレプリカに送信する。
    • セカンダリ レプリカ
      各可用性グループのセカンダリコピーを保持し、可用性グループの潜在的なフェールオーバターゲットとして機能する。必要に応じて、セカンダリデータベースへの読み取り専用アクセスと、セカンダリデータベース上でのバックアップ作成をサポートする。
  • セカンダリレプリカがディスクにトランザクションログレコードを書き込むまで、プライマリレプリカによるデータベースへのトランザクションのコミットを待機するかどうか決定する"可用性モード"がある。
  • 可用性モードは以下の2種類ある。
    • 非同期コミットモード(Asynchronous-commit mode)
      • この可用性モードを利用する可用性レプリカを非同期コミットレプリカと呼ぶ。
      • セカンダリレプリカのログ書き込みを待機せずに、プライマリレプリカがトランザクションをコミットする。
      • トランザクション遅延が最小となるメリットがある。
    • 同期コミットモード(Synchronous-commit mode)
      • この可用性モードを利用する可用性レプリカを同期コミットレプリカと呼ぶ。
      • セカンダリレプリカのログ書き込みを待機してから、プライマリレプリカがトランザクションをコミットする。
      • セカンダリデータベースへの書き込みを待機するため、トランザクションが完全に保護されることがメリットである。
      • ただし、トランザクションの遅延が増加するデメリットがある。
  • フェールオーバーと呼ばれるプロセスで、可用性レプリカのプライマリロールとセカンダリロールが交換される。
  • フェールオーバー動作実行時、セカンダリ レプリカがプライマリ ロールに移行し、新しいプライマリ レプリカとなる。
  • 元のプライマリレプリカが利用可能となると、セカンダリ ロールに移行し、セカンダリ レプリカになる。
  • フェールオーバーには以下の3種類の方式がある。
    • 計画的な手動フェールオーバー
      • データベース管理者が手動でフェールオーバーする方式である。
      • データ保護が保証される。
      • プライマリレプリカとフェールオーバー対象のセカンダリレプリカにおいて同期コミットモードが設定されている必要がある。
      • また、セカンダリ レプリカが既に同期されている必要がある。
    • 自動フェールオーバー
      • エラーが発生すると自動的にフェールオーバーする方式である。
      • データ保護が保証される。
      • プライマリレプリカとフェールオーバー対象のセカンダリレプリカにおいて同期コミットモードが設定されている必要がある。
      • さらに、セカンダリ レプリカが既に同期され、WSFCクォーラムを持ち、可用性グループの柔軟なフェールオーバーポリシーで指定された条件を満たしている必要がある。
    • 強制フェールオーバー
      • 非同期コミットモードで使用される。
      • データ損失の可能性がある手動フェールオーバーである。
      • セカンダリ レプリカがプライマリ レプリカと動機されない場合に使用できる唯一のフェールオーバー形式である。
  • 可用性グループリスナーを作成することによって、特定の可用性グループのプリマリ レプリカへのクライアント接続を提供する。
  • アクティブなセカンダリ レプリカをサポートする。アクティブなセカンダリ機能は以下の2種類である。 (基本的な可用性グループでは未サポート)
    • セカンダリ レプリカでのバックアップ操作の実行
    • 1つ以上のセカンダリ レプリカへの読み取り専用アクセス

参考

www.slideshare.net

可用性グループ: 高可用性とディザスター リカバリーのソリューション - SQL Server Always On | Microsoft Docs

可用性グループの概要 - SQL Server Always On | Microsoft Docs

SQL ServerのAlwaysOn可用性グループを利用した、クラスター構成の検証 - ニフクラ ブログ