FCI VNN 用に Azure ロード バランサーを構成する - Azure VM 上の SQL Server

適用対象:Azure VM 上の SQL Server

ヒント

可用性グループをデプロイする方法は多数あります。 デプロイを簡略化し、Always On 可用性グループに対して Azure Load Balancer または分散ネットワーク名 (DNN) を不要にするには、同じ Azure 仮想ネットワーク内の複数のサブネットに SQL Server 仮想マシン (VM) を作成します。 可用性グループを 1 つのサブネットに既に作成している場合は、マルチサブネット環境に移行できます。

Azure 仮想マシンでは、クラスターは、一度に 1 つのクラスター ノードに存在する必要がある IP アドレスを保持するためにロード バランサーを使用します。 このソリューションでは、Azure のクラスター化されたリソースで使用する仮想ネットワーク名 (VNN) の IP アドレスが、ロード バランサーによって保持されます。

この記事では、Azure Load Balancer サービスを使用してロード バランサーを構成する方法について説明します。 高可用性とディザスター リカバリー (HADR) を実現するために、ロード バランサーによって、Azure VM 上の SQL Server を使用するフェールオーバー クラスター インスタンスにトラフィックがルーティングされます。

SQL Server 2019 CU2 以降で代替の接続オプションを使用する場合は、代わりに分散ネットワーク名 (DNN) を使用することを検討してください。 DNN を使用すると、構成が簡素化され、フェールオーバーが改善されます。

前提条件

この記事の手順を完了するには、次のものが必要です。

ロード バランサーの作成

次のいずれかの種類のロード バランサーを作成できます。

  • 内部: 内部ロード バランサーは、ネットワークの内部にあるプライベート リソースからのみアクセスできます。 内部ロード バランサーとその規則を構成するときは、フロントエンド IP アドレスとして FCI IP アドレスを使用します。

  • 外部: 外部ロード バランサーは、パブリック リソースから内部リソースへとトラフィックをルーティングすることができます。 外部ロード バランサーを構成するときは、FCI IP アドレスのようなパブリック IP アドレスは使用できません。

    外部ロード バランサーを使用するには、FCI と同じサブネット内の IP アドレスのうち、他の IP アドレスと競合しないアドレスを論理的に割り当てます。 このアドレスを負荷分散規則のフロントエンド IP アドレスとして使用します。

ロード バランサーを作成するには、次の手順を実行します。

  1. Azure portal で、仮想マシンが含まれているリソース グループに移動します。

  2. [追加] を選択します。 Azure Marketplace で「ロード バランサー」を検索します。 [ロード バランサー] を選択します。

  3. [作成] を選択します

  4. [ロード バランサーの作成][基本] タブで、次の値を使用してロード バランサーを設定します。

    • サブスクリプション:Azure サブスクリプション。
    • [リソース グループ] :仮想マシンが含まれているリソース グループ。
    • Name:ロード バランサーを識別する名前。
    • [リージョン] :仮想マシンが含まれている Azure の場所。
    • [SKU]: Standard
    • [種類]: パブリックまたは内部。 内部ロード バランサーには、仮想ネットワーク内からアクセスできます。 ほとんどの Azure アプリケーションで内部ロード バランサーを使用できます。 アプリケーションがインターネット経由で直接 SQL Server にアクセスする必要がある場合は、パブリック ロード バランサーを使用します。
    • [レベル]: リージョン

    Screenshot of the Azure portal that shows the page for basic information about a load balancer.

  5. [次へ: フロントエンド IP 構成] を選びます。

  6. [フロントエンド IP 構成の追加] を選択します。

    Screenshot of the Azure portal that shows the button for adding a front-end IP configuration.

  7. 次の値を使用してフロントエンド IP アドレスを設定します。

    • [名前]: フロントエンド IP 構成を識別する名前。
    • 仮想ネットワーク:仮想マシンと同じネットワーク。
    • [サブネット]: 仮想マシンと同じサブネット。
    • [割り当て]: 静的
    • [IP アドレス]: クラスター化されたネットワーク リソースに割り当てた IP アドレス。
    • [可用性ゾーン]: IP をデプロイするオプションの可用性ゾーンを選びます。

    Screenshot of the Azure portal that shows the page for configuring a front-end IP address.

  8. [追加] を選択して、フロントエンド IP アドレスを作成します。

  9. [確認と作成] を選び、ロード バランサーを作成します。

バックエンド プールを構成する

  1. 仮想マシンが含まれている Azure リソース グループに戻り、新しいロード バランサーを探します。 リソース グループの表示を更新することが必要な場合もあります。 ロード バランサーを選択します。

  2. [バックエンド プール] を選んでから、[+ 追加] を選択します。

  3. [名前] で、バックエンド プールの名前を指定します。

  4. [バックエンド プールの構成][NIC] を選択します。

  5. [追加] を選択して、VM を含む可用性セットにバックエンド プールを関連付けます。

  6. [仮想マシン] で、クラスター ノードとして参加する仮想マシンを選びます。 必ず、FCI をホストするすべての仮想マシンを含めます。

    各 VM のプライマリ IP アドレスのみを追加します。 セカンダリ IP アドレスは追加しないでください。

  7. [追加] を選択して、仮想マシンをバックエンド プールに追加します。

  8. [保存] を選択して、バックエンド プールを作成します。

正常性プローブを構成する

  1. ロード バランサーのペインで、[正常性プローブ] を選択します。

  2. [正常性プローブの追加] ペインで、 の次のパラメーターを設定します。

    • Name:正常性プローブの名前。
    • [プロトコル]: TCP
    • [ポート]: VM を準備したときに正常性プローブ用にファイアウォールで作成したポート。 この記事の例では、TCP ポート 59999 を使用します。
    • [間隔]: 5 秒
  3. [追加] を選択します。

負荷分散規則を設定する

  1. ロード バランサーのペインで、[負荷分散規則] を選択します。

  2. [追加] を選択します。

  3. これらのパラメーターを設定します。

    • [名前]: 負荷分散規則の名前。
    • [フロントエンド IP アドレス]: フロントエンドを構成したときに設定した IP アドレス。
    • [バックエンド プール]: ロード バランサーを対象とする仮想マシンを含むバックエンド プール。
    • HA ポート: TCP と UDP プロトコル用のすべてのポートで負荷分散を有効にします。
    • [プロトコル]: TCP
    • ポート:SQL Server の TCP ポート。 既定値は 1433 です。
    • [バックエンド ポート] : [フローティング IP (ダイレクト サーバー リターン)] を有効にしたときの [ポート] の値と同じポート。
    • [正常性プローブ] : 先ほど構成した正常性プローブ。
    • [セッション永続化]: なし
    • [アイドル タイムアウト (分)]: 4
    • [フローティング IP](ダイレクト サーバー リターン) : 有効。
  4. [保存] を選択します。

クラスターのプローブを構成する

PowerShell でクラスター プローブのポート パラメーターを設定します。

使用環境の値を使用して、次のスクリプトの変数を更新します。 スクリプトから山かっこ (< および >) を削除します。

$ClusterNetworkName = "<Cluster Network Name>"
$IPResourceName = "<SQL Server FCI IP Address Resource Name>" 
$ILBIP = "<n.n.n.n>" 
[int]$ProbePort = <nnnnn>

Import-Module FailoverClusters

Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"=$ProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}

次の表では、更新する必要がある値について説明します。

変数 Value
ClusterNetworkName ネットワークの Windows Server フェールオーバー クラスターの名前。 [フェールオーバー クラスター マネージャー]>[ネットワーク] で、ネットワークを右クリックして [プロパティ] を選択します。 正しい値は [全般] タブの [名前] にあります。
IPResourceName SQL Server FCI の IP アドレスのリソース名。 [フェールオーバー クラスター マネージャー]>[Roles](ロール) で、SQL Server FCI ロールの [サーバー名] の下にある IP アドレス リソースを右クリックして [プロパティ] を選択します。 正しい値は [全般] タブの [名前] にあります。
ILBIP 内部ロード バランサーの IP アドレス。 このアドレスは、Azure portal で内部ロード バランサーのフロントエンド アドレスとして構成されます。 これは、SQL Server FCI の IP アドレスでもあります。 [フェールオーバー クラスター マネージャー]IPResourceName の値があるのと同じプロパティ ページで見つけることができます。
ProbePort ロード バランサーの正常性プローブで構成したプローブ ポート。 未使用の TCP ポートが有効です。
SubnetMask クラスター パラメーターのサブネット マスク。 TCP/IP のブロードキャスト アドレス 255.255.255.255 である必要があります。

クラスターのプローブを設定したら、PowerShell ですべてのクラスター パラメーターを確認できます。 このスクリプトを実行します。

Get-ClusterResource $IPResourceName | Get-ClusterParameter

接続文字列を変更する

それをサポートするクライアントの場合は、MultiSubnetFailover=True を接続文字列に追加します。 MultiSubnetFailover 接続オプションは必須ではありませんが、サブネットのフェールオーバーが速くなるという利点があります。 これは、クライアント ドライバーが、各 IP アドレスの TCP ソケットを同時に開こうとするためです。 クライアント ドライバーは、最初の IP アドレスが正常に応答するまで待機します。 正常な応答があると、クライアント ドライバーはその IP アドレスを接続に使用します。

ご自身のクライアントで MultiSubnetFailover パラメーターがサポートされていない場合は、RegisterAllProvidersIPHostRecordTTL の設定を変更して、フェールオーバー時の接続の遅延を防ぐことができます。

PowerShell を使用して RegisterAllProvidersIpHostRecordTTL の設定を変更します。

Get-ClusterResource yourFCIname | Set-ClusterParameter RegisterAllProvidersIP 0  
Get-ClusterResource yourFCIname | Set-ClusterParameter HostRecordTTL 300 

詳細については、SQL Server のリスナーの接続タイムアウトに関するドキュメントを参照してください。

ヒント

  • 1 つのサブネットの HADR ソリューションでも、接続文字列内で MultiSubnetFailover パラメーターを true に設定します。 この設定により、今後、接続文字列を更新することなく、複数のサブネットにまたがることができます。
  • 既定では、クライアントは 20 分間、クラスター DNS レコードをキャッシュします。 HostRecordTTL を小さくすることで、キャッシュされたレコードの有効期間 (TTL) を短縮できます。 そうするとレガシ クライアントはよりすばやく再接続できます。 このため、HostRecordTTL の設定を小さくすると、DNS サーバーへのトラフィックが増加する可能性があります。

[テスト フェールオーバー]

クラスター化されたリソースのフェールオーバーをテストして、クラスターの機能を検証します。

  1. リモート デスクトップ プロトコル (RDP) を使用して、SQL Server クラスター ノードのいずれかに接続します。
  2. フェールオーバー クラスター マネージャーを開きます。 [役割] を選びます。 SQL Server FCI ロールを所有しているノードを確認します。
  3. SQL Server FCI ロールを右クリックします。
  4. [移動] を選択し、 [最適なノード] を選択します。

フェールオーバー クラスター マネージャーで、ロールとそのリソースがオフラインになったことが示されます。 リソースは移動し、もう一方のノードでオンラインに戻ります。

接続をテストする

接続をテストするには、同じ仮想ネットワーク内の別の仮想マシンにサインインします。 SQL Server Management Studio を開き、SQL Server FCI 名に接続します。

Note

必要に応じて、SQL Server Management Studio をダウンロードできます。

次のステップ

詳細については、以下をご覧ください。