小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

redis系列之------主從復(fù)制

 Coder編程 2022-05-01 發(fā)布于北京

什么是主從復(fù)制

Redis的主從復(fù)制機(jī)制是指可以讓從服務(wù)器(slave)能精確復(fù)制主服務(wù)器(master)的數(shù)據(jù),如下圖所示:

 

         

或者   

       

 

主從復(fù)制的方式和工作原理

工作方式:

Redis主從復(fù)制主要有兩種模式:完整重同步(full resynchronization)和部分重同步(partial resynchronization)

  • 其中完整重同步用于處理初次復(fù)制情況:完整重同步的執(zhí)行步驟和SYNC命令的執(zhí)行步驟基本一樣,它們都是通過讓主服務(wù)器創(chuàng)建并發(fā)送RDB文件,以及向從服務(wù)器發(fā)送保存在緩沖區(qū)里面的寫命令來進(jìn)行同步;
  • 而部分重同步則用于處理斷線后重復(fù)制情況:當(dāng)從服務(wù)器在斷線后重新連接主服務(wù)器時(shí),如果條件允許,主服務(wù)器可以將主從服務(wù)器連接斷開期間執(zhí)行的寫命令發(fā)送給從服務(wù)器,從服務(wù)器只要接收并執(zhí)行這些寫命令,就可以將數(shù)據(jù)庫更新至主服務(wù)器當(dāng)前所處的狀態(tài)。

完整同步機(jī)制,我們非常好理解。比如從機(jī)首次連接到主機(jī)后,那么就是完整同步了。此時(shí)主機(jī)把RDB文件打包發(fā)送給從機(jī),從機(jī)同步即可。

如果在此期間,主機(jī)源源不斷的有新的命令,那么全部放入到緩沖區(qū)中,然后進(jìn)行部分同步,將緩沖區(qū)里面的數(shù)據(jù)發(fā)送給從機(jī)即可。

部分同步還有一種使用情況就是,網(wǎng)絡(luò)不穩(wěn)定,斷了之后,從機(jī)和主機(jī)的同步。也是用到了部分同步機(jī)制。

 

原理:

部分重同步功能由以下三個(gè)部分構(gòu)成:

  • 主服務(wù)器的復(fù)制偏移量(replication offset)和從服務(wù)器的復(fù)制偏移量;
  • 主服務(wù)器的復(fù)制積壓緩沖區(qū)(replication backlog);
  • 服務(wù)器的運(yùn)行ID(run ID)。

 

復(fù)制偏移量

執(zhí)行復(fù)制的雙方——主服務(wù)器和從服務(wù)器會分別維護(hù)一個(gè)復(fù)制偏移量:

  • 主服務(wù)器每次向從服務(wù)器傳播N個(gè)字節(jié)的數(shù)據(jù)時(shí),就將自己的復(fù)制偏移量的值加上N;
  • 從服務(wù)器每次收到主服務(wù)器傳播來的N個(gè)字節(jié)的數(shù)據(jù)時(shí),就將自己的復(fù)制偏移量的值加上N;

通過對比主從服務(wù)器的復(fù)制偏移量,程序可以很容易地知道主從服務(wù)器是否處于一致狀態(tài):

  • 如果主從服務(wù)器處于一致狀態(tài),那么主從服務(wù)器兩者的偏移量總是相同的;
  • 相反,如果主從服務(wù)器兩者的偏移量并不相同,那么說明主從服務(wù)器并未處于一致狀態(tài)。

如下面的情況:

 

復(fù)制積壓緩沖區(qū)

如果發(fā)現(xiàn)偏移量不一樣,那么就會需要用到緩沖區(qū)了。

復(fù)制積壓緩沖區(qū)是由主服務(wù)器維護(hù)的一個(gè)固定長度(fixed-size)先進(jìn)先出(FIFO)隊(duì)列,默認(rèn)大小為1MB。

當(dāng)主服務(wù)器進(jìn)行命令傳播時(shí),它不僅會將寫命令發(fā)送給所有從服務(wù)器,還會將寫命令入隊(duì)到復(fù)制積壓緩沖區(qū)里面,如圖所示。

 

當(dāng)從服務(wù)器重新連上主服務(wù)器時(shí),從服務(wù)器會通過PSYNC命令將自己的復(fù)制偏移量offset發(fā)送給主服務(wù)器,主服務(wù)器會根據(jù)這個(gè)復(fù)制偏移量來決定對從服務(wù)器執(zhí)行何種同步操作:

  • 如果offset偏移量之后的數(shù)據(jù)(也即是偏移量offset+1開始的數(shù)據(jù))仍然存在于復(fù)制積壓緩沖區(qū)里面,那么主服務(wù)器將對從服務(wù)器執(zhí)行部分重同步操作;
  • 相反,如果offset偏移量之后的數(shù)據(jù)已經(jīng)不存在于復(fù)制積壓緩沖區(qū),那么主服務(wù)器將對從服務(wù)器執(zhí)行完整重同步操作。

 

服務(wù)器運(yùn)行ID

除了復(fù)制偏移量和復(fù)制積壓緩沖區(qū)之外,實(shí)現(xiàn)部分重同步還需要用到服務(wù)器運(yùn)行ID(run ID):

  • 每個(gè)Redis服務(wù)器,不論主服務(wù)器還是從服務(wù),都會有自己的運(yùn)行ID;
  • 運(yùn)行ID在服務(wù)器啟動時(shí)自動生成,由40個(gè)隨機(jī)的十六進(jìn)制字符組成,例如53b9b28df8042fdc9ab5e3fcbbbabff1d5dce2b3;

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多