AG と DNN リスナーとの機能の相互運用性
適用対象: Azure VM 上の SQL Server
ヒント
可用性グループをデプロイする方法は多数あります。 デプロイを簡略化し、Always On 可用性グループに対して Azure Load Balancer または分散ネットワーク名 (DNN) を不要にするには、同じ Azure 仮想ネットワーク内の複数のサブネットに SQL Server 仮想マシン (VM) を作成します。 可用性グループを 1 つのサブネットに既に作成している場合は、マルチサブネット環境に移行できます。
特定の SQL Server 機能では、ハードコーディングされた仮想ネットワーク名 (VNN) が使用されます。 そのため、分散ネットワーク名 (DNN) リスナーを、1 つのサブネット内の Azure VM 上の Always On 可用性グループおよび SQL Server と一緒に使用する場合には、いくつかの追加の考慮事項がある場合があります。
この記事では、SQL Server 機能と可用性グループ DNN リスナーとの相互運用性について詳しく説明します。
動作の違い
VNN リスナーと DNN リスナーの機能には、注意が必要な動作の違いがいつくかあります。
- フェールオーバー時間: DNN リスナーを使用すると、ネットワーク ロード バランサーによって障害イベントが検出され、ルーティングが変更されるまで待つ必要がないため、フェールオーバー時間が短縮されます。
- 既存の接続: フェールオーバー可用性グループ内の特定のデータベースに対する接続は閉じられますが、フェールオーバー処理中も DNN はオンライン状態を維持するため、プライマリ レプリカへの他の接続は開いたままになります。 これは、可用性グループがフェールオーバーすると通常はプライマリ レプリカへのすべての接続が閉じられ、リスナーはオフラインになり、プライマリ レプリカはセカンダリの役割に移行するという従来の VNN 環境とは異なります。 DNN リスナーを使用する場合は、フェールオーバー時に接続が新しいプライマリ レプリカにリダイレクトされるように、必要に応じてアプリケーションの接続文字列を調整します。
- 開いているトランザクション: フェールオーバー可用性グループ内のデータベースに対して開かれているトランザクションは、閉じられてロールバックされるので、手動で再接続する必要があります。 たとえば、SQL Server Management Studio で、クエリ ウィンドウを閉じて、新しいウィンドウを開きます。
クライアント ドライバー
ODBC、OLEDB、ADO.NET、JDBC、PHP、Node.js のドライバーについては、ユーザーが接続文字列で DNN リスナー名とポートをサーバー名として明示的に指定する必要があります。 フェールオーバー後の速やかな接続を確保するために、MultiSubnetFailover=True
を接続文字列に追加します (SQL クライアントでサポートされている場合)。
ツール
SQL Server Management Studio、sqlcmd、Azure Data Studio、SQL Server Data Tools のユーザーは、リスナーに接続するため、接続文字列で DNN リスナー名とポートをサーバー名として明示的に指定する必要があります。
SQL Server Management Studio (SSMS) GUI を使用して DNN リスナーを作成することは現在サポートされていません。
可用性グループと FCI
フェールオーバー クラスター インスタンス (FCI) をレプリカの 1 つとして使用することで、Always On 可用性グループを構成できます。 この構成が DNN リスナーで動作するためには、フェールオーバー クラスター インスタンスでも DNN を使用する必要があります。これは、FCI 仮想 IP アドレスを AG DNN IP リストに入れる方法がないためです。
この構成では、FCI レプリカのミラーリング エンドポイント URL で FCI DNN を使用する必要があります。 同様に、FCI が読み取り専用レプリカとして使用される場合は、FCI レプリカへの読み取り専用ルーティングで FCI DNN を使用する必要があります。
ミラーリング エンドポイントの形式は ENDPOINT_URL = 'TCP://<FCI DNN DNS name>:<mirroring endpoint port>'
です。
たとえば、FCI DNN DNS 名が dnnlsnr
で、FCI のミラーリング エンドポイントのポートが 5022
の場合、エンドポイント URL を作成するための Transact-SQL (T-SQL) コード スニペットは次のようになります。
ENDPOINT_URL = 'TCP://dnnlsnr:5022'
同様に、読み取り専用ルーティング URL の形式は TCP://<FCI DNN DNS name>:<SQL Server instance port>
です。
たとえば、DNN DNS 名が dnnlsnr
、ターゲットの読み取り専用 SQL Server FCI によって使用されるポートが 1444
の場合、読み取り専用ルーティング URL を作成するための T-SQL コード スニペットは次のようになります。
READ_ONLY_ROUTING_URL = 'TCP://dnnlsnr:1444'
ポートが既定の 1433 の場合、URL でそのポートを省略できます。 名前付きインスタンスの場合は、名前付きインスタンスの静的ポートを構成し、読み取り専用ルーティング URL でそれを指定します。
分散型可用性グループ
可用性グループ リスナーが分散ネットワーク名 (DNN) を使って構成されている場合、可用性グループの上に分散可用性グループを構成することはサポートされていません。
レプリケーション
トランザクション、マージ、およびスナップショット レプリケーションのすべてにおいて、VNN リスナーをリスナーに接続するレプリケーション オブジェクトの DNN リスナーとポートで置き換えることがサポートされています。
可用性グループでレプリケーションを使用する方法の詳細については、パブリッシャーと AG、サブスクライバーと AG、およびディストリビューターと AG に関するページを参照してください。
MSDTC
ローカルおよびクラスター化された MSDTC の両方がサポートされますが、MSDTC では、HA ポートを構成するために標準の Azure Load Balancer が必要になる動的ポートが使用されます。 そのため、VM では標準の IP 予約を使用しないと、インターネットにエクスポーズすることはできません。
2 つのルールを定義します。1 つは RPC エンドポイント マッパー ポート 135 用で、もう 1 つは実際の MSDTC ポート用です。 フェールオーバー後、新しいノードで MSDTC ポートが変更されたら、LB ルールを新しい MSDTC ポート宛に変更します。
MSDTC がローカルの場合は、必ず送信通信を許可してください。
分散クエリ
分散クエリは、AG DNN リスナーとポートを使用して構成できるリンク サーバーに依存します。 ポートが 1433 でない場合は、リンク サーバーを構成するときに SQL Server Management Studio (SSMS) の [Use other data source](その他のデータ ソースを使用) オプションを選択します。
FILESTREAM
FILESTREAM はサポートされていますが、ユーザーが Windows File API を使用してスコープ内のファイル共有にアクセスする場合はサポートされません。
FileTable
Filetable はサポートされていますが、ユーザーが Windows File API を使用してスコープ内のファイル共有にアクセスする場合はサポートされません。
リンク サーバー
AG DNN リスナーの名前とポートを使用して、リンク サーバーを構成します。 ポートが 1433 でない場合は、リンク サーバーを構成するときに SQL Server Management Studio (SSMS) の [Use other data source](その他のデータ ソースを使用) オプションを選択します。
よく寄せられる質問
AG DNN リスナーはどの SQL Server バージョンでサポートされますか?
SQL Server 2019 CU8 以降です。
DNN リスナーを使用した場合には、どのくらいのフェールオーバー時間が予想されますか?
DNN リスナーの場合、フェールオーバーの時間は AG のフェールオーバー時間とちょうど同じになり、時間が余計にかかることはありません (Azure Load Balancer を使用している場合のプローブの時間と同様です)。
SQL クライアントで OLEDB および ODBC と共に DNN を使用するには、バージョンの要件がありますか?
DNN リスナーには MultiSubnetFailover=True
接続文字列を使用することをお勧めします。 これは SQL Server 2012 (11.x) 以降で使用できます。
DNN リスナーを使用するために変更する必要がある SQL Server の構成はありますか?
DNN を使用するために SQL Server で構成を変更する必要はないものの、一部の SQL Server 機能については、考慮が必要な点が多くなる可能性があります。
DNN では、複数のサブネット クラスターがサポートされますか?
はい。 DNS の DNN は、サブネットに関係なく、クラスターによって可用性グループ内のすべてのレプリカの物理 IP アドレスにバインドされます。 SQL クライアントは、サブネットに関係なく、DNS 名の IP アドレスをすべて試行します。
可用性グループ DNN リスナーでは読み取り専用ルーティングはサポートされますか?
はい。 読み取り専用ルーティングは、DNN リスナーでサポートされています。