共用方式為


設定可用性群組的 Read-Only 路由 (SQL Server)

若要設定 AlwaysOn 可用性群組以支援 SQL Server 2014 中的唯讀路由,您可以使用 Transact-SQL 或 PowerShell。 只讀路由 是指 SQL Server 能夠將限定的只讀連線要求路由至可用的 AlwaysOn 可讀取次要副本(也就是設定為在次要角色下運行時允許唯讀工作負載的副本)。 若要支援只讀路由,可用性群組必須擁有 可用性群組接聽程式。 唯讀用戶端必須將連線要求指向此聆聽器,而用戶端的連接字串必須將應用程式意圖指定為「唯讀」。也就是說,它們必須是 唯讀意圖連線要求

備註

如需如何設定可讀取次要複本的資訊,請參閱 設定可用性複本 (SQL Server) 上的 Read-Only 存取

備註

SQL Server Management Studio 不支援設定唯讀路由。

開始之前

先決條件

您需要設定哪些複本屬性以支援 Read-Only 路由?

  • 針對支援唯讀路由的每個可讀取次要複本,您必須指定 唯讀路由 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 GROUPTransact-SQL 語句。 如果您要新增或修改現有可用性群組的複本,請使用 ALTER AVAILABILITY GROUPTransact-SQL 語句。

    • 若要設定次要角色的唯讀路由,請在 ADD REPLICA 或 MODIFY REPLICA WITH 子句中指定 SECONDARY_ROLE 選項,如下所示:

      SECONDARY_ROLE READ_ONLY_ROUTING_URL ='TCP://system-addressport')

      唯讀路由 URL 的參數如下所示:

      system-address
      這是明確識別目的地電腦系統的字串,例如系統名稱、完整網域名稱或 IP 位址。

      港口
      這是 SQL Server 實例之 Database Engine 所使用的埠號碼。

      例如: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 ]

      其中, 伺服器 會識別裝載可用性群組中只讀次要複本的伺服器實例。

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

      備註

      設定唯讀路由清單之前,您必須先設定唯讀路由URL。

範例 (Transact-SQL)

下列範例會修改現有可用性群組中的兩個可用性複本 AG1,以便在其中一個複本目前擁有主要角色時支援只讀路由。 為了識別載入可用性複本的伺服器實例,此範例會指定實例名稱和COMPUTER01COMPUTER02

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 Cmdlet。 修改現有的可用性複本時,請使用 Set-SqlAvailabilityReplica Cmdlet。 相關參數如下所示:

    • 若要設定次要角色的唯讀路由,請指定 ReadonlyRoutingConnectionUrl“url 參數。

      其中,url 是用於路由到複本以進行唯讀連線的完整網域名稱 (FQDN) 和連接埠。 例如:-ReadonlyRoutingConnectionUrl "TCP://DBSERVER8.manufacturing.Adventure-Works.com:7024"

      如需詳細資訊,請參閱 AlwaysOn 的 read_only_routing_url 計算

    • 若要設定主要角色的連線存取,請指定 ReadonlyRoutingList“server [ ...n ],其中 伺服器 會識別裝載可用性群組中只讀次要複本的伺服器實例。 例如:-ReadOnlyRoutingList "SecondaryServer","PrimaryServer"

      備註

      您必須先設定複本的唯讀路由 URL,才能設定其唯讀路由清單。

    備註

    若要檢視 Cmdlet 的語法,請使用 Get-Help SQL Server PowerShell 環境中的 Cmdlet。 如需詳細資訊,請參閱 Get Help SQL Server PowerShell

若要設定及使用 SQL Server PowerShell 提供者,請參閱 SQL Server PowerShell 提供者取得 SQL Server PowerShell 的說明

範例 (PowerShell)

下列範例將在可用性群組中,為唯讀路由設定主要複本與次要複本。 首先,此範例會將只讀路由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  

後續措施:設定 Read-Only 路由之後 請遵循以下步驟: 步驟 1:

一旦目前的主要副本和可讀取的次要副本被設定為支援在這兩個角色中的只讀路由後,可讀取的次要副本就可以接收透過可用性群組接聽程式連接的用戶端發送的讀取意圖連接要求。

小提示

使用 bcp 公用程式sqlcmd 公用程式時,您可以使用 -K ReadOnly 參數來指定對啟用唯讀存取的次要複本的唯讀存取權。

用戶端 Connection-Strings 的需求和建議

若要讓用戶端應用程式使用唯讀路由,其連接字串必須符合下列需求:

  • 使用 TCP 通訊協定。

  • 將應用程式意圖屬性/屬性設定為 readonly。

  • 請參考已設定為支援只讀路由的可用性群組聆聽器。

  • 參考該可用性群組中的資料庫。

此外,我們建議連線字串啟用多子網故障轉移,此功能支援每個子網中每個副本的平行客戶端執行緒。 這可將故障轉移之後的用戶端重新連線時間降至最低。

連接字串的語法取決於應用程式所使用的 SQL Server 提供者。 下列適用於 SQL Server 的 .NET Framework Data Provider 4.0.2 連接字串範例說明連接字串的部分,這些連接字串是必要的,並建議用於只讀路由。

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

如需只讀應用程式意圖和唯讀路由的詳細資訊,請參閱可用性群組接聽程式、用戶端連線能力及應用程式故障轉移(SQL Server)。

如果 Read-Only 路由無法正常運作

如需針對只讀路由設定進行疑難解答的資訊,請參閱 Read-Only 路由無法正常運作

相關工作

若要檢視只讀路由組態

設定客戶端連線權限

在應用程式中使用連接字串

相關內容

另請參閱

AlwaysOn 可用性群組概觀 (SQL Server)
AlwaysOn 可用性群組概觀 (SQL Server)
可啟動的次要副本:可讀取的次要副本(AlwaysOn 高可用性群組)
關於可用性複本的用戶端連接存取 (SQL Server)
可用性群組接聽程式、用戶端連線及應用程式故障轉移 (SQL Server)