

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# で SQL Server の Always On 可用性グループで読み取り専用ルーティングを設定する AWS
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws"></a>

*Subhani Shaik (Amazon Web Services)*

## 概要
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-summary"></a>

このパターンでは、読み取り専用ワークロードをプライマリレプリカからセカンダリレプリカにオフロードすることで、SQL Server Always On のスタンバイセカンダリレプリカを使用する方法について説明します。

データベースミラーリングには 1 対 1 のマッピングがあります。セカンダリデータベースを直接読み取ることはできないため、スナップショットを作成する必要があります。Always On アベイラビリティグループ機能は Microsoft SQL Server 2012 で導入されました。それ以降のバージョンでは、読み取り専用ルーティングなどの主要な機能が導入されています。Always On アベイラビリティグループでは、レプリカモードを読み取り専用に変更することで、セカンダリレプリカからデータを直接読み取ることができます。

Always On アベイラビリティグループソリューションは、高アベイラビリティ (HA)、ディザスタリカバリ (DR)、およびデータベースミラーリングの代替手段をサポートします。Always On アベイラビリティグループはデータベースレベルで機能し、一連のユーザーデータベースのアベイラビリティを最大化します。

SQL Server は読み取り専用ルーティングメカニズムを使用して、受信した読み取り専用接続をセカンダリ読み取りレプリカにリダイレクトします。そのためには、接続文字列に次のパラメータと値を追加する必要があります。
+ `ApplicationIntent=ReadOnly`
+ `Initial Catalog=<database name>`

## 前提条件と制限
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-prereqs"></a>

**前提条件**
+ Virtual Private Cloud (VPC)、2 つのアベイラビリティーゾーン、プライベートサブネット、セキュリティグループ AWS アカウント を持つアクティブな 
+ [SQL Server 2019 Enterprise Edition Amazon Machine Image](https://aws.amazon.com/marketplace/pp/prodview-btjcozd246p6w) with [Windows Server Failover Clustering (WSFC)](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/ec2-fci.html) がインスタンスレベルで設定され、プライマリノード () とセカンダリノード (`WSFCNODE1`) の間の SQL Server レベルで設定されている 2 つの Amazon Elastic Compute Cloud (Amazon EC2`WSFCNODE2`) マシン。これは、 という名前の AWS Directory Service for Microsoft Active Directory ディレクトリの一部です。 `tagechtalk.com`
+ セカンダリレプリカで `read-only` を許可するように構成された 1 つ以上のノード
+ Always On アベイラビリティグループに対して `SQLAG1` と名付けられたリスナー
+ 2 つのノードに対して同じサービスアカウントで実行されている SQL Server データベースエンジン
+ SQL Server Management Studio (SSMS) 
+ `test` という名のテストデータベース

**製品バージョン**
+ SQL Server 2014 およびそれ以降

## アーキテクチャ
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-architecture"></a>

**ターゲットテクノロジースタック**
+ Amazon EC2
+ AWS Managed Microsoft AD
+ Amazon FSx

**ターゲットアーキテクチャ**

次の図は、Always On アベイラビリティグループ (AG) リスナーが、接続内に `ApplicationIntent` パラメータを含むクエリを適切なセカンダリノードにリダイレクトする方法を示しています。

![Amazon EFS を使用したノード 1 WSFC とノード 2 WSFC の 2 つのアベイラビリティーゾーン間の 3 つのステッププロセス。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/19b5937b-da10-4c74-8619-fdcb758f2211/images/f9ba0f89-7dc2-4f4c-8eee-bef56968ad2d.png)


1. Always On アベイラビリティグループリスナーにリクエストが送信されます。

1. 接続文字列に `ApplicationIntent` パラメータがない場合、リクエストはプライマリインスタンスに送信されます。

1. 接続文字列に が含まれている場合`ApplicationIntent=ReadOnly`、リクエストは読み取り専用ルーティング設定のセカンダリインスタンスに送信されます。これは Always On 可用性グループを持つ WSFC です。

## ツール
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-tools"></a>

**AWS のサービス**
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html) は、ディレクトリ対応のワークロードと AWS リソースが で Microsoft Active Directory を使用できるようにします AWS クラウド。
+ [Amazon Elastic Compute Cloud (Amazon EC2)](https://docs.aws.amazon.com/ec2/) は、 AWS クラウドでスケーラブルなコンピューティング容量を提供します。仮想サーバーを必要な数だけ起動して、迅速にスケールアップまたはスケールダウンができます。
+ [Amazon FSx](https://docs.aws.amazon.com/fsx/?id=docs_gateway) は、業界標準の接続プロトコルをサポートし、 AWS リージョン全体で高い可用性とレプリケーションを提供するファイルシステムを提供します。

**その他のサービス**
+ SQL Server Management Studio (SSMS) は、SQL Server インスタンスを接続、管理、および管理するためのツールです。
+ sqlcmd はコマンドラインユーティリティです。

## ベストプラクティス
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-best-practices"></a>

Always On アベイラビリティグループの詳細については、[SQL Server ドキュメント](https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/always-on-availability-groups-sql-server?view=sql-server-ver16)を参照してください。

## エピック
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-epics"></a>

### 読み取り専用ルーティングの設定
<a name="set-up-read-only-routing"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| レプリカを読み取り専用に更新します。 | プライマリレプリカとセカンダリレプリカの両方を読み取り専用に更新するには、SSMS からプライマリレプリカに接続し、「[追加情報](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional)」セクションの*ステップ 1* コードを実行します。 | DBA | 
| ルーティング URL を作成する。 | 両方のレプリカのルーティング URL を作成するには、「[追加情報](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional)」セクションの*ステップ 2* コードを実行します。このコードでは、 `tagechtalk.com`は AWS Managed Microsoft AD ディレクトリの名前です。 | DBA | 
| ルーティングリストを作成する。 | 両方のレプリカのルーティングリストを作成するには、[追加情報](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional)セクションの*ステップ 3* コードを実行します。 | DBA | 
| ルーティングリストを検証します。 | SQL Server Management Studio からプライマリインスタンスに接続し、「[追加情報](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional)」セクションの*ステップ 4* コードを実行してルーティングリストを検証します。 | DBA | 

### 読み取り専用ルーティングのテスト
<a name="test-the-read-only-routing"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| `ApplicationIntent` パラメータを使用して接続します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws.html) | DBA | 
| フェイルオーバーを実行する。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws.html) | DBA | 

### sqlcmd コマンドラインユーティリティを使用して接続する
<a name="connect-by-using-the-sqlcmd-command-line-utility"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| sqlcmd を使用して接続します。 | sqlcmd から接続するには、コマンドプロンプトの [[追加情報](#configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional)] セクションから*ステップ 5* のコードを実行します。接続後、次のコマンドを実行して、接続されているサーバー名を表示します。<pre>SELECT SERVERPROPERTY('ComputernamePhysicalNetBios') .</pre><br />出力には現在のセカンダリレプリカ名 (`WSFCNODE1`) が表示されます。 | DBA | 

## トラブルシューティング
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| リスナーの作成が失敗し、「WSFC クラスターはネットワーク名リソースをオンラインにできませんでした」というメッセージが表示された。 | 詳細については、Microsoft のブログ記事「[リスナーの作成が失敗し、「WSFCクラスターはネットワーク名リソースをオンラインにできませんでした」というメッセージが表示される](https://techcommunity.microsoft.com/blog/sqlserversupport/create-listener-fails-with-message-the-wsfc-cluster-could-not-bring-the-network-/318235)」を参照してください。 | 
| 他のリスナーの問題やネットワークアクセスの問題などの潜在的な問題。 | Microsoft ドキュメントの「[Always On アベイラビリティグループ構成のトラブルシューティング (SQL Server)](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/troubleshoot-always-on-availability-groups-configuration-sql-server?view=sql-server-ver16)」を参照してください。 | 

## 関連リソース
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-resources"></a>
+ [Always On アベイラビリティグループの読み取り専用ルーティングの構成](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-read-only-routing-for-an-availability-group-sql-server?view=sql-server-ver16)
+ [Always On アベイラビリティグループ構成のトラブルシューティング (SQL Server)](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/troubleshoot-always-on-availability-groups-configuration-sql-server?view=sql-server-ver16)

## 追加情報
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-additional"></a>

*ステップ 1. レプリカを読み取り専用に更新する*

```
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE1' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY))
GO
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE2' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY))
GO
```

*ステップ 2. ルーティング URL を作成する*

```
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE1' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://WSFCNode1.tagechtalk.com:1433'))
GO
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://WSFCNode2.tagechtalk.com:1433'))
GO
```

*ステップ 3. ルーティングリストを作成する*

```
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE1' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=('WSFCNODE2','WSFCNODE1')));
GO
ALTER AVAILABILITY GROUP [SQLAG1] MODIFY REPLICA ON N'WSFCNODE2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('WSFCNODE1','WSFCNODE2')));
GO
```

*Step 4. ルーティングリストを検証する*

```
SELECT AGSrc.replica_server_name AS PrimaryReplica, AGRepl.replica_server_name AS ReadOnlyReplica, AGRepl.read_only_routing_url AS RoutingURL , AGRL.routing_priority AS RoutingPriority FROM sys.availability_read_only_routing_lists AGRL INNER JOIN sys.availability_replicas AGSrc ON AGRL.replica_id = AGSrc.replica_id INNER JOIN sys.availability_replicas AGRepl ON AGRL.read_only_replica_id = AGRepl.replica_id INNER JOIN sys.availability_groups AV ON AV.group_id = AGSrc.group_id ORDER BY PrimaryReplica
```

*ステップ 5. SQL コマンドユーティリティ*

```
sqlcmd -S SQLAG1,1433 -E -d test -K ReadOnly
```