色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文深入Redis主從復制的原理詳解

數據分析與開發 ? 來源:ITPUB技術小棧 ? 作者:ITPUB技術小棧 ? 2021-02-04 16:13 ? 次閱讀

復制原理

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 執行流程:

84f1b232-584b-11eb-8b86-12bb97331649.png

流程說明:從節點發送 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 之后同時支持全量同步和部分同步。

流程如下:

852b91aa-584b-11eb-8b86-12bb97331649.png

介紹一下上圖步驟:

1、發送 psync 命令(spync ?-1)

2、主節點根據命令返回 FULLRESYNC

3、從節點記錄主節點 ID 和 offset

4、主節點 bgsave 并保存 RDB 到本地

5、主節點發送 RBD 文件到從節點

6、從節點收到 RDB 文件并加載到內存中

7、主節點在從節點接受數據的期間,將新數據保存到“復制客戶端緩沖區”,當從節點加載 RDB 完畢,再發送過去。(如果從節點花費時間過長,將導致緩沖區溢出,最后全量同步失敗) 8、從節點清空數據后加載 RDB 文件,如果 RDB 文件很大,這一步操作仍然耗時,如果此時客戶端訪問,將導致數據不一致,可以使用配置slave-server-stale-data 關閉. 9、從節點成功加載完 RBD 后,如果開啟了 AOF,會立刻做 bgrewriteaof。

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

注意:

1、如過 RDB 文件大于 6GB,并且是千兆網卡,Redis 的默認超時機制(60 秒),會導致全量復制失敗。可以通過調大 repl-timeout 參數來解決此問題。

2、Redis 雖然支持無盤復制,即直接通過網絡發送給從節點,但功能不是很完善,生產環境慎用。

4.部分復制

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

步驟如下:

854c17ea-584b-11eb-8b86-12bb97331649.png

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 秒,則判斷節點下線。

85898ada-584b-11eb-8b86-12bb97331649.png

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

6.異步復制

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

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

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

85a8bcde-584b-11eb-8b86-12bb97331649.png

總結

本文主要分析了 Redis 的復制原理,包括復制過程,數據之間的同步,全量復制的流程,部分復制的流程,心跳設計,異步復制流程。

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

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7067

    瀏覽量

    89109
  • Redis
    +關注

    關注

    0

    文章

    376

    瀏覽量

    10882

原文標題:一文深入 Redis 主從復制的原理詳解,權威又科學

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    華為云 Flexus 云服務器 X 實例:在 openEuler 系統下搭建 MySQL 主從復制

    前言 本文將介紹如何在華為云 Flexus 云服務器 X 實例上,基于 openEuler 系統部署 MySQL 主從復制。MySQL 作為款高性能且穩定的開源關系型數據庫管理系統,是眾多
    的頭像 發表于 12-30 09:11 ?138次閱讀
    華為云 Flexus 云服務器 X 實例:在 openEuler 系統下搭建 MySQL <b class='flag-5'>主從復制</b>

    華為云 Flexus X 輕松實現 Redis 主多從高效部署

    購買實例、配置 Redis 主從節點,并驗證主多從架構的正確性。通過實際操作,您將體驗到 Flexus?X 在提升
    的頭像 發表于 12-27 13:45 ?180次閱讀
    華為云 Flexus X 輕松實現 <b class='flag-5'>Redis</b> <b class='flag-5'>一</b>主多從高效部署

    Redis使用重要的兩個機制:Reids持久化和主從復制

    今天這篇文章,我們起了解 Redis 使用中非常重要的兩個機制:Reids 持久化和主從復制。 我們都知道Redis個內存數據庫,在學
    的頭像 發表于 12-18 10:33 ?125次閱讀
    <b class='flag-5'>Redis</b>使用重要的兩個機制:Reids持久化和<b class='flag-5'>主從復制</b>

    Redis緩存與Memcached的比較

    Redis和Memcached都是廣泛使用的內存數據存儲系統,它們主要用于提高應用程序的性能,通過減少對數據庫的直接訪問來加速數據檢索。以下是對Redis和Memcached的比較,涵蓋了它們的
    的頭像 發表于 12-18 09:33 ?157次閱讀

    智慧公交是什么?帶你詳解智慧公交的解決方案!

    智慧公交是什么?帶你詳解智慧公交的解決方案!
    的頭像 發表于 11-05 12:26 ?302次閱讀
    智慧公交是什么?<b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>詳解</b>智慧公交的解決方案!

    CPK為什么要大于1.33?詳解CPK計算

    原文標題:CPK為什么要大于1.33?詳解CPK計算
    的頭像 發表于 11-01 11:08 ?363次閱讀

    配置MySQL主從復制和讀寫分離

    配置MySQL主從復制和讀寫分離
    的頭像 發表于 10-23 11:44 ?474次閱讀
    配置MySQL<b class='flag-5'>主從復制</b>和讀寫分離

    富芮坤主從一體多鏈接通信協議解析

    在先前我們已經介紹了富芮坤主從一體多鏈接的概念,現在,我們將深入解析其技術文檔,為大家提供更詳盡的說明。
    的頭像 發表于 10-22 10:34 ?274次閱讀
    富芮坤<b class='flag-5'>主從一</b>體多鏈接通信協議解析

    國產藍牙模組 | 藍牙主從一體功能應用

    隨著科技快速發展,藍牙技術在各個行業應用中變得非常廣泛。今天,我們來分享種非常熱門的主從一體藍牙模塊。我們將對它的模式、概念、應用、選購等進行探討,讓讀者深入了解這種藍牙模塊。藍牙的工作模式藍牙
    的頭像 發表于 06-21 08:25 ?527次閱讀
    國產藍牙模組 | 藍牙<b class='flag-5'>主從一</b>體功能應用

    Redis 開源協議調整,我們怎么辦?

    許可,時間點恰逢剛剛完成最新輪融資,宣布的時機耐人尋味。 Redis 協議調整,對云計算廠商的影響 Redis 協議調整聽起來可能沒什么,但在開源項目領域是個大問題。這并不是
    的頭像 發表于 05-09 22:59 ?441次閱讀
    <b class='flag-5'>Redis</b> 開源協議調整,我們怎么辦?

    Redis開源版與Redis企業版,怎么選用?

    Redis開源版,二者有何不同?該如何選擇?Redis企業版Redis企業版基于開源Redis構建,企業版將開發人員、架構師和DevO
    的頭像 發表于 04-04 08:04 ?1089次閱讀
    <b class='flag-5'>Redis</b>開源版與<b class='flag-5'>Redis</b>企業版,怎么選用?

    新版 Redis 不再“開源”,對使用者都有哪些影響?

    2024 年 3 月 20 日,Redis Labs 宣布從 Redis 7.4 開始,將原先比較寬松的 BSD 源碼使用協議修改為 RSAv2和 SSPLv1協議。該變化意味著 Redis
    的頭像 發表于 03-27 22:30 ?504次閱讀
    新版 <b class='flag-5'>Redis</b> 不再“開源”,對使用者都有哪些影響?

    Redis官方搜索引擎來了,性能炸裂!

    RediSearch 是Redis 模塊,為 Redis 提供查詢、二級索引和全文搜索功能。
    的頭像 發表于 02-21 10:01 ?2393次閱讀
    <b class='flag-5'>Redis</b>官方搜索引擎來了,性能炸裂!

    Redis7單線程與多線程詳解

    主要是指Redis的網絡IO和鍵值對讀寫是由個線程來完成的。
    的頭像 發表于 01-16 17:33 ?1865次閱讀
    <b class='flag-5'>Redis</b>7單線程與多線程<b class='flag-5'>詳解</b>

    Redis為LangChain定制AI代理——OpenGPTs

    于構建定制化的人工智能代理。因為Redis具有高速和穩定性的優點,所以LangChain選擇了Redis來作為OpenGPTs的默認向量數據庫。
    的頭像 發表于 01-13 08:03 ?850次閱讀
    用<b class='flag-5'>Redis</b>為LangChain定制AI代理——OpenGPTs
    主站蜘蛛池模板: 欧美日韩第一区| 久久精品免费看网站| 国产日韩精品SUV| 青草影院天堂男人久久| 欲香欲色天天综合和网| 好男人资源免费观看1| 亚洲国产成人精品无码区APP| 儿子日母亲B好爽| 日本欧美久久久久免费播放网 | 欧美18videosex| 99爱在线观看| 浓毛BWBWBWBWBW日本| 99福利在线观看| 嫩小xxxxbbbb| bl被教练啪到哭H玉势| 欧美18videosex初次| caoporn超碰在线| 欧美一区二区激情视频| 荡公乱妇HD中文字幕| 天天国产在线精品亚洲| 国产呻吟久久久久久久92| 亚洲精品入口一区二区乱麻豆精品 | 曰批视频免费40分钟不要钱| 精品一区二区三区免费观看| 伊人久久国产精品| 免费人成视频X8X8国产更快乐| 99精品网站| 日韩免费一区二区三区在线| 国产成人精品视频免费大全| 性欧美金发洋妞xxxxbbbb| 蝴蝶中文娱乐| 97成人精品视频在线播放| 日本高清免费一本视频在线观看| 高h辣h双处全是肉一对一| 亚洲成人免费在线| 久久亚洲成a人片| 宝贝乖女好紧好深好爽老师| 婷婷五月久久丁香国产综合| 娇小萝被两个黑人用半米长| 在线 亚洲 日韩 欧洲视频| 琪琪see色原网色原网站|