主從復(fù)制 :

主從復(fù)制示意圖

主從復(fù)制總結(jié)
- 主從復(fù)制實現(xiàn):
- slaveof
- 配置文件:
slave ip port
- 復(fù)制方式
-
全量復(fù)制
全量復(fù)制- 全量復(fù)制開銷:
bgsave時間
RDB文件網(wǎng)絡(luò)傳輸時間
從節(jié)點清空數(shù)據(jù)時間
從節(jié)點加載RDB的時間
可能的AOF重寫時間
- 全量復(fù)制開銷:
-
部分復(fù)制
部分復(fù)制
部分復(fù)制的核心有三點:
master的復(fù)制偏移量(offset)
master的復(fù)制積壓緩沖區(qū) (固定長度FIFO隊列,圖中綠色)
服務(wù)器的runID
當(dāng)過程4中偏移量之后的數(shù)據(jù)在緩沖區(qū)范圍之內(nèi),會開始部分復(fù)制,若偏移量之后的數(shù)據(jù)已經(jīng)不在緩沖區(qū)之內(nèi),將進行全量復(fù)制。
最后我們總結(jié)一下部分復(fù)制與全量復(fù)制:
如果服務(wù)器從沒有復(fù)制過任何主服務(wù)器,或者執(zhí)行過slaveof no one,name服務(wù)器將向主服務(wù)器發(fā)送psync?-1,主動請求全量復(fù)制;
如果服務(wù)器已經(jīng)復(fù)制過主服務(wù)器,那么將發(fā)送psync runid offset 到主服務(wù)器(runid是上次復(fù)制時master的id,offset是當(dāng)前節(jié)點的偏移量),主服務(wù)器將根據(jù)runid是否一致以及偏移量之后的數(shù)據(jù)是否在復(fù)制積壓緩沖區(qū)內(nèi)決定哪種行為,最后需要注意的是,在全量復(fù)制的過程6以及部分復(fù)制的過程6中,從服務(wù)器會以每秒一次的頻率,與主服務(wù)器之間進行心跳檢測
-
- 主從復(fù)制問題 :
- 讀寫分離(擴展讀性能)
復(fù)制數(shù)據(jù)延遲;
臟讀(slave節(jié)點無法刪除過期數(shù)據(jù));
從節(jié)點故障; - 主從配置不一致
maxmemory不一致:丟失數(shù)據(jù) - 規(guī)避全量復(fù)制
第一次全量復(fù)制不可避免;
小主節(jié)點(maxmemory不要過大),低峰處理復(fù)制;
節(jié)點runID不匹配(主節(jié)點重啟、故障轉(zhuǎn)移哨兵或者集群)
復(fù)制積壓緩沖區(qū)不足(網(wǎng)絡(luò)中斷,部分復(fù)制不可滿足;增大復(fù)制緩沖區(qū)rel_backlog_size) - 規(guī)避復(fù)制風(fēng)暴
-
單主節(jié)點復(fù)制風(fēng)暴
主節(jié)點重啟,多從節(jié)點復(fù)制(解決方法:更換復(fù)制拓撲)
圖片.png -
單機器復(fù)制風(fēng)暴
機器宕機后,大量全量復(fù)制
圖片.png
-



