Sql-Server
故障轉移期間 Sql Server 可用性組偵聽器和 jdbc 客戶端的行為?
我對故障轉移期間 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 秒。非零值是驅動程序在超時連接失敗之前應等待的秒數。
客戶端可能成功獲得連接,但在嘗試使用它時卻收到致命錯誤消息
這是可能的,因為網路連接在 AG 上線之前可用,這發生在數據庫恢復之前,如果兩者之間存在異常延遲,您可以在數據庫恢復之前連接。