Sql-Server

是否可以自動故障轉移到可用性組中只讀副本的主副本?

  • October 4, 2016

我想建立一個有兩個節點的可用性組。一個節點將是主副本,第二個節點將設置為只讀副本。

在我的應用程序中,我使用讀/寫連接執行所有活動,並使用只讀連接執行報告。只讀連接將連接到只讀副本。

但是如果具有隻讀副本的節點下線會怎樣?據我了解文件,如果組中沒有可用的只讀副本,則無法再建立只讀連接。

是否有一種機制可以用於回退到主副本的只讀連接?還是我必須在我的應用程序中手動建構這樣的備份?

文件中對此進行了介紹:為可用性組 (SQL Server) 配置只讀路由,但要使此方法起作用,您需要在兩個副本上配置只讀路由 URL。

在連接字元串中設置了“ReadOnly”屬性的連接將被重定向到輔助副本。如果此輔助副本不可讀(由 ConnectionModeInSecondaryRole 設置確定),則連接將被定向回主副本。

這是來自 MSDN 的 PowerShell 範例,說明如何將只讀路由 URL 添加到兩個可用的副本:

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 

如果要使用只讀路由,對連接字元串也有一些要求:

  • 使用 TCP 協議。
  • 將應用程序意圖屬性/屬性設置為只讀。
  • 引用配置為支持只讀路由的可用性組的偵聽器。
  • 引用該可用性組中的數據庫。

引用自:https://dba.stackexchange.com/questions/151398