若要設定 AlwaysOn 可用性群組以支援 SQL Server 2014 中的唯讀路由,您可以使用 Transact-SQL 或 PowerShell。 只讀路由 是指 SQL Server 能夠將限定的只讀連線要求路由至可用的 AlwaysOn 可讀取次要副本(也就是設定為在次要角色下運行時允許唯讀工作負載的副本)。 若要支援只讀路由,可用性群組必須擁有 可用性群組接聽程式。 唯讀用戶端必須將連線要求指向此聆聽器,而用戶端的連接字串必須將應用程式意圖指定為「唯讀」。也就是說,它們必須是 唯讀意圖連線要求。
備註
如需如何設定可讀取次要複本的資訊,請參閱 設定可用性複本 (SQL Server) 上的 Read-Only 存取。
備註
SQL Server Management Studio 不支援設定唯讀路由。
開始之前
先決條件
可用性群組必須擁有可用性群組接聽器。 如需詳細資訊,請參閱建立或設定可用性群組接聽程式 (SQL Server)。
一或多個可用性複本必須設定為接受次要角色中的唯讀(也就是,為 可讀取的次要複本(AlwaysOn%20Availability%20Groups)。md)。 如需詳細資訊,請參閱設定可用性複本上的唯讀存取 (SQL Server)。
您必須連接到承載當前主要副本的伺服器實例。
您需要設定哪些複本屬性以支援 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)。
連接到主要複本所在的伺服器實例。
如果您要為新的可用性群組指定複本,請使用 CREATE AVAILABILITY GROUPTransact-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 位址。港口
這是 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)。
將預設 (
cd) 設定為裝載主要複本的伺服器實例。將可用性復本新增至可用性群組時,請使用
New-SqlAvailabilityReplicaCmdlet。 修改現有的可用性複本時,請使用Set-SqlAvailabilityReplicaCmdlet。 相關參數如下所示:若要設定次要角色的唯讀路由,請指定 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-HelpSQL 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 路由無法正常運作。
相關工作
若要檢視只讀路由組態
sys.availability_replicas (Transact-SQL)(read_only_routing_url 欄)
設定客戶端連線權限
在應用程式中使用連接字串
相關內容
另請參閱
AlwaysOn 可用性群組概觀 (SQL Server)
AlwaysOn 可用性群組概觀 (SQL Server)
可啟動的次要副本:可讀取的次要副本(AlwaysOn 高可用性群組)
關於可用性複本的用戶端連接存取 (SQL Server)
可用性群組接聽程式、用戶端連線及應用程式故障轉移 (SQL Server)