Always On 可用性グループ リスナーに接続するConnect to an Always On availability group listener

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) 適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions)

可用性グループ リスナーを構成したら、接続文字列を更新して Always On 可用性グループ リスナーに接続する必要があります。Once you've configured your availability group listener, you'll need to update your connection string to connect to the Always On availability group listener. これにより、すべてのフェールオーバー後に接続文字列を手動で更新しなくても、アプリケーションから目的のレプリカに自動的にトラフィックがルーティングされます。This will route traffic from your application automatically to the intended replica without having to manually update the connection string after every failover.

プライマリ レプリカに接続するConnect to the primary replica

読み取り/書き込みアクセスでプライマリ レプリカに接続するには、可用性グループ リスナーの DNS 名を接続文字列で指定します。Specify the availability group listener DNS name in the connection string to connect to the primary replica for read-write access.

たとえば、リスナーを介して SQL Server Management Studio のプライマリ レプリカに接続するには、サーバー名フィールドにリスナー DNS 名を入力します。For example, to connect to the primary replica in SQL Server Management Studio through the listener, enter the listener DNS name in the server name field:

SSMS のリスナーに接続する

フェールオーバー中にプライマリ レプリカが変更されると、リスナーへの既存の接続が切断され、新しい接続が新しいプライマリ レプリカにルーティングされます。During a failover, when the primary replica changes, existing connections to the listener are disconnected and new connections are routed to the new primary replica.

ADO.NET プロバイダー (System.Data.SqlClient) の基本的な接続文字列の例を次に示します。An example of a basic connection string for the ADO.NET provider (System.Data.SqlClient):

Server=tcp: AGListener,1433;Database=MyDB;Integrated Security=SSPI  

次の Transact-SQL (T-SQL) コマンドを実行して、リスナーを介して現在接続されているレプリカを確認できます。You can verify which replica you're currently connected to through the listener by running the following Transact-SQL (T-SQL) command:

SELECT @@SERVERNAME

たとえば、SQLVM1 が自分のプライマリ レプリカの場合は、次のようになります。For example, when SQLVM1 is my primary replica:

レプリカの接続を確認する

可用性グループ リスナーを使用する代わりに、プライマリ レプリカまたはセカンダリ レプリカのインスタンス名を使用して、SQL Server のインスタンスに引き続き直接接続することもできます。You can still connect directly to the instance of SQL Server using the instance name of the primary or secondary replica instead of using the availability group listener. ただし、新しい接続が新しい現在のプライマリ レプリカに自動的にルーティングされるという利点がなくなります。However, you will then lose the benefit of new connections being routed automatically to the new current primary replica. さらに、read-intent で指定された接続が読み取り可能なセカンダリ レプリカに自動的にルーティングされる、読み取り専用ルーティングの利点は失われます。Additionally, you will lose the benefit of read-only routing, where connections specified with read-intent are automatically routed to the readable secondary replica.

読み取り専用レプリカに接続するConnect to a read-only replica

"読み取り専用ルーティング" とは、読み取り専用ワークロードを許可するように構成されている読み取り可能なセカンダリ レプリカに、着信リスナー接続を自動的にルーティングすることを意味します。Read-only routing refers to automatically routing incoming listener connections to a readable secondary replica that is configured to allow read-only workloads.

次の条件に該当する場合、接続は読み取り専用レプリカに自動的にルーティングされます。Connections are automatically routed to the read-only replica if the following are true:

  • 少なくとも 1 つのセカンダリ レプリカが読み取り専用アクセスに設定され、各読み取り専用セカンダリ レプリカとプライマリ レプリカが読み取り専用ルーティングをサポートするように構成されているAt least one secondary replica is set to read-only access, and each read-only secondary replica and the primary replica are configured to support read-only routing.

  • 接続文字列は、可用性グループに含まれるデータベースを参照します。The connection string references a database involved in the Availability Group. これに代わる方法は、接続に使うログインで、データベースを既定のデータベースとして構成することです。An alternative to this would be the login used in the connection has the database configured as its default database. 詳しくは、読み取り専用ルーティングでのアルゴリズムの動作に関するこちらの記事をご覧ください。For more information, see this article on how the algorithm works with read-only routing.

  • 接続文字列は可用性グループ リスナーを参照し、着信接続のアプリケーションの目的が読み取り専用に設定されている (たとえば、ODBC または OLEDB の接続文字列、接続属性、またはプロパティで Application Intent=ReadOnly キーワードを使用している)。The connection string references an availability group listener, and the application intent of the incoming connection is set to read-only (for example, by using the Application Intent=ReadOnly keyword in the ODBC or OLEDB connection strings or connection attributes or properties).

アプリケーションの目的の属性は、ログイン中にクライアントのセッションに格納されます。その後、SQL Server のインスタンスがこの目的を処理し、可用性グループの構成およびセカンダリ レプリカ内のターゲット データベースの現在の読み取り/書き込み状態に基づいて、実行する操作を決定します。The application intent attribute is stored in the client's session during login and the instance of SQL Server will then process this intent and determine what to do according to the configuration of the availability group and the current read-write state of the target database in the secondary replica.

たとえば、SQL Server Management Studio を使用して読み取り専用レプリカに接続するには、 [サーバーに接続] ダイアログ ボックスで [オプション] を選択し、 [追加の接続パラメーター] タブを選択して、テキストボックスに ApplicationIntent=ReadOnly を指定します。For example, to connect to a read-only replica using SQL Server Management Studio, select Options on the Connect to Server dialog box, select the Additional Connection Parameters tab, and then specify ApplicationIntent=ReadOnly in the text box:

SSMS の読み取り専用接続

読み取り専用のアプリケーションの目的を指定する ADO.NET プロバイダー (System.Data.SqlClient) の接続文字列の例を次に示します。An example of a connection string for the ADO.NET provider (System.Data.SqlClient) that designates read-only application intent:

Server=tcp:AGListener;Database=AdventureWorks;Integrated Security=SSPI;ApplicationIntent=ReadOnly  

詳細については、可用性レプリカでの読み取り専用アクセスの構成 (SQL Server)に関するページを参照してください。For more information, see Configure Read-Only Access on an Availability Replica (SQL Server)

既定以外のポートNon-default port

リスナーを作成するときに、リスナーで使用するポートを指定します。When creating your listener, you designate a port for the listener to use. ポートが既定のポート 1433 である場合は、リスナーに接続するときにポート番号を指定する必要はありません。If the port is the default port of 1433, then you do not have to specify a port number when connecting to your listener. ただし、ポートが 1433 以外の場合は、次のように listenername,port の形式の接続文字列でポートを指定する必要があります。However, if the port is not 1433, then the port must be specified in the connection string in the format of listenername,port such as:

既定以外のポートを使用して接続する

リスナーの既定以外のポートを指定する ADO.NET プロバイダー (System.Data.SqlClient) の接続文字列の例を次に示します。An example of a connection string for the ADO.NET provider (System.Data.SqlClient) that specifies a non-default port for the listener:

Server=tcp:AGListener,1445;Database=AdventureWorks;Integrated Security=SSPI 

リスナーをバイパスするBypass listeners

可用性グループ リスナーでフェールオーバー リダイレクトと読み取り専用ルーティングが有効にされている場合、クライアント接続でこれらを使用する必要はありません。While availability group listeners enable support for failover redirection and read-only routing, client connections are not required to use them. また、クライアント接続は、可用性グループ リスナーに接続する代わりに、SQLServer のインスタンスを直接参照できます。A client connection can also directly reference the instance of SQL Server instead of connecting to the availability group listener.

SQL Server のインスタンスにとって、接続のログインで、可用性グループ リスナーまたは他のインスタンス エンドポイントのどちらを使用するかは関係ありません。To the instance of SQL Server, it is irrelevant whether a connection logs in using the availability group listener or using another instance endpoint. SQL Server のインスタンスは、接続先データベースの状態を確認し、可用性グループの構成およびインスタンス上のデータベースの現在の状態に基づいて、接続を許可または禁止します。The instance of SQL Server will verify the state of the targeted database and either allow or disallow connectivity based on the configuration of the availability group and the current state of the database on the instance. たとえば、クライアント アプリケーションが SQL Server ポートのインスタンスに直接接続し、可用性グループでホストされているターゲット データベースに接続する場合、ターゲット データベースがプライマリ状態でオンラインであれば接続は成功します。For example, if a client application connects directly to an instance of SQL Server port and connects to a target database hosted in an availability group, and the target database is in primary state and online, then connectivity will succeed. ターゲット データベースがオフラインまたは移行状態の場合は、データベースへの接続が失敗します。If the target database is offline or in a transitional state, connectivity to the database will fail.

データベース ミラーリングを Always On 可用性グループAlways On availability groupsに移行している間、セカンダリ レプリカが 1 つしか存在せず、これにユーザーが接続できない場合は、アプリケーションでデータベース ミラーリング接続文字列を指定できます。Alternatively, while migrating from database mirroring to Always On 可用性グループAlways On availability groups, applications can specify the database mirroring connection string as long as only one secondary replica exists and it disallows user connections.

データベース ミラーリングの接続文字列Database mirroring connection strings

可用性グループに 1 つしかセカンダリ レプリカが存在せず、さらに、その可用性グループが、セカンダリ レプリカに ALLOW_CONNECTIONS = READ_ONLY または ALLOW_CONNECTIONS = NONE が構成されている場合、クライアントは、データベース ミラーリングの接続文字列を使用してプライマリ レプリカに接続できます。If an availability group possesses only one secondary replica and is configured with either ALLOW_CONNECTIONS = READ_ONLY or ALLOW_CONNECTIONS = NONE for the secondary replica, clients can connect to the primary replica by using a database mirroring connection string. 可用性グループに存在する可用性レプリカが 2 つだけ (プライマリ レプリカおよび 1 つのセカンダリ レプリカ) であれば、既存のアプリケーションをデータベース ミラーリングから可用性グループに移行する際にこの方法を用いることができます。This approach can be useful while migrating an existing application from database mirroring to an availability group, as long as you limit the availability group to two availability replicas (a primary replica and one secondary replica). セカンダリ レプリカをさらに追加する場合は、可用性グループの可用性グループ リスナーを作成し、その可用性グループ リスナー DNS 名を使用するようにアプリケーションを更新する必要があります。If you add additional secondary replicas, you will need to create an availability group listener for the availability group and update your applications to use the availability group listener DNS name.

データベース ミラーリングの接続文字列を使用する際、クライアントは、 SQL ServerSQL Server Native Client または .NET Framework Data Provider for SQL ServerSQL Serverを使用できます。When using database mirroring connection strings, the client can use either SQL ServerSQL Server Native Client or .NET Framework Data Provider for SQL ServerSQL Server. クライアントが指定する接続文字列には、最低限、1 つのサーバー インスタンスの名前 ( イニシャル パートナー名) が指定されている必要があります。接続先の可用性レプリカを初期状態でホストするサーバー インスタンスは、この名前によって識別されます。The connection string provided by a client must minimally supply the name of one server instance, the initial partner name, to identify the server instance that initially hosts the availability replica to which you intend to connect. 接続文字列には、必要に応じて、別のサーバー インスタンスの名前を指定することもできます。これを フェールオーバー パートナー名 といい、初期状態でセカンダリ レプリカをホストするサーバー インスタンスは、フェールオーバー パートナー名として識別されます。Optionally, the connection string can also supply the name of another server instance, the failover partner name, to identify the server instance that initially hosts the secondary replica as the failover partner name.

データベース ミラーリングの接続文字列の詳細については、「 データベース ミラーリング セッションへのクライアントの接続 (SQL Server)」を参照してください。For more information about database mirroring connection strings, see Connect Clients to a Database Mirroring Session (SQL Server).

マルチサブネット フェールオーバーMulti-subnet failovers

接続文字列で MultiSubnetFailover 接続オプションをサポートするクライアント ライブラリを使用している場合、MultiSubnetFailover を "True" または "Yes" に設定して (使用しているプロバイダーの構文によって異なります)、別のサブネットへの可用性グループのフェールオーバーを最適化できます。If you're using client libraries that support the MultiSubnetFailover connection option in the connection string, you can optimize availability group failover to a different subnet by setting MultiSubnetFailover to "True" or "Yes", depending on the syntax of the provider you are using.

注意

可用性グループ リスナーおよび SQL Server フェールオーバー クラスター インスタンス名への単一サブネット接続およびマルチサブネット接続の両方に対して、この設定を推奨します。We recommend this setting for both single and multi-subnet connections to availability groups listeners and to SQL Server Failover Cluster Instance names. このオプションを有効にすると、単一サブネットのシナリオでも、さらに最適化されます。Enabling this option adds additional optimizations, even for single-subnet scenarios.

MultiSubnetFailover 接続オプションは TCP ネットワーク プロトコルのみで機能します。また、可用性グループ リスナーに接続する場合、および SQL Server 2019 (15.x)SQL Server 2019 (15.x)に接続している仮想ネットワーク名を使用する場合にのみサポートされます。The MultiSubnetFailover connection option only works with the TCP network protocol and is only supported when connecting to an availability group listener and for any virtual network name connecting to SQL Server 2019 (15.x)SQL Server 2019 (15.x).

マルチサブネット フェールオーバーを有効にする ADO.NET プロバイダー (System.Data.SqlClient) の接続文字列の例を次に示します。An example of the ADO.NET provider (System.Data.SqlClient) connection string that enables multi-subnet failover is as follows:

Server=tcp:AGListener,1433;Database=AdventureWorks;Integrated Security=SSPI; MultiSubnetFailover=True  

MultiSubnetFailover 接続オプションは、可用性グループが単一のサブネットのみにある場合でも、 True に設定することをお勧めします。The MultiSubnetFailover connection option should be set to True even if the availability group only spans a single subnet. これにより、今後、クライアント接続文字列を変更することなく、複数のサブネットをサポートするように新しいクライアントをあらかじめ構成することができ、単一サブネットのフェールオーバーのパフォーマンスも最適化できます。This allows you to preconfigure new clients to support future spanning of subnets without any need for future client connection string changes and also optimizes failover performance for single subnet failovers. MultiSubnetFailover 接続オプションは必須ではありませんが、サブネットのフェールオーバーが速くなるという利点があります。While the MultiSubnetFailover connection option is not required, it does provide the benefit of a faster subnet failover. これは、クライアント ドライバーが、可用性グループに関連付けられている各 IP アドレスの TCP ソケットを同時に開こうとするためです。This is because the client driver will attempt to open up a TCP socket for each IP address in parallel associated with the availability group. クライアント ドライバーは、最初の IP が正常に応答するのを待ち、応答した場合は、その IP を接続に使用します。The client driver will wait for the first IP to respond with success and once it does, will then use it for the connection.

リスナーと TLS/SSL 証明書Listeners & TLS/SSL certificates

可用性グループ リスナーへの接続時に、参加している SQL Server のインスタンスがセッションの暗号化と共に TLS/SSL 証明書を使用していることがあります。この場合、強制的に暗号化するために、接続クライアント ドライバーが TLS/SSL 証明書のサブジェクト代替名をサポートする必要があります。When connecting to an availability group listener, if the participating instances of SQL Server use TLS/SSL certificates in conjunction with session encryption, the connecting client driver will need to support the Subject Alternate Name in the TLS/SSL certificate in order to force encryption. SQL Server ドライバーでの証明書のサブジェクト代替名のサポートは、ADO.NET (SqlClient)、Microsoft JDBC、および SQL Native Client (SNAC) に対して計画されています。SQL Server driver support for certificate Subject Alternative Name is planned for ADO.NET (SqlClient), Microsoft JDBC, and SQL Native Client (SNAC).

X.509 証明書は、すべての可用性グループ リスナー セットのリストを証明書のサブジェクト代替名に設定して、フェールオーバー クラスターに参加している各サーバー ノードに対して構成する必要があります。An X.509 certificate must be configured for each participating server node in the failover cluster with a list of all availability group listeners set in the Subject Alternate Name of the certificate.

証明書の値の形式は次のとおりです。The format for the certificate values is:

CN = Server.FQDN  
SAN = Server.FQDN,Listener1.FQDN,Listener2.FQDN

たとえば、次のような値があるとします。For example, you have the following values:

Servername: Win2019   
Instance: SQL2019   
AG: AG2019   
Listener: Listener2019   
Domain: contoso.com  (which is also the FQDN)

可用性グループが 1 つだけの WSFC の場合、証明書には、サーバーの完全修飾ドメイン名 (FQDN) とリスナーの FQDN が含まれている必要があります。For a WSFC that has a single availability group, the certificate should have the fully qualified domain name (FQDN) of the server, and the FQDN of the listener:

CN: Win2019.contoso.com
SAN: Win2019.contoso.com, Listener2019.contoso.com 

この構成では、インスタンス (WIN2019\SQL2019) またはリスナー (Listener2019) に接続するときに、接続が暗号化されます。With this configuration, your connections will be encrypted when connecting to the instance (WIN2019\SQL2019), or the the listener (Listener2019).

ネットワークの構成方法によっては、SAN にも NetBIOS を追加することが必要な場合がある、顧客の小さいサブセットが存在します。Depending on how networking is configured, there is a small subset of customers that may need to add the NetBIOS to the SAN as well. この場合、証明書の値は次のようになります。In which case, the certificate values should be:

CN: Win2019.contoso.com
SAN: Win2019,Win2019.contoso.com,Listener2019,Listener2019.contoso.com

WSFC に次のような 3 つの可用性グループ リスナーがあるとします: Listener1、Listener2、Listener3If the WSFC has three availability group listeners, such as: Listener1, Listener2, Listener3

この場合は、証明書の値は次のようになります。Then the certificate values should be:

CN: Win2019.contoso.com
SAN: Win2019.contoso.com,Listener1.contoso.com,Listener2.contoso.com,Listener3.contoso.com

リスナーと Kerberos (SPN)Listeners and Kerberos (SPNs)

ドメイン管理者は、リスナーへのクライアント接続のために Kerberos を有効にするように、可用性グループリスナーごとに Active Directory のサービス プリンシパル名 (SPN) を構成する必要があります。A domain administrator must configure a Service Principal Name (SPN) in Active Directory for each availability group listener to enable Kerberos for client connections to the listener. SPN が登録されている場合は、可用性レプリカをホストするサーバー インスタンスのサービス アカウントを使用する必要があります。When registering the SPN, you must use the service account of the server instance that hosts the availability replica. SPN がすべてのレプリカで機能するためには、可用性グループをホストする WSFC クラスター内のすべてのインスタンスで同じサービス アカウントを使用する必要があります。For the SPN to work across all replicas, the same service account must be used for all instances in the WSFC cluster that hosts the availability group.

SPN は、Windows コマンド ライン ツールの setspn を使用して構成します。Use the setspn Windows command line tool to configure the SPN. たとえば、 AG1listener.Adventure-Works.com というドメイン アカウントで実行されるように構成された、一連の SQL Server インスタンスでホストされている corp\svclogin2という名前の可用性グループの SPN を構成する場合は、次のようになります。For example to configure an SPN for an availability group named AG1listener.Adventure-Works.com hosted on a set of instances of SQL Server all configured to run under the domain account corp\svclogin2:

setspn -A MSSQLSvc/AG1listener.Adventure-Works.com:1433 corp\svclogin2  

SQL Server の SPN の手動登録の詳細については、「 Kerberos 接続用のサービス プリンシパル名の登録」を参照してください。For more information about manual registration of a SPN for SQL Server, see Register a Service Principal Name for Kerberos Connections.

次のステップNext steps

リスナーに正常に接続したら、パフォーマンスを向上させるために、読み取り専用ワークロードバックアップをセカンダリ レプリカにオフロードすることを検討してください。Once you've successfully connected to the listener, consider offloading read-only workloads and backups to the secondary replica to improve performance. また、可用性グループの正常性を確保するために、さまざまな可用性グループの監視戦略を確認することもできます。You can also review various availability group monitoring strategies to ensure the health of your availability group.

可用性グループの詳細については、「Always On 可用性グループの概要 (SQL Server)」を参照してください。For more information about availability groups, see the Overview of Always On Availability Groups (SQL Server).