亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Redis > 正文

redis主從復制原理的深入講解

2020-10-28 21:30:39
字體:
來源:轉載
供稿:網友

前言

Redis持久化保證了即使redis服務重啟也不會丟失數據,因為redis服務重啟后會將硬盤上持久化的數據恢復到內存中,但是當redis服務器的硬盤損壞了可能會導致數據丟失,如果通過redis的主從復制機制就可以避免這種單點故障。

本文主要針對redis主從復制的原理進行了講解,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧

1.復制過程

2.數據間的同步

3.全量復制

4.部分復制

5.心跳

6.異步復制

1.復制過程

  1. 從節點執行 slaveof 命令。
  2. 從節點只是保存了 slaveof 命令中主節點的信息,并沒有立即發起復制。
  3. 從節點內部的定時任務發現有主節點的信息,開始使用 socket 連接主節點。
  4. 連接建立成功后,發送 ping 命令,希望得到 pong 命令響應,否則會進行重連。
  5. 如果主節點設置了權限,那么就需要進行權限驗證,如果驗證失敗,復制終止。
  6. 權限驗證通過后,進行數據同步,這是耗時最長的操作,主節點將把所有的數據全部發送給從節點。
  7. 當主節點把當前的數據同步給從節點后,便完成了復制的建立流程。接下來,主節點就會持續的把寫命令發送給從節點,保證主從數據一致性。

2.數據間的同步

上面說的復制過程,其中有一個步驟是“同步數據集”,這個就是現在講的“數據間的同步”。

redis 同步有 2 個命令:sync 和 psync,前者是 redis 2.8 之前的同步命令,后者是 redis 2.8 為了優化 sync 新設計的命令。我們會重點關注 2.8 的 psync 命令。

psync 命令需要 3 個組件支持:

  1. 主從節點各自復制偏移量
  2. 主節點復制積壓緩沖區
  3. 主節點運行 ID

主從節點各自復制偏移量:

  1. 參與復制的主從節點都會維護自身的復制偏移量。
  2. 主節點在處理完寫入命令后,會把命令的字節長度做累加記錄,統計信息在 info replication 中的 masterreploffset 指標中。
  3. 從節點每秒鐘上報自身的的復制偏移量給主節點,因此主節點也會保存從節點的復制偏移量。
  4. 從節點在接收到主節點發送的命令后,也會累加自身的偏移量,統計信息在 info replication 中。
  5. 通過對比主從節點的復制偏移量,可以判斷主從節點數據是否一致。

主節點復制積壓緩沖區:

  1. 復制積壓緩沖區是一個保存在主節點的一個固定長度的先進先出的隊列,默認大小 1MB。
  2.  這個隊列在 slave 連接是創建。這時主節點響應寫命令時,不但會把命令發送給從節點,也會寫入復制緩沖區。
  3. 他的作用就是用于部分復制和復制命令丟失的數據補救。通過 info replication 可以看到相關信息。

主節點運行 ID:

  1. 每個 redis 啟動的時候,都會生成一個 40 位的運行 ID。
  2. 運行 ID 的主要作用是用來識別 Redis 節點。如果使用 ip+port 的方式,那么如果主節點重啟修改了 RDB/AOF 數據,從節點再基于偏移量進行復制將是不安全的。所以,當運行 id 變化后,從節點將進行全量復制。也就是說,redis 重啟后,默認從節點會進行全量復制。

如果在重啟時不改變運行 ID 呢?

  1. 可以通過 debug reload 命令重新加載 RDB 并保持運行 ID 不變,從而有效的避免不必要的全量復制。
  2. 缺點是:debug reload 命令會阻塞當前 Redis 節點主線程,因此對于大數據量的主節點或者無法容忍阻塞的節點,需要謹慎使用。一般通過故障轉移機制可以解決這個問題。

psync 命令的使用方式:

  命令格式為psync{runId}{offset}

  runId:從節點所復制主節點的運行 id

  offset:當前從節點已復制的數據偏移量

psync 執行流程:

流程說明:

從節點發送 psync 命令給主節點,runId 就是目標主節點的 ID,如果沒有默認為 -1,offset 是從節點保存的復制偏移量,如果是第一次復制則為 -1.

主節點會根據 runid 和 offset 決定返回結果:

  1. 如果回復 +FULLRESYNC {runId} {offset} ,那么從節點將觸發全量復制流程。
  2. 如果回復 +CONTINUE,從節點將觸發部分復制。
  3. 如果回復 +ERR,說明主節點不支持 2.8 的 psync 命令,將使用 sync 執行全量復制。

到這里,數據之間的同步就講的差不多了,篇幅還是比較長的。主要是針對 psync 命令相關之間的介紹。

3.全量復制

全量復制是 Redis 最早支持的復制方式,也是主從第一次建立復制時必須經歷的的階段。觸發全量復制的命令是 sync 和 psync。之前說過,這兩個命令的分水嶺版本是 2.8,redis 2.8 之前使用 sync 只能執行全量不同,2.8 之后同時支持全量同步和部分同步。

流程如下:

發送 psync 命令(spync ? -1)

主節點根據命令返回 FULLRESYNC

從節點記錄主節點 ID 和 offset

  1. 發送 psync 命令(spync ? -1)
  2. 主節點根據命令返回 FULLRESYNC
  3. 從節點記錄主節點 ID 和 offset
  4. 主節點 bgsave 并保存 RDB 到本地
  5. 主節點發送 RBD 文件到從節點
  6. 從節點收到 RDB 文件并加載到內存中
  7. 主節點在從節點接受數據的期間,將新數據保存到“復制客戶端緩沖區”,當從節點加載 RDB 完畢,再發送過去。(如果從節點花費時間過長,將導致緩沖區溢出,最后全量同步失?。?/li>
  8. 從節點清空數據后加載 RDB 文件,如果 RDB 文件很大,這一步操作仍然耗時,如果此時客戶端訪問,將導致數據不一致,可以使用配置slave-server-stale-data 關閉.
  9. 從節點成功加載完 RBD 后,如果開啟了 AOF,會立刻做 bgrewriteaof。

以上加粗的部分是整個全量同步耗時的地方。

注意:

如過 RDB 文件大于 6GB,并且是千兆網卡,Redis 的默認超時機制(60 秒),會導致全量復制失敗??梢酝ㄟ^調大 repl-timeout 參數來解決此問題。 Redis 雖然支持無盤復制,即直接通過網絡發送給從節點,但功能不是很完善,生產環境慎用。

4.部分復制

當從節點正在復制主節點時,如果出現網絡閃斷和其他異常,從節點會讓主節點補發丟失的命令數據,主節點只需要將復制緩沖區的數據發送到從節點就能夠保證數據的一致性,相比較全量復制,成本小很多。

  1. 當從節點出現網絡中斷,超過了 repl-timeout 時間,主節點就會中斷復制連接。
  2. 主節點會將請求的數據寫入到“復制積壓緩沖區”,默認 1MB。
  3. 當從節點恢復,重新連接上主節點,從節點會將 offset 和主節點 id 發送到主節點。
  4. 主節點校驗后,如果偏移量的數后的數據在緩沖區中,就發送 cuntinue 響應 ―― 表示可以進行部分復制。
  5. 主節點將緩沖區的數據發送到從節點,保證主從復制進行正常狀態。

5.心跳

主從節點在建立復制后,他們之間維護著長連接并彼此發送心跳命令。

心跳的關鍵機制如下:

  1. 中從都有心跳檢測機制,各自模擬成對方的客戶端進行通信,通過 client list 命令查看復制相關客戶端信息,主節點的連接狀態為 flags = M,從節點的連接狀態是 flags = S。
  2. 主節點默認每隔 10 秒對從節點發送 ping 命令,可修改配置 repl-ping-slave-period 控制發送頻率。
  3. 從節點在主線程每隔一秒發送 replconf ack{offset} 命令,給主節點上報自身當前的復制偏移量。
  4. 主節點收到 replconf 信息后,判斷從節點超時時間,如果超過 repl-timeout 60 秒,則判斷節點下線。

注意:

為了降低主從延遲,一般把 redis 主從節點部署在相同的機房/同城機房,避免網絡延遲帶來的網絡分區造成的心跳中斷等情況。

6.異步復制

主節點不但負責數據讀寫,還負責把寫命令同步給從節點,寫命令的發送過程是異步完成,也就是說主節點處理完寫命令后立即返回客戶度,并不等待從節點復制完成。

異步復制的步驟很簡單,如下:

  1. 主節點接受處理命令。
  2. 主節點處理完后返回響應結果 。
  3. 對于修改命令,異步發送給從節點,從節點在主線程中執行復制的命令。

總結

本文主要分析了 Redis 的復制原理,包括復制過程,數據之間的同步,全量復制的流程,部分復制的流程,心跳設計,異步復制流程。其中,可以看出,RDB 數據之間的同步非常耗時。所以,Redis 在 2.8 版本退出了類似增量復制的 psync 命令,當 Redis 主從直接發生了網絡中斷,不會進行全量復制,而是將數據放到緩沖區(默認 1MB)里,在通過主從之間各自維護復制 offset 來判斷緩存區的數據是否溢出,如果沒有溢出,只需要發送緩沖區數據即可,成本很小,反之,則要進行全量復制,因此,控制緩沖區大小非常的重要。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美精品在线播放| 日本不卡免费高清视频| 91免费看片网站| 国产精品高潮呻吟久久av野狼| 亚洲午夜未满十八勿入免费观看全集| 久久免费精品日本久久中文字幕| www.亚洲免费视频| 日韩av片免费在线观看| 久久久久久久一区二区三区| 亚洲午夜小视频| 久久久精品一区| 国产成人一区二区三区| 欧美野外猛男的大粗鳮| 亚洲成人在线网| 色综合导航网站| 国产欧美精品在线播放| 日韩av网站大全| 精品人伦一区二区三区蜜桃免费| 日本最新高清不卡中文字幕| 91av免费观看91av精品在线| 国产精欧美一区二区三区| 亚洲美女av电影| 国产精品久久久久久久久久99| 久久久久这里只有精品| 欧美成人中文字幕在线| 午夜精品福利视频| 日韩欧美高清在线视频| 91免费人成网站在线观看18| 97碰在线观看| 欧美中文在线观看| 久久99久久99精品中文字幕| 国产精品久久久久免费a∨大胸| 精品色蜜蜜精品视频在线观看| 欧美成人免费播放| 欧美黑人视频一区| 亚洲无限乱码一二三四麻| 日韩中文字幕视频在线| 国产福利精品视频| 综合网日日天干夜夜久久| 热久久免费视频精品| 97国产一区二区精品久久呦| 欧美性xxxxhd| 国产精品久久久一区| 亚洲精品日韩欧美| 91九色国产视频| 亚洲成人激情在线观看| 日韩激情在线视频| 亚洲最大的成人网| 久久躁日日躁aaaaxxxx| 中文字幕久久亚洲| 亚洲精品中文字| 久久久久久美女| 久久韩国免费视频| 国产视频精品在线| 最近中文字幕日韩精品| 国产精品大片wwwwww| 国产成人亚洲综合91| 亚洲区中文字幕| 亚洲欧美另类在线观看| 亚洲аv电影天堂网| 欧美大片免费看| 亚洲人成伊人成综合网久久久| 九九热这里只有精品6| 日本免费在线精品| 日韩中文字幕精品视频| 懂色av影视一区二区三区| 日韩精品视频免费专区在线播放| 欧美激情一区二区久久久| 亚洲在线视频福利| 日韩在线视频免费观看| 97国产精品视频人人做人人爱| 亚洲欧美激情另类校园| 欧美老女人性生活| 57pao精品| 日本视频久久久| 成人深夜直播免费观看| 精品国产一区二区三区久久狼黑人| 国产精品普通话| 国产一区二区三区毛片| 亚洲欧洲日韩国产| 日韩www在线| 国产欧美亚洲视频| 久久综合网hezyo| 亚洲天堂成人在线| 亚洲永久在线观看| 精品免费在线视频| 国产成人免费av电影| 91久久嫩草影院一区二区| 国产mv免费观看入口亚洲| 亚洲精品视频二区| 在线午夜精品自拍| 日本欧美黄网站| 九九热在线精品视频| 欧美性资源免费| 免费99精品国产自在在线| 久久久久久久国产精品| 国产99久久久欧美黑人| 一本一本久久a久久精品牛牛影视| 欧美激情在线观看视频| 91经典在线视频| 最近2019中文字幕在线高清| 国产成人鲁鲁免费视频a| 欧美午夜精品久久久久久浪潮| 成人xxxx视频| 国产精品视频播放| 国产在线精品一区免费香蕉| 亚洲国产精久久久久久| 国产亚洲一级高清| 中文字幕精品影院| 福利一区福利二区微拍刺激| 欧美视频在线观看 亚洲欧| 国产精品视频最多的网站| 亚洲精品一区中文| 国产精品视频大全| 亚洲国产精品免费| 欧美一区深夜视频| 在线色欧美三级视频| 91精品视频在线免费观看| 欧美黑人性生活视频| 日韩av电影免费观看高清| 亚洲奶大毛多的老太婆| 7777精品视频| 亚洲一级黄色av| 国产精品久久久久av| 另类少妇人与禽zozz0性伦| 欧美激情在线观看视频| 欧美激情亚洲视频| 久久久久久高潮国产精品视| 操人视频在线观看欧美| 国产亚洲精品久久久| 亚洲黄一区二区| 欧美成人自拍视频| 欧美另类极品videosbestfree| 国产精品久久久久久久久男| 日韩视频第一页| 日韩av电影国产| 岛国av午夜精品| 久久久久久噜噜噜久久久精品| 亚洲色图狂野欧美| 精品综合久久久久久97| 91精品国产高清久久久久久| 超碰91人人草人人干| 欧美在线影院在线视频| 亚洲欧美在线免费| 日韩欧美亚洲范冰冰与中字| 欧美激情精品久久久久久蜜臀| 国产一区二区色| 九九久久综合网站| 欧美二区乱c黑人| 亚洲午夜av电影| 人人澡人人澡人人看欧美| 一区二区三欧美| 亚洲人成啪啪网站| 中文字幕精品网| 国产精品v片在线观看不卡| 欧美视频第一页| 国产精品露脸av在线| 久久久久久国产| 久久影院资源站| 国产日产欧美精品| 亚洲欧美国产精品久久久久久久| 国产区精品在线观看| 亚洲欧美视频在线| 亚洲美女福利视频网站|