ノート:

リスナーおよびロード・バランサを使用したOCIでのMicrosoft SQL Server Always On可用性グループの構成

イントロダクション

Oracle Cloud Infrastructure(OCI)にMicrosoft SQL Serverをデプロイすると、企業は高可用性とビジネス継続性の目標を達成するための強力なプラットフォームが提供されます。Microsoft SQL Serverの高可用性に対する最も効果的なアプローチの1つは、Always On可用性グループ機能です。Microsoft SQL Server Always On可用性グループは、複数のSQL Serverインスタンス間でシームレスなフェイルオーバーおよびデータ・レプリケーションを可能にする高可用性および障害時リカバリ・ソリューションを提供します。

Microsoft SQL Server可用性グループを設定するには、様々な方法があります。1つのアプローチは、SQL Server仮想マシンを同じ仮想ネットワーク内の別々のサブネットに配置することです。マルチサブネット・アーキテクチャを使用してSQL Server可用性グループをデプロイするには、Always On可用性グループを使用した高可用性Microsoft SQL ServerデータベースのOCIへのデプロイおよびOCIへのHAおよびDR用のMicrosoft SQL Server Always On可用性グループのデプロイを参照してください。

このチュートリアルに従うことで、1つのサブネット内の仮想マシンを使用して、OCIにSQL Server Always On可用性グループをデプロイおよび構成します。この構成には、リスナーとして機能するプライベートOCIロード・バランサが含まれ、シームレスなクライアント接続と高可用性を実現します。このアプローチは、シンプルさと信頼性が重要であり、自動フェイルオーバー、データ冗長性、およびSQL Serverデータベースへの中断のないアクセスを提供する環境に最適です。この設定により、インフラストラクチャは、堅牢なビジネス継続性を持つミッションクリティカルなワークロードをサポートするための適切な位置に配置されます。本番デプロイメントでは、この高可用性構成を補完するために、強化された監視、ロギング、セキュリティ強化およびバックアップ計画を実装することを検討してください。

1つのサブネット内にAlways On可用性グループをデプロイする場合、このチュートリアルでは、OCI仮想マシンとOCIロード・バランサを使用して設定するためのステップバイステップのガイダンスを提供します。このチュートリアルでは、OCIロード・バランサを使用して、単一のサブネットの仮想マシンを使用して、OCIで2ノードのAlways On可用性グループを設定する手順について説明します。

アーキテクチャ

次の図は、ソリューションの高レベル・アーキテクチャのサンプルを示しています。

イメージ 1

このチュートリアルの除外

目的

前提条件

タスク1: SQL Server Always On可用性グループの構成

タスク1.1: SQL Serverノード(DevSQL1およびDevSQL2)での可用性グループの有効化

  1. DevSQL1ノードで、「スタート」に移動し、SQL Server 2022 Configuration Managerを検索して開きます。

  2. 「SQL Server Services」を選択し、「SQL Server (MSSQLSERVER)」サービスを右クリックして「Properties」を選択します。名前付きインスタンスを使用している場合は、SQL Server (INSTANCENAME)になります。

    イメージ 3

  3. 「Always On Availability Groups」をクリックし、「Enable Always On Availability Groups」を選択します。

    イメージ 4

  4. 「適用」を選択し、「OK」をクリックします。

  5. SQL Serverサービスを再起動します。

  6. 他のノード(DevSQL2)でステップ1から5を繰り返します。

タスク1.2: 最初のSQL Serverノード(DevSQL1)でのデータベースの作成と完全バックアップの実行

  1. DevSQL1ノードで、「スタート」に移動し、SSMSを検索してSQL Server Management Studio (SSMS)を開きます。

  2. プライマリSQL Serverに接続します。このチュートリアルでは、DevSQL1です。

    イメージ 6

  3. 「オブジェクト・エクスプローラ」で、「データベース」を右クリックし、「新規データベース」をクリックします。

    イメージ 7

  4. 「一般」「データベース名」を入力し、「オプション」「リカバリ・モデル」として「完全」を選択します。

    イメージ 8

    イメージ 9

  5. 「OK」をクリックします。

  6. 全体バックアップを作成するには、「データベース"AdventureWorks2022"」「タスク」を右クリックし、「バックアップ」をクリックします。

  7. 「一般」で、「バックアップ・タイプ」「完全」であることを確認し、「宛先」「ディスク」「バックアップ先」として選択し、「追加」をクリックして、完全バックアップの場所とファイル名を入力します。

  8. 「OK」をクリックします。

Transact-SQLを使用してバックアップを作成することもできます。たとえば次のようにします。

トランザクションSQL:

BACKUP DATABASE [AdventureWorks2022] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup\AdventuresWork2022.bak' WITH NOFORMAT, NOINIT,  NAME = N'AdventureWorks2022-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

タスク1.3: 可用性グループの作成

  1. SQL Server Management Studioを開き、DevSQL1に接続します。「オブジェクト・エクスプローラ」で、「常に高可用性」を右クリックし、「新規可用性グループ・ウィザード」をクリックします。

    イメージ 10

    これにより、「新規可用性グループ」ページが開きます。「次」をクリックします。

    イメージ 11

  2. 「オプションの指定」で、「可用性グループ名」DevAGと入力し、「クラスタ・タイプ」「Windows Serverフェイルオーバー・クラスタ」と入力して「次へ」をクリックします。

    イメージ 12

  3. 「データベースの選択」で、この可用性グループに追加するデータベースを選択します。「ステータス」に、データベースを可用性グループに追加できる前提条件を満たすと表示されます。問題がある場合は、その理由が示され、前提条件を満たすために必要なアクションを実行する必要があります。たとえば、データベース全体のバックアップが保留になっている場合があります。

    イメージ 13

  4. 「レプリカの指定」で、レプリカを追加します。「レプリカ」をクリックして、両方のノードが「可用性レプリカ」の下に追加されていることを確認し、「可用性モード」「同期コミット」に変更します。要件に応じて異なる可用性モードを設定できます。

    イメージ 14

  5. 「エンドポイント」をクリックして、両方のエンドポイントが同じポートを使用し、これらのポートがファイアウォールとセキュリティ・リストで開いていることを確認します。デフォルトでは、これはポート5022です。

    イメージ 15

    ノート:このチュートリアルでは、他のすべてのオプションをデフォルトとして保持します。現在はリスナーを作成しないでください。

  6. 次に、データ同期を選択する必要があります。「自動シード」を選択し、「次へ」をクリックします。

    イメージ 16

  7. 「検証」で、検証が「成功」であることを確認し、失敗を修正します。後でリスナーを作成するため、警告のリスナー構成の確認は無視できます。「次へ」をクリックし、可用性グループを作成したら、「閉じる」を選択してウィザードを閉じます。

  8. オブジェクト・エクスプローラで、「常に高可用性」を展開し、「可用性グループ」を展開します。これで、このコンテナに新しい可用性グループが表示されます。可用性グループを右クリックし、「ダッシュボードの表示」を選択します。

    イメージ 17

  9. フェイルオーバー・クラスタ・マネージャを開き、「起動」に移動して「フェイルオーバー・クラスタ・マネージャ」を検索して開きます。クラスタに接続し、「ロール」をクリックします。

    使用した可用性グループ名はクラスタ上のロールであり、リスナーを構成しなかったため、その可用性グループにはクライアント接続用のIPアドレスがありません。OCIロード・バランサの作成後にリスナーを構成します。

    イメージ 18

この段階では、可用性グループは2つのSQL Serverレプリカで正常に構成されており、インスタンス間のフェイルオーバーが可能です。ただし、リスナーが設定されていないため、リスナーを使用したクライアント接続はまだできません。

タスク2: OCIロード・バランサの作成および可用性グループ・リスナーの構成

マルチサブネット設定の使用、各仮想マシンへのセカンダリIPアドレスの割当てなど、OCIでSQL Server Always On可用性グループ・リスナーを構成する方法はいくつかあります。これらのメソッドは有効ですが、多くの場合、フェイルオーバー・イベント中にIP移動を管理するために追加の構成またはカスタム・スクリプトが必要です。

Always On可用性グループを単一のサブネット環境にデプロイし、カスタム・スクリプト化を回避する場合、プライベートOCIロード・バランサを使用すると、合理化され信頼性の高いソリューションが提供されます。この項では、Always On可用性グループのリスナーとして機能するようにOCIロード・バランサを構成し、単一のサブネット内でのシームレスな接続およびフェイルオーバー処理を可能にします。

タスク2.1: SQL Server Always On可用性グループ・リスナーの静的プライベートIPアドレスの予約

OCIで静的プライベートIPを予約します。このIPは、後でWindowsフェイルオーバー・クラスタのSQL Server Always On可用性グループ・リスナーIPに割り当てられます。このIPアドレスは、他のサービスや仮想マシンにOCIでこのIPアドレスが割り当てられていないことを確認するために予約されています。このIPアドレスは、クライアントが接続に使用することはありませんが、可用性グループのフェイルオーバーに役立ち、OCIロード・バランサが正しいプライマリ・サーバーに接続をルーティングしていることを確認します。

  1. OCIコンソールに移動し、「ネットワーキング」に移動して「Virtual Cloudネットワーク」をクリックします。

  2. SQL Serverノードに使用しているVCNに移動します。

  3. 「サブネット」をクリックし、SQL Serverノードに使用されているサブネットに移動します。

  4. 「リソース」で、IPv4アドレスをクリックします。

  5. 「予約済IPv4アドレスの追加」をクリックします。

    イメージ 33

  6. SQL Server Always On可用性グループ・リスナーに割り当てるIPアドレスを入力します。これは未使用のIPアドレスにできます。クライアントは、このIPアドレスを使用してリモートで接続できないことに注意してください。これは、Windowsフェイルオーバー・クラスタでSQL Server Always On可用性グループ・リスナーに割り当てるダミーIPです。このチュートリアルでは、10.0.0.148を使用しました。

    イメージ 34

タスク2.2: プライベートOCIロード・バランサの作成

ノート:ここに記載されていないフィールドは、デフォルトとして保持されます。

  1. OCIコンソールに移動し、「ネットワーキング」および「ロード・バランサ」に移動します。

    イメージ 19

  2. 「ロード・バランサ」および「ロード・バランサの作成」をクリックします。

    イメージ 20

  3. ロード・バランサ名を入力し、「可視性タイプ」として「プライベート」を選択します。

    イメージ 21

  4. 「ネットワーキングの選択」で、このロード・バランサに使用されるVCNおよびサブネットのコンパートメント名を選択します。SQL Serverノードに使用したものと同じVCNおよびサブネットを使用します。

    イメージ 22

  5. 「管理」で、このロード・バランサを作成するコンパートメントを選択します。ロード・バランサ、リスナーおよびバックエンドがまだアクティブなときに削除を防止して、意図しないサービスの中断を回避し、「次へ」をクリックします。

    イメージ 23

  6. 「バックエンド」で、ロード・バランシング・ポリシー重み付けラウンド・ロビンとして指定します。

  7. 「バックエンド・サーバーの選択」で、SQL Serverノード(DevSQL1DevSQL2)を追加します。ポート番号を1433に変更します。SQL Serverに別のポートを使用している場合は、それぞれのポート番号を入力します。

    イメージ 24

  8. 「ヘルス・チェック・ポリシーの指定」で、ポート番号が59999のTCPプロトコルを使用します。使用されていない任意のポートを使用できます。

    イメージ 25

  9. その他すべての設定を「デフォルト」のままにし、選択したVCNのセキュリティ・リストを使用します。「次」をクリックします。

  10. 「リスナーの構成」で、「リスナー名」「TCP」トラフィックおよび「ポート」番号を1433と入力します。残りすべての設定をデフォルトのままにします。

    イメージ 26

  11. 「次へ」をクリックし、構成を確認して「送信」をクリックします。

  12. OCIロード・バランサがプロビジョニングされたら、「ネットワーキング」「ロード・バランサ」に移動して「ロード・バランサ」をクリックすると、OCIロード・バランサのプライベートIPアドレスをノートにとることができます。

    イメージ 35

このチュートリアルでは、ロード・バランサのIPアドレスは10.0.0.149です。これは、クライアントがSQL Server Always On可用性グループ・リスナーへの接続に使用するIPアドレスです。

タスク2.3: SQL Server Always On可用性グループ・リスナーの構成

  1. プライマリ・レプリカをホストしているVMへのRemote Desktop Protocol (RDP)。このチュートリアルでは、DevSQL1です。これを確認するには、Windowsフェイルオーバー・クラスタ・マネージャロールを開き、SQL可用性グループ・ロールの場合は、「所有者ノード」列を参照して、プライマリ・レプリカであるノードを確認します。

  2. 「ネットワーク」に移動し、ネットワーク「名前」$ClusterNetworkName変数としてノートにとります。

    イメージ 27

  3. クライアント・アクセス・ポイントを追加します。クライアント・アクセス・ポイントは、アプリケーションが可用性グループ内のデータベースに接続するために使用するネットワーク名です。

    1. 「フェイルオーバー・クラスタ・マネージャ」で、クラスタ名を開き、「ロール」を選択します。

    2. 「ロール」をクリックし、可用性グループ名を右クリックして「リソースの追加」を選択し、「クライアント・アクセス・ポイント」をクリックします。

      イメージ 28

    3. 「名前」で、この新しいリスナーの名前を作成します。新しいリスナーの名前は、アプリケーションがSQL Server可用性グループのデータベースに接続するために使用するネットワーク名です。

    4. 「次へ」を2回クリックし、「終了」を選択します。この時点でリスナーまたはリソースをオンラインにしないでください。

  4. 可用性グループのクラスタ・ロールをオフラインにします。「フェイルオーバー・クラスタ・マネージャ」で、「ロール」をクリックし、ロールを右クリックして「ロールの停止」を選択します。

  5. 可用性グループのIPリソースを構成します。

    1. 「リソース」をクリックし、作成したクライアント・アクセス・ポイントを展開します。クライアント・アクセス・ポイントがオフラインです。

    2. IPリソースを右クリックし、「プロパティ」を選択します。IPアドレスの名前を$IPResourceName変数としてメモします。このチュートリアルでは、名前はIP Address 10.0.0.0です。

    3. 「IPアドレス」をクリックし、「静的IPアドレス」を選択します。IPアドレスをタスク2.1で予約したIPアドレスとして設定します。このチュートリアルでは、10.0.0.148です。

    イメージ 29

  6. SQL Server可用性グループをクライアント・アクセス・ポイントに依存させます。

    1. フェイルオーバー・クラスタ・マネージャで、「ロール」をクリックし、可用性グループを選択します。

    2. 「リソース」をクリックし、「その他のリソース」の下にある可用性グループ・リソースを右クリックして、「プロパティ」をクリックします。

    3. 「依存性」をクリックし、クライアント・アクセス・ポイント(リスナー)の名前を追加します。

      イメージ 30

    4. 「OK」をクリックします。

  7. クライアント・アクセス・ポイントをIPアドレスに依存させます。

    1. フェイルオーバー・クラスタ・マネージャで、「ロール」をクリックし、可用性グループを選択します。

    2. 「リソース」をクリックし、「サーバー名」の下のクライアント・アクセス・ポイントを右クリックし、「プロパティ」をクリックします。

      イメージ 31

    3. 「依存関係」をクリックし、IPアドレスが依存関係であることを確認します。そうでない場合は、IPアドレスへの依存関係を設定します。複数のリソースが一覧表示されている場合は、IPアドレスにANDではなく ORの依存関係があることを確認し、「OK」をクリックします。

  8. WindowsのPowerShellでクラスタ・パラメータを設定します。

    1. 次のPowerShellスクリプトをSQL Serverインスタンスのいずれかにコピーします。環境の変数を更新します。

      • 「ネットワーク」を選択して「フェイルオーバー・クラスタ・マネージャ」$ClusterNetworkName名を検索し、ネットワークを右クリックして「プロパティ」を選択します。$ClusterNetworkNameは、「一般」タブの「名前」の下にあります。

      • $IPResourceNameは、フェイルオーバー・クラスタ・マネージャのIPアドレス・リソースに指定された名前です。これは、「フェイルオーバー・クラスタ・マネージャ」「ロール」を選択し、SQL Server可用性グループまたはFCI名を選択して、「サーバー名」の下の「リソース」を選択し、IPアドレス・リソースを右クリックして「プロパティ」をクリックすることで確認できます。正しい値は、「一般」タブの「名前」の下にあります。

      • $ListenerILBIPは、可用性グループ・リスナー用にAzureロード・バランサで作成したIPアドレスです。SQL Server AG/FCIリスナー・リソース名と同じプロパティ・ページで、フェイルオーバー・クラスタ・マネージャ$ListenerILBIPを検索します。

      • $ListenerProbePortは、可用性グループ・リスナー用にAzureロード・バランサで構成したポート(59999など)です。未使用のTCPポートはすべて有効です。

      $ClusterNetworkName = "<MyClusterNetworkName>" # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name.
      $IPResourceName = "<IPResourceName>" # The IP address resource name.
      $ListenerILBIP = "<n.n.n.n>" # The IP address that we reserved in Task 2.1. This is the static IP address for the SQL Server AG Listener that you reserved in OCI Console.
      [int]$ListenerProbePort = <nnnnn>
      
      Import-Module FailoverClusters
      
      Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ListenerILBIP";"ProbePort"=$ListenerProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
      

      このチュートリアルでは、次のものを使用しました。

      $ClusterNetworkName = "Cluster Network 1" # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name.
      $IPResourceName = "IP Address 10.0.0.0" # The IP address resource name.
      $ListenerILBIP = "10.0.0.148" # The IP address of the internal load balancer. This is the static IP address for the load balancer that you configured in the Azure portal.
      [int]$ListenerProbePort = 59999
      
      Import-Module FailoverClusters
      
      Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ListenerILBIP";"ProbePort"=$ListenerProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
      
    2. クラスタ・ノードの1つでPowerShellスクリプトを実行して、クラスタ・パラメータを設定します。

  9. 除外を追加すると、他のシステム・プロセスが同じポートに動的に割り当てられなくなります。このシナリオでは、すべてのクラスタ・ノードで次の除外を構成します。

    netsh int ipv4 add excludedportrange tcp startport=59999 numberofports=1 store=persistent
    
  10. 可用性グループのクラスタ・ロールをオンラインにします。「フェイルオーバー・クラスタ・マネージャ」で、「ロール」をクリックし、ロールを右クリックして「ロールの開始」を選択します。

  11. SQL Server Management Studioで、リスナー・ポートを設定します。

    1. SQL Server Management Studioを開き、プライマリ・レプリカに接続します。

    2. 「Always On High Availability」「可用性グループ」に移動し、「可用性グループ・リスナー」をクリックします。

    3. タスク2.2で作成したリスナー名を右クリックし、「プロパティ」をクリックします。

    4. 「ポート」で、可用性グループ・リスナーのポート番号を指定し、「OK」をクリックします。デフォルト値は1433です。

    イメージ 32

  12. DNSサーバーで、SQL可用性グループ・リスナー名を指すプライベートOCIロード・バランサIPアドレスのホストAレコードがあることを確認します。SQLリスナー・コンピュータ・オブジェクトがDNSレコードを更新できないことを確認します。これは、フェイルオーバー後に、DNSエントリがWindowsフェイルオーバー・クラスタで使用されているIPアドレスに更新されないようにするためです。

    このチュートリアルでは、SQL可用性グループ・リスナーのホストAレコードを10.0.0.148ではなくIPアドレス10.0.0.149で更新し、セキュリティを更新して、SQLAGL$コンピュータ・オブジェクトがこのレコードを更新できず、読取りしかできないようにします。

    イメージ 36

    イメージ 37

これを実現する方法は他にもありますが、独自のソリューションを実装できます。目標は、OCIロード・バランサのIPアドレスを持つSQL Server可用性グループ・リスナーのDNSレコードを持つことです。

これで、SSMSまたは他のクライアント・ツールからSQL Server可用性グループ・リスナーへの接続をテストできます。

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。