關(guān)于數(shù)據(jù)庫(kù)系統(tǒng)的 Republication Lags
Republication Lags ( 復(fù)制延遲)是指在主從數(shù)據(jù)庫(kù)復(fù)制環(huán)境中,從庫(kù)數(shù)據(jù)同步落后于主庫(kù)的時(shí)間間隔。
如果復(fù)制延遲比較嚴(yán)重,會(huì)對(duì)系統(tǒng)有不好的影響,如:
1. 數(shù)據(jù)不一致
從庫(kù)的數(shù)據(jù)狀態(tài)會(huì)落后主庫(kù),查詢從庫(kù)如果讀取到過(guò)期數(shù)據(jù),會(huì)造成數(shù)據(jù)不一致的情況。
2. 高可用性降低
如果主庫(kù)宕機(jī),需要故障轉(zhuǎn)移到從庫(kù)提供服務(wù),但此時(shí)從庫(kù)的數(shù)據(jù)狀態(tài)不是最新的,可能會(huì)有比較長(zhǎng)的服務(wù)中斷時(shí)間。
3. 主從切換困難
主從之間數(shù)據(jù)差距大,進(jìn)行切換需要的時(shí)間更長(zhǎng),可能需要重新建立復(fù)制,同步期間整個(gè)系統(tǒng)無(wú)法對(duì)外服務(wù)。
4. 增加主庫(kù)壓力
主庫(kù)需要保持較長(zhǎng)時(shí)間的binary log以供從庫(kù)追趕及重建復(fù)制關(guān)系,增加了存儲(chǔ)以及備份的負(fù)載。
5. 影響其他服務(wù)
其他依賴于從庫(kù)提供實(shí)時(shí)數(shù)據(jù)的服務(wù)會(huì)受到影響,例如報(bào)表、數(shù)據(jù)分析等會(huì)基于過(guò)期的數(shù)據(jù)展現(xiàn),減少準(zhǔn)確性。
所以,嚴(yán)重的復(fù)制延遲最終會(huì)降低系統(tǒng)的高可用性,增加故障轉(zhuǎn)移復(fù)雜度,也會(huì)對(duì)主庫(kù)及其他相關(guān)服務(wù)造成額外的負(fù)面影響。因此,要把復(fù)制延遲控制在較小的范圍。
主要成因:
1、網(wǎng)絡(luò)延遲:
主庫(kù)與從庫(kù)之間的網(wǎng)絡(luò)如果存在延遲或中斷,會(huì)直接導(dǎo)致復(fù)制數(shù)據(jù)的傳輸速度下降,從而加大復(fù)制延遲。
2、服務(wù)器性能:
如果從庫(kù)的服務(wù)器性能比主庫(kù)差很多,那么處理并應(yīng)用主庫(kù)傳來(lái)的binary log的速度會(huì)很慢,也會(huì)延長(zhǎng)復(fù)制時(shí)間。
3、事務(wù)過(guò)大:
主庫(kù)上如果有大量的大事務(wù)執(zhí)行,會(huì)占用大量IO并加重從庫(kù)的負(fù)載,從而造成從庫(kù)遲遲不能追上主庫(kù)。
4、批量操作:
如批量insert或load data這類批量操作也會(huì)增加復(fù)制延遲。
應(yīng)對(duì)方法包括:
- 升級(jí)網(wǎng)絡(luò)鏈路,減少網(wǎng)絡(luò)延遲。
- 使用性能較好的服務(wù)器作為從庫(kù),并適當(dāng)增加從庫(kù)數(shù)量分?jǐn)傌?fù)載。
- 控制大事務(wù)的執(zhí)行頻率和次數(shù),拆分大事務(wù)為小事務(wù)執(zhí)行。
- 減少批量操作,不要一次性執(zhí)行過(guò)多的批量操作語(yǔ)句。
- 適當(dāng)緩存策略,一部分?jǐn)?shù)據(jù)更新而不立即復(fù)制。
- 輔助使用中間層緩存系統(tǒng),減輕主從復(fù)制的壓力。
通過(guò)上述策略,可以有效地控制和減小主從復(fù)制的延遲。