可用性グループの読み取り専用ルーティングの構成 (SQL Server)

SQL Server 2014 で読み取り専用ルーティングをサポートするように AlwaysOn 可用性グループを構成するには、Transact-SQL または PowerShell のいずれかを使用できます。 読み取り専用ルーティングとは、対象となる読み取り専用接続要求を使用可能な AlwaysOn 読み取り可能なセカンダリ レプリカ (つまり、セカンダリ ロールで実行するときに読み取り専用ワークロードを許可するように構成されたレプリカ) にルーティングするSQL Server機能を指します。 読み取り専用ルーティングをサポートするには、可用性グループに 可用性グループ リスナーが存在する必要があります。 読み取り専用クライアントは、このリスナーに接続要求を送信する必要があります。クライアントの接続文字列では、アプリケーションの目的として "読み取り専用" を指定する必要があります。つまり、読み取りを目的とした接続要求であることが必要です。

Note

読み取り可能なセカンダリ レプリカを構成する方法については、「可用性レプリカでの読み取り専用アクセスの構成 (SQL Server)」が存在する必要があります。

Note

読み取り専用ルーティングの構成は、SQL Server Management Studioではサポートされていません。

はじめに

前提条件

読み取り専用ルーティングをサポートするために構成する必要があるレプリカのプロパティ

  • 読み取り専用ルーティングをサポートしようとしている読み取り可能なセカンダリ レプリカに対して、 読み取り専用ルーティングの URLを指定する必要があります。 この URL は、ローカル レプリカがセカンダリ ロールで実行されている場合にのみ有効です。 読み取り専用ルーティングの URL は、必要に応じてレプリカごとに指定する必要があります。 各読み取り専用ルーティングの URL は、読み取りを目的とした接続要求を特定の読み取り可能なセカンダリ レプリカにルーティングする際に使用されます。 通常は、読み取り可能なすべてのセカンダリ レプリカに読み取り専用ルーティングの URL が割り当てられます。

    可用性レプリカの読み取り専用ルーティングの URL の計算の詳細については、「 AlwaysOn の read_only_routing_url の計算」を参照してください。

  • 可用性レプリカがプライマリ レプリカである場合に読み取り専用ルーティングをサポートするには、その可用性レプリカに対して 読み取り専用ルーティング リストを指定する必要があります。 読み取り専用ルーティング リストは、ローカル レプリカがプライマリ ロールで実行されている場合にのみ有効です。 このリストは、必要に応じてレプリカごとに指定する必要があります。 通常、各読み取り専用ルーティング リストには、すべての読み取り専用ルーティングの URL が含まれており、リストの末尾にローカル レプリカの URL が示されています。

    Note

    読み取りを目的とした接続要求は、現在のプライマリ レプリカの読み取り専用ルーティング リスト内の最初に使用できる読み取り可能なセカンダリにルーティングされます。 負荷分散はありません。

Note

可用性グループ リスナーと読み取り専用ルーティングの詳細については、「可用性グループ リスナー、クライアント接続、およびアプリケーションのフェールオーバー (SQL Server)」を参照してください。

セキュリティ

アクセス許可

タスク アクセス許可
可用性グループの作成時にレプリカを構成する sysadmin 固定サーバー ロールのメンバーシップと、CREATE AVAILABILITY GROUP サーバー権限、ALTER ANY AVAILABILITY GROUP 権限、CONTROL SERVER 権限のいずれかが必要です。
可用性レプリカを変更する 可用性グループの ALTER AVAILABILITY GROUP 権限、CONTROL AVAILABILITY GROUP 権限、ALTER ANY AVAILABILITY GROUP 権限、または CONTROL SERVER 権限が必要です。

Transact-SQL の使用

読み取り専用ルーティングを構成するには

Note

コード例については、このセクションの後半の「 例 (Transact-SQL)」を参照してください。

  1. プライマリ レプリカをホストするサーバー インスタンスに接続します。

  2. 新しい可用性グループのレプリカを指定する場合は、CREATE AVAILABILITY GROUP Transact-SQL ステートメントを使用します。 既存の可用性グループのレプリカを追加または変更する場合は、 ALTER AVAILABILITY GROUPTransact-SQL ステートメントを使用します。

    • セカンダリ ロールの読み取り専用ルーティングを構成するには、ADD REPLICA 句または MODIFY REPLICA WITH 句で、SECONDARY_ROLE オプションを次のように指定します。

      SECONDARY_ROLE ( READ_ONLY_ROUTING_URL ='TCP://system-address:port')

      読み取り専用ルーティング URL のパラメーターは次のとおりです。

      system-address
      システム名、完全修飾ドメイン名では、対象のコンピューター システムを明確に識別する、IP アドレスなどの文字列です。

      port
      SQL Server インスタンスのデータベース エンジンによって使用されるポート番号です。

      例: SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433')

      レプリカが既に読み取り専用接続を許可するように構成されている場合、MODIFY REPLICA 句の ALLOW_CONNECTIONS は省略可能です。

      詳細については、「 AlwaysOn の read_only_routing_url の計算」を参照してください。

    • プライマリ ロールの読み取り専用ルーティングを構成するには、ADD REPLICA 句または MODIFY REPLICA WITH 句で、PRIMARY_ROLE オプションを次のように指定します。

      PRIMARY_ROLE ( READ_ONLY_ROUTING_LIST =('server' [ ,...n ] ))

      server は、可用性グループの読み取り専用セカンダリ レプリカをホストするサーバー インスタンスを識別します。

      例: PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('Server1','Server2'))

      注意

      読み取り専用ルーティング リストを構成する前に、読み取り専用ルーティング URL を設定する必要があります。

例 (Transact-SQL)

次の例では、既存の可用性グループ AG1 の 2 つの可用性レプリカを、これらのレプリカのいずれかが現在プライマリ ロールを所有している場合に読み取り専用ルーティングをサポートするように変更します。 可用性レプリカをホストするサーバー インスタンスを識別するために、この例ではインスタンス名 COMPUTER01 および COMPUTER02 を指定します。

ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));  
ALTER AVAILABILITY GROUP [AG1]  
 MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.contoso.com:1433'));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER01' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));  
  
ALTER AVAILABILITY GROUP [AG1]   
MODIFY REPLICA ON  
N'COMPUTER02' WITH   
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));  
GO

PowerShell の使用

読み取り専用ルーティングを構成するには

Note

コード例については、このセクションの後半の「 例 (PowerShell)」を参照してください。

  1. 既定 (cd) を、プライマリ レプリカをホストするサーバー インスタンスに設定します。

  2. 可用性グループに可用性レプリカを追加する場合は、New-SqlAvailabilityReplica コマンドレットを使用します。 既存の可用性レプリカを変更する場合は、Set-SqlAvailabilityReplica コマンドレットを使用します。 関連するパラメーターは次のとおりです。

    • セカンダリ ロールの読み取り専用ルーティングを構成するには、 ReadonlyRoutingConnectionUrl"url" パラメーターを 指定します。

      url は、読み取り専用接続のためにレプリカにルーティングするときに使用する、接続の完全修飾ドメイン名 (FQDN) およびポートです。 例: -ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"

      詳細については、「 AlwaysOn の read_only_routing_url の計算」を参照してください。

    • プライマリ ロールの接続アクセスを構成するには、 ReadonlyRoutingList"server" [ ,... を指定します。n ]。 サーバー は、可用性グループ内の読み取り専用セカンダリ レプリカをホストするサーバー インスタンスを識別します。 例: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer"

      注意

      レプリカの読み取り専用ルーティング リストを構成する前に、レプリカの読み取り専用ルーティング URL を設定する必要があります。

    Note

    コマンドレットの構文を表示するには、SQL Server PowerShell 環境で コマンドレットを使用Get-Helpします。 詳細については、「 Get Help SQL Server PowerShell」を参照してください。

SQL Server PowerShell プロバイダーを設定して使用するには、「PowerShell プロバイダーのSQL Server」および「PowerShellのヘルプSQL Server表示する」を参照してください。

例 (PowerShell)

次の例では、可用性グループ内のプライマリ レプリカと 1 つのセカンダリ レプリカを読み取り専用ルーティング用に構成します。 まず、読み取り専用ルーティングの URL が各レプリカに割り当てられます。 次に、プライマリ レプリカで読み取り専用ルーティング リストを設定します。 接続文字列で "ReadOnly" プロパティが設定された接続は、セカンダリ レプリカにリダイレクトされます。 このセカンダリ レプリカが読み取り不可である場合 (ConnectionModeInSecondaryRole 設定によって決まります)、接続はプライマリ レプリカに戻されます。

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg  
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"  
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"  
  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica  
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica  

補足情報: 読み取り専用ルーティングを構成した後

現在のプライマリ レプリカと読み取り可能なセカンダリ レプリカをそれぞれのロールで読み取り専用ルーティングをサポートするように設定すると、読み取り可能なセカンダリ レプリカは、可用性グループ リスナーを介して接続するクライアントからの読み取りを目的とした接続要求を受信できるようになります。

ヒント

bcp ユーティリティまたは sqlcmd ユーティリティを使用する場合は、スイッチを指定することで、読み取り専用アクセスが有効になっているセカンダリ レプリカへの読み取り専用アクセスを-K ReadOnly指定できます。

クライアント接続文字列の要件および推奨事項

クライアント アプリケーションで読み取り専用ルーティングを使用するには、クライアントの接続文字列が次の要件を満たしている必要があります。

  • TCP プロトコルを使用する。

  • アプリケーションの目的の属性またはプロパティを読み取り専用に設定する。

  • 読み取り専用ルーティングをサポートするように構成された可用性グループのリスナーを参照する。

  • その可用性グループ内のデータベースを参照する。

さらに、接続文字列でマルチサブネット フェールオーバーを有効にすることをお勧めします。マルチサブネット フェールオーバーは、各サブネット上の各レプリカについて並行クライアント スレッドをサポートします。 これにより、フェールオーバー後のクライアント再接続時間が最小化されます。

接続文字列の構文は、アプリケーションが使用している SQL Server プロバイダーに依存します。 .NET Framework Data Provider 4.0.2 for SQL Server 用の次の接続文字列例は、読み取り専用ルーティング用に機能することが必須および推奨される接続文字列の一部を示しています。

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True  

読み取り専用のアプリケーションの目的と読み取り専用のルーティングの詳細については、「可用性グループ リスナー、クライアント接続、およびアプリケーションのフェールオーバー (SQL Server)」を参照してください。

読み取り専用ルーティングが正常に動作しない場合

読み取り専用ルーティング構成のトラブルシューティングの詳細については、「 読み取り専用ルーティングが正常に動作しない」を参照してください。

Related Tasks

読み取り専用ルーティングの構成を表示するには

クライアント接続アクセスを構成するには

アプリケーションで接続文字列を使用するには

関連コンテンツ

参照

AlwaysOn 可用性グループの概要 (SQL Server)
AlwaysOn 可用性グループの概要 (SQL Server)
アクティブなセカンダリ:読み取り可能なセカンダリ レプリカ (AlwaysOn 可用性グループ)
可用性レプリカに対するクライアント接続アクセスについて (SQL Server)
可用性グループ リスナー、クライアント接続、およびアプリケーションのフェールオーバー (SQL Server)