

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 AWS 上 SQL Server 的 Always On 可用性群組中設定唯讀路由
<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 中使用待命次要複本，方法是將唯讀工作負載從主要複本卸載至次要複本。

資料庫鏡像具有one-to-one映射。您無法直接讀取次要資料庫，因此您必須建立快照。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>

**先決條件**
+ 具有虛擬私有雲端 (VPC)、兩個可用區域、私有子網路和安全群組的作用中 AWS 帳戶
+ 兩部 Amazon Elastic Compute Cloud (Amazon EC2) 機器，具有在執行個體層級設定的 [SQL Server 2019 Enterprise Edition Amazon Machine Image](https://aws.amazon.com/marketplace/pp/prodview-btjcozd246p6w) with [Windows Server 容錯移轉叢集 (WSFC)](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/ec2-fci.html)，以及在主要節點 () 和次要節點 (`WSFCNODE1`) 之間的 SQL Server 層級設定的 Always On 可用性群組`WSFCNODE2`，這是名為 AWS Directory Service for Microsoft Active Directory 目錄的一部分 `tagechtalk.com`
+ 在次要複本`read-only`中設定為接受的一或多個節點
+ 名為 Always On 可用性群組`SQLAG1`的接聽程式
+ 在兩個節點上使用相同服務帳戶執行的 SQL Server Database Engine
+ SQL Server Management Studio (SSMS)
+ 名為 的測試資料庫 `test`

**產品版本**
+ SQL Server 2014 及更新版本

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

**目標技術堆疊**
+ Amazon EC2
+ AWS 受管 Microsoft AD
+ Amazon FSx

**目標架構**

下圖顯示 Always On 可用性群組 (AG) 接聽程式如何將連線中包含 `ApplicationIntent` 參數的查詢重新導向至適當的次要節點。

![\[節點 1 WSFC 和節點 2 WSFC 與 Amazon EFS 的兩個可用區域之間的三個步驟程序。\]](http://docs.aws.amazon.com/zh_tw/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 資源在 AWS 雲端中使用 Microsoft Active Directory。
+ [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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將複本更新為唯讀。 | 若要同時將主要複本和次要複本更新為唯讀，請從 SSMS 連線至主要複本，然後從*其他資訊*區段執行*步驟 1* 程式碼。 | DBA | 
| 建立路由 URL。 | 若要建立兩個複本的路由 URL，請從*其他資訊*區段執行*步驟 2* 程式碼。在此程式碼中， `tagechtalk.com`是 AWS Managed Microsoft AD 目錄的名稱。 | DBA | 
| 建立路由清單。 | 若要建立兩個複本的路由清單，請從*其他資訊*區段執行步驟 3 程式碼。 | DBA | 
| 驗證路由清單。 | 從 SQL Server Management Studio 連線至主要執行個體，並從*其他資訊*區段執行*步驟 4* 程式碼，以驗證路由清單。 | DBA | 

### 測試唯讀路由
<a name="test-the-read-only-routing"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 使用 ApplicationIntent 參數進行連線。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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/zh_tw/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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 使用 sqlcmd 連線。 | 若要從 sqlcmd 連線，請從命令提示字元*的其他資訊*區段執行*步驟 5* 程式碼。連線後，請執行下列命令以顯示連線的伺服器名稱。<pre>SELECT SERVERPROPERTY('ComputernamePhysicalNetBios') .</pre>輸出會顯示目前的次要複本名稱 (`WSFCNODE1`)。 | DBA | 

## 疑難排解
<a name="configure-read-only-routing-in-an-always-on-availability-group-in-sql-server-on-aws-troubleshooting"></a>


| 問題 | 解決方案 | 
| --- | --- | 
| 建立接聽程式失敗，並顯示「WSFC 叢集無法讓網路名稱資源上線」訊息。 | 如需詳細資訊，請參閱 Microsoft 部落格文章 [Create Listener Fails with Message 'WSFC 叢集無法讓網路名稱資源上線'](https://techcommunity.microsoft.com/t5/sql-server-support-blog/create-listener-fails-with-message-the-wsfc-cluster-could-not/ba-p/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
```

**步驟 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
```