一個完整的高可用機制除了后端節點的切換,還包括發生故障轉移后,客戶端如何能夠快速地連接到冗余節點,繼續業務讀寫。常用的實現,包括 Driver 層解決方案,例如 mongoDB replication set,也有通過二層內的廣播方式實現 vip,例如 keepalived,當然還包括 proxy,以及三層 DNS 的實現。
SQL Server 的實現采用了 Driver 層處理的方式,開發者要實現自動的故障轉移,在連接數據庫時,除了必須要指定初始節點的 IP 和端口,還要指定故障轉移的節點的 IP 和端口。客戶端首先嘗試使用初始節點創建連接,如果初始節點指向的實例當前為 principal,則連接會建立成功,可以正常的讀寫。當發生故障切換時,principal 會切斷所有已有客戶端連接,然后客戶端建立到初始節點連接也會失敗,通過一定的重試策略失敗后,會嘗試連接之前指定的故障轉移節點,從而實現服務入口的切換。
SQL Server 常用的訪問接口:OLE DB、ODBC、ADO 均支持指定故障轉移節點,格式如下:
Server=250.65.43.21,4734; Failover_Partner=250.65.43.22,4734;
集群監控
鏡像集群的監控可以通過 SQL Server Management stdio 啟動鏡像監視器,或者系統內置的存儲過程來實現,監控的主要指標包括:
○ 未發送日志:principal 上未發送的日志超過指定的閾值,會在 principal 上生成一個警告,在高性能模式下,強制服務時可以作為評估 principal 上事務丟失數量的依據,同樣也適用于在高安全模式切換成異步模式狀態下(mirror 失去連接)。
○ 未還原日志:重做隊列中的未被應用的事務日志數量(KB),超過閾值,會在 mirror 上生成一個警告,該值可以作為評估故障轉移時間的主要因素。
○ 最早未被發送的事務:principal 發送隊列中,最早未被發送的事務距離現在的時間,單位時分鐘,超過閾值,會在 principal 上生成警告,與未發送日志量一起,從時間維度,衡量高性能模式下和高安全異步模式下,數據丟失數量。
○ 鏡像提交開銷:高安全模式下,principal 上事務從提交到等到 mirror 響應的時間開銷的平均值,如果超過閾值,則在 principal 上生成一個警告,在同步模式下,該值可以衡量同步開銷。