Sql-Server

SQL Server Always On AG – 自動故障轉移是否需要被動輔助節點?

  • March 29, 2021

據我了解,要在 Always On AG 環境中發生自動故障轉移,只需將副本配置為“自動故障轉移”、“同步送出”,並且環境必須具有適當的仲裁(即奇數個投票成員)。

但是,根據 Peter A. Carter 的“SQL Server 2019 Always On”教科書,要使自動故障轉移正常工作,輔助節點不能是主動的,而必須是被動的。被動意味著可讀輔助設置設置為“否”,因此無法直接連接或讀取訪問,顯然也無法對它們進行備份。

這是教科書中的確切陳述:

“雖然我們可以通過 GUI 更改 Readable Secondary 的值,同時配置副本以進行自動故障轉移而不會出錯,但這只是嚮導的一個怪癖。事實上,由於不支持活動的輔助節點,因此無法訪問副本當配置為自動故障轉移時。”

資料來源:Pro SQL Server 2019 管理:現代 DBA 指南

這是“怪癖”的截圖

在此處輸入圖像描述

注意:根據文本框,如果您希望自動故障轉移工作,Readonly Secondary 應設置為“No”。回想起來,我不記得在此設置中發生過成功的自動故障轉移,我相信當問題發生時,AG 處於 RESOLVING 狀態。請注意,我們有第三台伺服器用於適當的法定人數。

我已經搜尋了 Microsoft 的文件以確認作者的陳述是否屬實,但尚未找到任何明確說明輔助副本必須是被動的才能自動故障轉移工作的內容。這篇 Microsoft 文章(故障轉移和故障轉移模式(Always On Availability Groups))說明了自動故障轉移所需的條件,但沒有提到需要被動輔助副本。

那麼作者是否正確並且微軟未能宣傳這一點,或者作者是否不正確並且當輔助副本處於活動/可讀狀態時自動故障轉移是否有效?我的目標是擁有一個具有自動故障轉移功能的高可用性環境,但我們是否需要犧牲解除安裝讀取操作來實現這一目標?添加另一台伺服器不是一種選擇。

您可以故障轉移到可讀的輔助節點。作者要麼錯了,要麼只是使用了一些令人困惑的術語。閱讀您包含的確切報價,我傾向於前一種解釋。但我不知道該聲明的所有上下文。

這裡我有一個 AG - 所有副本都配置為在處於輔助角色時可讀,並且 NODE2 設置為自動故障轉移:

如上所述,SSMS 中 AG 配置的螢幕截圖

以下是 AG 儀表板上的目前狀態:

SSMS 中 AG 儀表板的螢幕截圖,顯示所有副本都健康

我將繼續直接連接到 NODE2(同步輔助)並開始執行一些查詢:

SELECT COUNT_BIG(*)
FROM dbo.A;

WAITFOR DELAY '00:00:01';

GO 100

然後做一些事情來導致自動故障轉移到 NODE2。在這種情況下,我將終止目前主節點 (NODE1) 上的 SQL Server 服務。

現在我將檢查 AG 儀表板,可以看到 NODE2 自動成為新的主節點。

顯示 NODE2 作為新主節點的 AG 儀表板螢幕截圖

請注意,在故障轉移期間,我在 NODE2 上執行查詢的 SSMS 視窗收到以下消息:

消息 596,級別 21,狀態 1,行 0

無法繼續執行,因為會話處於終止狀態。

Msg 0, Level 20, State 0, Line 0

目前命令發生嚴重錯誤。結果,如果有的話,應該丟棄。

這是正常的(當數據庫作為主數據庫進行恢復時客戶端斷開連接)。我重試了查詢,它繼續執行。如果我通過只讀意圖連接到偵聽器,我就不必這樣做。

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