○ 高性能模式:principal 與 mirror 之間數(shù)據(jù)異步傳輸,principal 上的事務(wù)提交無(wú)需等待 mirror 的響應(yīng),principal 宕機(jī)后,存在數(shù)據(jù)更新丟失的可能,不支持自動(dòng)故障轉(zhuǎn)移,可以通過(guò)強(qiáng)制服務(wù)的方式使得 mirror 提供服務(wù)。適合對(duì)數(shù)據(jù)可靠性要求不高,性能要求較高的業(yè)務(wù)場(chǎng)景,與 MySQL 的異步復(fù)制模式,Oracle DataGuard 最大性能模式相近;
○ 不帶故障轉(zhuǎn)移的高安全模式:principal 上所有的事務(wù)提交,都必須要確認(rèn)該事務(wù)涉及的事務(wù)日志均已經(jīng)傳送到的 mirror 上,并寫(xiě)入 mirror 的重做隊(duì)列中,持久化(是否持久化到外存設(shè)備還與 windows 操作系統(tǒng)寫(xiě)入緩存策略相關(guān)),mirror 返回確認(rèn)后,才可提交,可以實(shí)現(xiàn) principal 宕機(jī)下數(shù)據(jù)“零”丟失,不支持自動(dòng)故障轉(zhuǎn)移,可以通過(guò)手動(dòng)轉(zhuǎn)移或者強(qiáng)制服務(wù)方式使得 mirror 提供服務(wù)。與 MySQL 5.7 Loss-less replication、Oracle DataGuard 最大可用模式相近;
○ 帶故障轉(zhuǎn)移的高安全模式:與不帶故障轉(zhuǎn)移的高安全模式相比,增加了 witness (見(jiàn)證服務(wù)器),可以實(shí)現(xiàn)自動(dòng)的故障轉(zhuǎn)移,通過(guò) witness,可以確保只有一個(gè)節(jié)點(diǎn)成為 principal,對(duì)外提供服務(wù),實(shí)際上 witness 最重要的一個(gè)作用就是選主;
故障轉(zhuǎn)移
鏡像集群故障轉(zhuǎn)移最復(fù)雜場(chǎng)景就是帶見(jiàn)證服務(wù)器的支持自動(dòng)故障轉(zhuǎn)移的高安全模式,所以我們重點(diǎn)討論該模式下的故障處理流程。
初始狀態(tài)下,witness、principal 和 mirror 三個(gè)節(jié)點(diǎn)兩兩之間均保持長(zhǎng)連接會(huì)話,現(xiàn)在討論其中一方連接中斷的情況:
Principal 與 witness 連接中斷:
此時(shí) witness 與 mirror 連接正常,觸發(fā)自動(dòng)故障恢復(fù)流程,principal 丟失 witness 連接會(huì)話,如果 principal 仍在運(yùn)行狀態(tài),則將狀態(tài)標(biāo)記為 disconnected,表示失去與 mirror 連接,切斷所有客戶端連接,停止讀寫(xiě)服務(wù),等待故障切換。為了防止網(wǎng)絡(luò)抖動(dòng)引起不必要的切換,會(huì)話超時(shí)默認(rèn)時(shí)間為 10秒;witness 和 mirror 將 principal 標(biāo)記為不可用,等待 mirror 上的重做隊(duì)列中的事務(wù)日志回放(roll forward)完成后,mirror 成為新的 principal,開(kāi)始對(duì)外提供讀寫(xiě)服務(wù)。