婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > redis主從復(fù)制原理的深入講解

redis主從復(fù)制原理的深入講解

熱門標(biāo)簽:臺灣電銷 四川穩(wěn)定外呼系統(tǒng)軟件 南京手機外呼系統(tǒng)廠家 400電話辦理的口碑 一個地圖標(biāo)注多少錢 高碑店市地圖標(biāo)注app 廊坊外呼系統(tǒng)在哪買 地圖標(biāo)注工廠入駐 b2b外呼系統(tǒng)

前言

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

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

1.復(fù)制過程

2.數(shù)據(jù)間的同步

3.全量復(fù)制

4.部分復(fù)制

5.心跳

6.異步復(fù)制

1.復(fù)制過程

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

2.數(shù)據(jù)間的同步

上面說的復(fù)制過程,其中有一個步驟是“同步數(shù)據(jù)集”,這個就是現(xiàn)在講的“數(shù)據(jù)間的同步”。

redis 同步有 2 個命令:sync 和 psync,前者是 redis 2.8 之前的同步命令,后者是 redis 2.8 為了優(yōu)化 sync 新設(shè)計的命令。我們會重點關(guān)注 2.8 的 psync 命令。

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

  1. 主從節(jié)點各自復(fù)制偏移量
  2. 主節(jié)點復(fù)制積壓緩沖區(qū)
  3. 主節(jié)點運行 ID

主從節(jié)點各自復(fù)制偏移量:

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

主節(jié)點復(fù)制積壓緩沖區(qū):

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

主節(jié)點運行 ID:

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

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

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

psync 命令的使用方式:

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

  runId:從節(jié)點所復(fù)制主節(jié)點的運行 id

  offset:當(dāng)前從節(jié)點已復(fù)制的數(shù)據(jù)偏移量

psync 執(zhí)行流程:

流程說明:

從節(jié)點發(fā)送 psync 命令給主節(jié)點,runId 就是目標(biāo)主節(jié)點的 ID,如果沒有默認(rèn)為 -1,offset 是從節(jié)點保存的復(fù)制偏移量,如果是第一次復(fù)制則為 -1.

主節(jié)點會根據(jù) runid 和 offset 決定返回結(jié)果:

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

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

3.全量復(fù)制

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

流程如下:

發(fā)送 psync 命令(spync ? -1)

主節(jié)點根據(jù)命令返回 FULLRESYNC

從節(jié)點記錄主節(jié)點 ID 和 offset

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

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

注意:

如過 RDB 文件大于 6GB,并且是千兆網(wǎng)卡,Redis 的默認(rèn)超時機制(60 秒),會導(dǎo)致全量復(fù)制失敗。可以通過調(diào)大 repl-timeout 參數(shù)來解決此問題。 Redis 雖然支持無盤復(fù)制,即直接通過網(wǎng)絡(luò)發(fā)送給從節(jié)點,但功能不是很完善,生產(chǎn)環(huán)境慎用。

4.部分復(fù)制

當(dāng)從節(jié)點正在復(fù)制主節(jié)點時,如果出現(xiàn)網(wǎng)絡(luò)閃斷和其他異常,從節(jié)點會讓主節(jié)點補發(fā)丟失的命令數(shù)據(jù),主節(jié)點只需要將復(fù)制緩沖區(qū)的數(shù)據(jù)發(fā)送到從節(jié)點就能夠保證數(shù)據(jù)的一致性,相比較全量復(fù)制,成本小很多。

  1. 當(dāng)從節(jié)點出現(xiàn)網(wǎng)絡(luò)中斷,超過了 repl-timeout 時間,主節(jié)點就會中斷復(fù)制連接。
  2. 主節(jié)點會將請求的數(shù)據(jù)寫入到“復(fù)制積壓緩沖區(qū)”,默認(rèn) 1MB。
  3. 當(dāng)從節(jié)點恢復(fù),重新連接上主節(jié)點,從節(jié)點會將 offset 和主節(jié)點 id 發(fā)送到主節(jié)點。
  4. 主節(jié)點校驗后,如果偏移量的數(shù)后的數(shù)據(jù)在緩沖區(qū)中,就發(fā)送 cuntinue 響應(yīng) —— 表示可以進行部分復(fù)制。
  5. 主節(jié)點將緩沖區(qū)的數(shù)據(jù)發(fā)送到從節(jié)點,保證主從復(fù)制進行正常狀態(tài)。

5.心跳

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

心跳的關(guān)鍵機制如下:

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

注意:

為了降低主從延遲,一般把 redis 主從節(jié)點部署在相同的機房/同城機房,避免網(wǎng)絡(luò)延遲帶來的網(wǎng)絡(luò)分區(qū)造成的心跳中斷等情況。

6.異步復(fù)制

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

異步復(fù)制的步驟很簡單,如下:

  1. 主節(jié)點接受處理命令。
  2. 主節(jié)點處理完后返回響應(yīng)結(jié)果 。
  3. 對于修改命令,異步發(fā)送給從節(jié)點,從節(jié)點在主線程中執(zhí)行復(fù)制的命令。

總結(jié)

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

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • 淺談Redis主從復(fù)制以及主從復(fù)制原理
  • 詳解Redis主從復(fù)制實踐
  • Redis持久化與主從復(fù)制的實踐
  • 使用Docker搭建Redis主從復(fù)制的集群
  • Redis全量復(fù)制與部分復(fù)制示例詳解
  • Redis主從復(fù)制詳解
  • CentoS6.5環(huán)境下redis4.0.1(stable)安裝和主從復(fù)制配置方法
  • Redis教程(九):主從復(fù)制配置實例
  • 詳解Redis復(fù)制原理

標(biāo)簽:伊春 南寧 拉薩 甘南 畢節(jié) 河源 泰州 定州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis主從復(fù)制原理的深入講解》,本文關(guān)鍵詞  redis,主從,復(fù)制,原理,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《redis主從復(fù)制原理的深入講解》相關(guān)的同類信息!
  • 本頁收集關(guān)于redis主從復(fù)制原理的深入講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲欧洲国产专区| 日本成人在线不卡视频| 日本高清成人免费播放| 国产情人综合久久777777| 在线一区二区视频| 懂色av噜噜一区二区三区av | 这里只有精品99re| 一本大道综合伊人精品热热| 99精品视频一区二区三区| 粉嫩一区二区三区性色av| 国产呦精品一区二区三区网站| 人人超碰91尤物精品国产| 精品无人码麻豆乱码1区2区| 日本免费新一区视频| 国产九色精品成人porny| 美女高潮久久久| 成人手机电影网| 欧美视频三区在线播放| 91精品国产综合久久精品| 欧美r级在线观看| 成人欧美一区二区三区视频网页| 亚洲欧洲日韩一区二区三区| 亚洲免费观看高清完整版在线观看熊| 一区二区三区精品视频| 韩日精品视频一区| 色婷婷av一区二区三区大白胸| 一本大道久久精品懂色aⅴ| 欧美日韩国产成人在线免费| 久久精品亚洲精品国产欧美kt∨| 国产欧美一区二区精品仙草咪| 亚洲欧美日韩国产一区二区三区 | 91小宝寻花一区二区三区| 成人av午夜影院| 欧美片网站yy| 国产农村妇女精品| 国产欧美视频在线观看| 亚洲福利视频一区| 一道本成人在线| 欧美激情中文字幕一区二区| 全部av―极品视觉盛宴亚洲| 欧美日韩中文国产| 亚洲天堂成人在线观看| 成人av在线网站| 精品少妇一区二区三区在线播放| 亚洲欧洲无码一区二区三区| 麻豆成人免费电影| 日韩欧美亚洲另类制服综合在线| 亚洲最大成人综合| 99久久精品国产毛片| 最近中文字幕一区二区三区| 99久久精品99国产精品| 欧美激情综合在线| 国产在线精品一区二区夜色 | 麻豆精品一二三| 欧美猛男gaygay网站| 亚洲午夜电影网| 日韩一级在线观看| 国产a精品视频| 亚洲乱码中文字幕| 久久综合99re88久久爱| 日韩中文字幕一区二区三区| 欧美日韩在线精品一区二区三区激情 | 5858s免费视频成人| 亚洲一区在线看| 在线91免费看| 捆绑紧缚一区二区三区视频 | 国产.精品.日韩.另类.中文.在线.播放| 91官网在线观看| 偷窥少妇高潮呻吟av久久免费| 成人深夜视频在线观看| 亚洲免费资源在线播放| 色综合色狠狠天天综合色| 成人免费在线视频| 欧美日本国产一区| 久久精品国产亚洲高清剧情介绍 | 亚洲国产综合人成综合网站| 欧美亚洲一区三区| 久久精品国产**网站演员| 日本一区二区免费在线观看视频| 成人久久18免费网站麻豆| 性久久久久久久久久久久| 亚洲精品在线三区| 色婷婷久久久亚洲一区二区三区| 成人国产亚洲欧美成人综合网| 国产精品蜜臀av| 欧美天堂一区二区三区| 97久久超碰国产精品| 国产91对白在线观看九色| 亚洲人精品午夜| 国产精品麻豆欧美日韩ww| 日韩三级中文字幕| 91精品国产麻豆| 在线播放日韩导航| 欧美亚洲一区二区三区四区| 在线亚洲+欧美+日本专区| 色偷偷一区二区三区| 在线观看www91| 在线成人av影院| 精品国产一区二区三区久久久蜜月 | 国产精品一卡二卡在线观看| 亚洲精品免费看| 亚洲精品国产第一综合99久久| 精品亚洲成a人| 国产成人精品免费在线| 狠狠色丁香久久婷婷综合_中| 一区二区欧美国产| 亚洲v精品v日韩v欧美v专区 | 成人一区二区三区视频| 蜜臀va亚洲va欧美va天堂 | 首页国产丝袜综合| 日韩精品成人一区二区三区| 亚洲小说欧美激情另类| 免费成人美女在线观看| 久久精品国产精品青草| 日本韩国欧美三级| 国产在线视频一区二区| 久久99精品国产.久久久久| 91同城在线观看| 99国产精品国产精品毛片| 欧美三区免费完整视频在线观看| 91精品国产aⅴ一区二区| 国产精品日韩精品欧美在线| 亚洲一区二区三区四区不卡| 奇米影视在线99精品| 91日韩一区二区三区| 日韩精品五月天| 成人黄色免费短视频| 在线观看一区二区精品视频| 久久久久久久久免费| 日本午夜精品一区二区三区电影| 国产大片一区二区| 91精品国产一区二区| 自拍av一区二区三区| 国产成人欧美日韩在线电影| 欧美日韩国产高清一区二区| 国产精品免费视频观看| 亚洲免费在线电影| 欧美日韩五月天| 亚洲国产一区视频| 在线亚洲一区二区| 日韩—二三区免费观看av| 91精品国产综合久久香蕉麻豆| 国产精品天天看| www.亚洲色图.com| 国产无一区二区| 94-欧美-setu| 日韩黄色免费电影| 欧美成va人片在线观看| 国产伦精品一区二区三区免费| 久久久99精品免费观看| 丁香激情综合五月| 国产校园另类小说区| 韩国毛片一区二区三区| 国产精品嫩草久久久久| 色系网站成人免费| 欧美日韩中文字幕一区二区| 国产精品日产欧美久久久久| 欧美日韩黄色一区二区| 精品一区二区国语对白| 亚洲第四色夜色| 中文字幕精品一区| 欧美成人高清电影在线| 91蜜桃在线免费视频| 久久国产精品一区二区| 亚洲一区二三区| 国产精品污网站| 亚洲精品一区二区三区香蕉| 色婷婷精品久久二区二区蜜臀av| 国产福利91精品一区| 国产精品88av| 国产一区二区日韩精品| 理论电影国产精品| 一区二区三区在线免费观看| 国产日韩欧美精品电影三级在线| 91网站在线观看视频| 久久99久国产精品黄毛片色诱| 久久综合给合久久狠狠狠97色69| 成人a免费在线看| 国产成人亚洲综合a∨猫咪| 亚洲一区二区精品视频| 亚洲第一主播视频| 久久女同性恋中文字幕| 国产日产欧美一区二区三区| 精品国产在天天线2019| 久久你懂得1024| 久久久久97国产精华液好用吗| 91麻豆精品久久久久蜜臀 | 国产一区二区看久久| 精品一区二区在线观看| 国产精品一二三四区| 成人综合激情网| 91福利在线看| 精品国产一区二区三区久久久蜜月 | 国产精品免费免费| 亚洲444eee在线观看| 日本美女一区二区三区| 成人在线综合网| 欧美中文字幕一区| 久久美女艺术照精彩视频福利播放| 久久久国产午夜精品|