redis——新版復制

      網(wǎng)友投稿 715 2025-04-01

      sync雖然解決了數(shù)據(jù)同步問題,但是在數(shù)據(jù)量比較大情況下,從庫斷線從來依然采用全量復制機制,無論是從數(shù)據(jù)恢復、寬帶占用來說,sync所帶來的問題還是很多的。于是Redis從2.8開始,引入新的命令psync。


      psync有兩種模式:完整重同步和部分重同步。

      部分重同步主要依賴三個方面來實現(xiàn),依次介紹。

      offset(復制偏移量):

      主庫和從庫分別各自維護一個復制偏移量(可以使用info replication查看),用于標識自己復制的情況:

      在主庫中代表主節(jié)點向從節(jié)點傳遞的字節(jié)數(shù),在從庫中代表從庫同步的字節(jié)數(shù)。

      每當主庫向從節(jié)點發(fā)送N個字節(jié)數(shù)據(jù)時,主節(jié)點的offset增加N

      從庫每收到主節(jié)點傳來的N個字節(jié)數(shù)據(jù)時,從庫的offset增加N。

      因此offset總是不斷增大,這也是判斷主從數(shù)據(jù)是否同步的標志,若主從的offset相同則表示數(shù)據(jù)同步量,不通則表示數(shù)據(jù)不同步。

      replication backlog buffer(復制積壓緩沖區(qū)):

      復制積壓緩沖區(qū)是一個固定長度的FIFO隊列,大小由配置參數(shù)repl-backlog-size指定,默認大小1MB。

      需要注意的是該緩沖區(qū)由master維護并且有且只有一個,所有slave共享此緩沖區(qū),其作用在于備份最近主庫發(fā)送給從庫的數(shù)據(jù)。

      在主從命令傳播階段,主節(jié)點除了將寫命令發(fā)送給從節(jié)點外,還會發(fā)送一份到復制積壓緩沖區(qū),作為寫命令的備份。

      除了存儲最近的寫命令,復制積壓緩沖區(qū)中還存儲了每個字節(jié)相應的復制偏移量,由于復制積壓緩沖區(qū)固定大小先進先出的隊列,所以它總是保存的是最近Redis執(zhí)行的命令。

      所以,重連服務器后,從服務器會發(fā)送自己的復制偏移量offset給主服務器,

      如果offset偏移量之后的數(shù)據(jù)仍然存在于復制擠壓緩沖區(qū),就執(zhí)行部分重同步操作。

      相反,執(zhí)行完整重同步操作。

      run_id(服務器運行的唯一ID)

      每個redis實例在啟動時候,都會隨機生成一個長度為40的唯一字符串來標識當前運行的redis節(jié)點,查看此id可通過命令info server查看。

      當主從復制在初次復制時,主節(jié)點將自己的runid發(fā)送給從節(jié)點,從節(jié)點將這個runid保存起來,當斷線重連時,從節(jié)點會將這個runid發(fā)送給主節(jié)點。主節(jié)點根據(jù)runid判斷能否進行部分復制:

      如果從節(jié)點保存的runid與主節(jié)點現(xiàn)在的runid相同,說明主從節(jié)點之前同步過,主節(jié)點會更具offset偏移量之后的數(shù)據(jù)判斷是否執(zhí)行部分復制,如果offset偏移量之后的數(shù)據(jù)仍然都在復制積壓緩沖區(qū)里,則執(zhí)行部分復制,否則執(zhí)行全量復制;

      如果從節(jié)點保存的runid與主節(jié)點現(xiàn)在的runid不同,說明從節(jié)點在斷線前同步的redis節(jié)點并不是當前的主節(jié)點,只能進行全量復制;

      psync流程:

      復制

      客戶端向服務器端發(fā)送:SLAVEOF

      1、設置主服務器的地址和端口

      存到masterhost和mastterport兩個屬性里之后,向客戶端發(fā)送ok,然后開始復制工作。

      2、建立套接字鏈接

      從服務器根據(jù)命令設置的地址和端口,創(chuàng)建鏈接,并且為這個套接字創(chuàng)建一個專門處理復制工作的文件事件處理器。

      主服務器也會為套接字創(chuàng)建相應的客戶端狀態(tài),并且把從服務器當作一個客戶端來對待。

      3、發(fā)送ping命令(檢查)

      檢查套接字狀態(tài)是否正常

      檢查主服務器是否能正確處理請求。(如果不能,就重連)

      4、身份認證

      5、發(fā)送端口信息

      從服務器向主服務器發(fā)送信息,主服務器記錄。

      6、同步

      從服務器向主服務器發(fā)送psync命令。(主服務器也成為從服務器的客戶端,因為主服務器會發(fā)送寫命令給從服務器)

      7、命令傳播

      完成同步后,進入傳播階段,主服務器一直發(fā)送寫命令,從服務器一直接受,保證和主服務器一致。

      心跳檢測

      默認一秒一次,從服務器向主服務器發(fā)送命令:REPLCONF ACK

      三個作用:

      檢測網(wǎng)絡連接狀態(tài):如果主服務器一秒沒收到命令,就說明出問題了

      輔助實現(xiàn)min-slaves配置:min-slaves-to-write 3? ?min-slaves-max-log 10:當從服務器小于3個或延遲都大于10,主服務器拒絕寫命令。

      redis——新版復制

      檢測命令丟失:如果命令丟失,主服務器會發(fā)現(xiàn)偏移量不一樣,然后它就會根據(jù)偏移量,去積壓緩沖區(qū)找到缺少的數(shù)據(jù)并發(fā)給從服務器。

      Redis

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      上一篇:項目管理作用,提高效率與成功的關鍵
      下一篇:excel中分類匯總是灰色的怎么辦(excel中分類匯總為什么是灰色的)
      相關文章
      亚洲精品国产高清嫩草影院| 亚洲AV无码一区二区三区电影| 亚洲国产精品一区二区第一页免 | 在线亚洲精品福利网址导航| 久久久亚洲精华液精华液精华液 | 亚洲欧洲专线一区| 亚洲人成影院77777| 亚洲国产综合在线| 亚洲老熟女@TubeumTV| 久久久久亚洲AV无码观看| 91大神亚洲影视在线| 亚洲美免无码中文字幕在线| 亚洲视频一区二区在线观看| 在线免费观看亚洲| 亚洲国产精品综合久久网各| 亚洲啪啪免费视频| 亚洲卡一卡二卡乱码新区| 中文字幕精品三区无码亚洲| 亚洲熟妇成人精品一区| 亚洲日本va一区二区三区| 亚洲乱码无人区卡1卡2卡3| 亚洲AV性色在线观看| 国产亚洲精品免费| 在线亚洲v日韩v| 亚洲日韩人妻第一页| 国产亚洲精品福利在线无卡一| 亚洲色中文字幕无码AV| 亚洲国产精品无码一线岛国| 亚洲国产精品国自产电影| 亚洲美女人黄网成人女| 亚洲首页国产精品丝袜| 亚洲精品成a人在线观看夫| 精品韩国亚洲av无码不卡区| 亚洲乱码中文字幕综合234| 亚洲中文字幕无码不卡电影| 亚洲精品视频在线| 亚洲二区在线视频| 亚洲成AV人影片在线观看| 亚洲高清无码在线观看| 亚洲女同成av人片在线观看| 亚洲av日韩综合一区在线观看|