Share via


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

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

注意

読み取り可能なセカンダリ レプリカを構成する方法については、「可用性レプリカでの読み取り専用アクセスの構成 (SQL Server)」を参照してください。

  • 作業を開始する準備:

    前提条件

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

    セキュリティ

  • 読み取り専用ルーティングを構成するために使用するもの:

    Transact-SQL

    PowerShell

    注意

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

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

  • 関連タスク

  • 関連コンテンツ

作業を開始する準備

前提条件

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

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

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

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

    注意

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

注意

可用性グループ リスナーと読み取り専用ルーティングの詳細については、「可用性グループ リスナー、クライアント接続、およびアプリケーションのフェールオーバー (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 の使用

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

注意

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

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

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

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

注意

コード例については、このセクションの後半の「例 (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 ] を指定します。server は、可用性グループの読み取り専用セカンダリ レプリカをホストするサーバー インスタンスを識別します。 例: -ReadOnlyRoutingList "SecondaryServer","PrimaryServer"

      注意

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

    注意

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

SQL Server PowerShell プロバイダーを設定して使用するには

例 (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)」を参照してください。

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

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

関連タスク

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

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

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

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連コンテンツ

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連項目

概念

AlwaysOn 可用性グループの概要 (SQL Server)

AlwaysOn 可用性グループの概要 (SQL Server)

アクティブなセカンダリ: 読み取り可能なセカンダリ レプリカ (AlwaysOn 可用性グループ)

可用性レプリカに対するクライアント接続アクセスについて (SQL Server)

可用性グループ リスナー、クライアント接続、およびアプリケーションのフェールオーバー (SQL Server)