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