Sql-Server

故障轉移期間 Sql Server 可用性組偵聽器和 jdbc 客戶端的行為?

  • January 28, 2022

我對故障轉移期間 AG 偵聽器的行為有疑問……當故障轉移發生時,我意識到主節點和輔助節點上的所有連接都已關閉。

如果客戶端應用程序正在使用受祝福的客戶端庫之一(例如 microsoft jdbc > 6.0),它們將立即開始嘗試重新連接到與偵聽器關聯的 IP 地址。但是在故障轉移完成的 10 秒期間(或其他任何時間)會發生什麼?客戶端可能成功獲得連接,但在嘗試使用它時卻收到致命錯誤消息?或者是否採取措施確保在故障轉移期間沒有客戶端成功獲得連接,以便當客戶端成功獲得連接時,它實際上是可用的?

(僅供參考,關於 microsoft jdbc 驅動程序的行為,從以下原始碼判斷: https ://github.com/microsoft/mssql-jdbc/blob/dev/src/main/java/com/microsoft/sqlserver/jdbc/ SQLServerConnection.java 它將配置的 loginTimeout 除以 8,因此在超時之前進行 8 次嘗試。)

我的理解是,在故障轉移完成之前,沒有客戶端能夠連接到偵聽器並獲得數據庫連接。查看以下連結中的“自動故障轉移的工作原理”部分。看這裡

在故障轉移完成的 10 秒期間(或其他任何時間)會發生什麼?

這就是“loginTimeout”的用途:

在超時連接失敗之前驅動程序應等待的秒數。零值表示超時時間是預設的系統超時時間,預設指定為 15 秒。非零值是驅動程序在超時連接失敗之前應等待的秒數。

https://docs.microsoft.com/en-us/sql/connect/jdbc/setting-the-connection-properties?view=sql-server-ver15

客戶端可能成功獲得連接,但在嘗試使用它時卻收到致命錯誤消息

這是可能的,因為網路連接在 AG 上線之前可用,這發生在數據庫恢復之前,如果兩者之間存在異常延遲,您可以在數據庫恢復之前連接。

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