Availability-Groups

AlwaysOn 不同偵聽器的只讀路由配置

  • April 17, 2017

我有 5 個 sql 伺服器。其中 3 個工作同步,2 個非同步工作。負載平衡只讀路由是 SQL Server 2016 上的一個很棒的功能。但是如果我將非同步伺服器添加到負載平衡配置中,它會因為數據失去而變得不可靠。

我想只為數據失去在短時間內不重要的查詢添加一個偵聽器。就像報告查詢一樣。如何為不同的監聽器配置sql server負載均衡路由配置?

但是,如果我將非同步伺服器添加到負載平衡配置中,它會因為數據失去而變得不可靠。

這裡發生了兩種不同的事情,我認為這很令人困惑。第一個是處理副本尚未發送或接收的數據,第二個是事務可以讀取的數據,因為它已被重做並遵循快照隔離規則。

同步送出並不能保證數據立即可用,同步和非同步都必須經過重做 - 雖然同步送出確實會確認遠端副本上的數據已被硬化,但這並不意味著數據可以立即可供讀取- 它仍然需要經過重做並遵循快照隔離要求。

確實,數據失去在強制故障轉移事件中發揮作用——這種情況應該很少見。

我想只為數據失去在短時間內不重要的查詢添加一個偵聽器。就像報告查詢一樣。如何為不同的偵聽器配置 SQL Server 負載平衡路由配置?

每個可用性組的每個副本都可以配置只讀路由,無論是一個偵聽器還是三個偵聽器都沒有關係。

為此,您將需要使用硬體負載平衡器(或 DNS 循環等)來創建這些特定要求

對此有一些解決方法,它並不理想,但它可能對您的情況有所幫助。

創建一個新數據庫,並在數據庫中創建一組指向主數據庫的同義詞。將此新數據庫添加到全新的可用性組,並將讀取路由目標配置為您想要的任何副本。

現在,為那些對延遲更敏感的查詢更改您的讀取意圖連接字元串,以便使用新的 AG 偵聽器進行連接。這將命中數據庫,同義詞將命中正確的數據庫。

挑戰在於確保該 AG 在同一個位置,並且相關的同步節點用於讀取路由(這是您可以編寫腳本並經常檢查配置的內容)。此外,安全性可能會變得更難處理(但這完全取決於您的伺服器的配置方式)。

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