1. 程式人生 > >Redis主從複製的原理

Redis主從複製的原理

更多內容,歡迎關注微信公眾號:全菜工程師小輝。公眾號回覆關鍵詞,領取免費學習資料。

在Redis叢集中,讓若干個Redis伺服器去複製另一個Redis伺服器,我們定義被複制的伺服器為主伺服器(master),而對主伺服器進行復制的伺服器則被稱為從伺服器(slave),這種模式叫做主從複製模式。

> 資料流向是單向的,只能是從master到slave

> 一個slave只能有一個master

主從複製的作用

  • 為資料提供多個副本,實現高可用
  • 實現讀寫分離(主節點負責寫資料,從節點負責讀資料,主節點定期把資料同步到從節點保證資料的一致性)

主從複製的方式

  • 命令slaveof。
    優點:無需重啟。缺點:不便於管理
// 命令列使用
slaveof ip port // 使用命令後自身資料會被清空,但取消slave只是停止複製,並不清空
  • 修改配置。
    優點:統一配置。缺點:需要重啟
// 配置檔案中配置
slaveof ip port
slave-read-only yes //只允許從節點進行讀操作

全量複製

用於初次複製或其它無法進行部分複製的情況,將主節點中的所有資料都發送給從節點,是一個非常重型的操作,當資料量較大時,會對主從節點和網路造成很大的開銷

Redis全量複製過程

全量複製過程:

  1. Redis內部會發出一個同步命令,剛開始是Psync命令,Psync ? -1表示要求master主機同步資料
  2. 主機會向從機發送run_id和offset,因為slave並沒有對應的 offset,所以是全量複製
  3. 從機slave會儲存主機master的基本資訊
  4. 主節點收到全量複製的命令後,執行bgsave(非同步執行),在後臺生成RDB檔案(快照),並使用一個緩衝區(稱為複製緩衝區)記錄從現在開始執行的所有寫命令
  5. 主機發送RDB檔案給從機
  6. 傳送緩衝區資料
  7. 重新整理舊的資料。從節點在載入主節點的資料之前要先將老資料清除
  8. 載入RDB檔案將資料庫狀態更新至主節點執行bgsave時的資料庫狀態和緩衝區資料的載入。

全量複製開銷

  • 主節點需要bgsave
  • RDB檔案網路傳輸佔用網路io
  • 從節點要清空資料
  • 從節點載入RDB
  • 全量複製會觸發從節點AOF重寫

部分複製

部分複製是Redis 2.8以後出現的,用於處理在主從複製中因網路閃斷等原因造成的資料丟失場景,當從節點再次連上主節點後,如果條件允許,主節點會補發丟失資料給從節點。因為補發的資料遠遠小於全量資料,可以有效避免全量複製的過高開銷,需要注意的是,如果網路中斷時間過長,造成主節點沒有能夠完整地儲存中斷期間執行的寫命令,則無法進行部分複製,仍使用全量複製

Redis部分複製過程

部分複製過程:

  1. 如果網路抖動(連線斷開 connection lost)
  2. 主機master 還是會寫 repl_back_buffer(複製緩衝區)
  3. 從機slave 會繼續嘗試連線主機
  4. 從機slave 會把自己當前 run_id 和偏移量傳輸給主機 master,並且執行 pysnc 命令同步
  5. 如果master發現你的偏移量是在緩衝區的範圍內,就會返回 continue命令
  6. 同步了offset的部分資料,所以部分複製的基礎就是偏移量 offset。

> 伺服器執行ID(run_id):每個Redis節點(無論主從),在啟動時都會自動生成一個隨機ID(每次啟動都不一樣),由40個隨機的十六進位制字元組成;run_id用來唯一識別一個Redis節點。 通過info server命令,可以檢視節點的run_id。

開發運維常見的問題

  1. 讀寫分離
  • 複製資料存在延遲(如果從節點發生阻塞)
  • 從節點可能發生故障
  1. 主從配置不一致
  • 例如maxmemory不一致,可能會造成丟失資料
  • 例如資料結構優化引數不一致:造成主從記憶體不一致
  1. 規避全量複製
  • 第一次全量複製不可避免,所以分片的maxmemory減小,同時選擇在低峰(夜間)時,做全量複製。
  • 複製積壓緩衝區不足 增大複製緩衝區配置rel_backlog_size

> 例如如果網路中斷的平均時間是60s,而主節點平均每秒產生的寫命令(特定協議格式)所佔的位元組數為100KB,則複製積壓緩衝區的平均需求為6MB,保險起見,可以設定為12MB,來保證絕大多數斷線情況都可以使用部分複製。

  1. 複製風暴 master節點重啟,master節點生成一份rdb檔案,但是要給所有從節點發送rdb檔案。對cpu,記憶體,頻寬都造成很大的壓力

更多內容,歡迎關注微信公眾號:全菜工程師小輝。公眾號回覆關鍵詞,領取免費學習資料。

哎呀,如果我的名片丟了。微信搜尋“全菜工程師小輝”,依   
 
 </div> 
 <div class=

相關推薦

Redis主從複製原理,步驟

和Mysql主從複製的原因一樣,Redis雖然讀取寫入的速度都特別快,但是也會產生讀壓力特別大的情況。為了分擔讀壓力,Redis支援主從複製,Redis的主從結構可以採用一主多從或者級聯結構,Redis主從複製可以根據是否是全量分為全量同步和增量同步。下圖為級聯結構。  全量同步

Redis 主從複製 原理與用法

Redis 複製功能的幾個重要方面: 1. 一個Master可以有多個Slave; 2. Redis使用非同步複製。從2.8開始,Slave會週期性(每秒一次)發起一個Ack確認複製流(replication stream)被處理進度; 3. 不僅主伺服器可以有從伺服器,

Redis 主從複製原理

為什麼要主從複製:     如果使用redis 的時候只使用一個數據庫服務,那是不存在什麼主從複製的。當redis 服務在兩個以上時才會有主從複製。為了讀寫分離和減輕壓力,在實際生產中一般會用到多個redis 服務。多個服務那就存在資料同步的問題,主從複製就是解決redis

04、redis主從複製原理、斷點續傳、無磁碟化複製、過期key處理

1、主從架構的核心原理 當啟動一個slave node的時候,它會發送一個PSYNC命令給master node 如果這是sl

Redis面試篇 -- Redis主從複製原理

    Redis一般是用來支撐讀高併發的,為了分擔讀壓力,Redis支援主從複製。架構是主從架構,一主多從, 主負責寫,並且將資料複製到其它的 slave 節點,從節點負責讀。 所有的讀請求全部走從節點。這樣也可以很輕鬆實現水平擴容,支撐讀高併發。   redis主從

redis 深入理解redis 主從複製原理

## redis 主從複製 ![](https://img2020.cnblogs.com/blog/1440828/202006/1440828-20200613013105577-976452031.png) `master` 節點提供資料,也就是寫。`slave` 節點負責讀。 不是說maste

都在講Redis主從複製原理,我來講實踐總結

摘要:本文將演示主從複製如何配置、實現以及實現原理,Redis主從複製三大策略,全量複製、部分複製和立即複製。 本文分享自華為雲社群《Redis主從複製實踐總結》,原文作者:A夢多啦A 。 複製簡介 Redis 作為一門非關係型資料庫,其複製功能和關係型資料庫(MySQL)來說,功能其實都是差不多,無外乎就是

redis主從複製原理

1. 前言         和MySQL主從複製的原因一樣,Redis雖然讀取寫入的速度都特別快,但是也會產生讀壓力特別大的情況。為了分擔讀壓力,Redis支援主從複製,Redis主從複製可以根據是否是全量分為全量同步和增量同步。 2. 舊版複製功能實現 redis複製功能分為同步和命令傳播兩種操作: (1)

redis主從複製和叢集實現原理

redis主從複製 redis主從配置比較簡單,基本就是在從節點配置檔案加上:slaveof 192.168.33.130 6379 主要是通過master server持久化的rdb檔案實現的。master server 先dump出記憶體快照檔案,然後將rdb檔案傳給

JAVAWEB開發之redis學習(九)——redis主從複製入門及原理

一、Redis的Replication 下面的列表清楚的解釋了Redis Replication的特點和優勢。 1). 同一個Master可以同步多個Slaves。 2). Slave同樣可以接受其它Slaves的連線和同步請求,這樣可以有效的分載Master的同步壓力。因

Redis大容量儲存-pika 主從複製原理之binlog

我們在《大容量類 Redis 儲存 — 有關 pika 的一切》裡介紹過pika的誕生、pika的特點、pika的核心以及pika的使用。本文來自pika使用者bigpyer(小米公司),他在文章中非常詳細的解析了pika同步邏輯中的重要檔案:“write2file”的資料儲存方式及實現原理,非常值

redis主從複製之新增節點實現資料同步原理

在Slave啟動並連線到Master後,將主動傳送SYNC命令。此後Master將啟動後臺存檔程序,將資料庫快照儲存到檔案中,同時收集新的寫命令(增、刪、改)並快取起來,在後臺程序執行寫檔案。完畢後,Master將傳送整個資料庫檔案到Slave,以完成一次完全同步。而Slave伺服器在接收到資料庫檔

Redis主從複製原理

更多內容,歡迎關注微信公眾號:全菜工程師小輝。公眾號回覆關鍵詞,領取免費學習資料。 在Redis叢集中,讓若干個Redis伺服器去

Redis系列(四):Redis持久化和主從複製原理

一、持久化   所謂的持久化就是把記憶體中的資料寫到磁碟中去,防止服務宕機後記憶體資料丟失。Redis4.0之前提供了兩種持久化方式:RDB(預設) 和AOF,Redis4.x之後新增了一種混合持久化(本文所用的Redis版本是redis‐5.0.2)   1、RDB   RDB是Redis Dat

Redis 主從複製技術原理

基於前面介紹的 Redis 內容,Redis 只能作為一個單機記憶體資料庫,一旦伺服器宕機即不能提供服務,即便能通過持久化策略重啟恢復資料,往往也做不到百分之百還原。再一個就是,單機的 Redis 需要處理所有的客戶端請求,包括讀和寫操作,壓力很大。 說了這麼多,Redis 當然也提供瞭解決方案,主從複製技

面試官:請講一下Redis主從複製的功能及實現原理

摘要:Redis在主從模式下會有許多問題需要考慮,這裡寫了一些關於redis在多伺服器下的一些問題分析和總結。 Redis單節點存在單點故障問題,為了解決單點問題,一般都需要對redis配置從節點,然後使用哨兵來監聽主節點的存活狀態,如果主節點掛掉,從節點能繼續提供快取功能。主從配置結合哨兵模式能解決單點故障

Redis主從同步原理-PSYNC【轉】

offset 以及 number fontsize gravity 有一個 post slave js xml Reids復制數據主要有2種場景: 1. 從服務器從來第一次和當前主服務器連接,即初次復制 2. 從服務器斷線後重新和之前連接的主服務器恢復連接,即斷線後重復制

Redis主從同步原理-SYNC【轉】

itl sdn 增量同步 pan 增量 tail 完成 div convert 和MySQL主從復制的原因一樣,Redis雖然讀取寫入的速度都特別快,但是也會產生讀壓力特別大的情況。為了分擔讀壓力,Redis支持主從復制,Redis的主從結構可以采用一主多從或者級聯結構,下

Redis主從同步原理解析

redis主從同步原理 redis同步原理 redis同步解析 redis主從同步原理 在主從數據同步過程中, master只在第一次同步時創建了RDB文件,用此做基礎進行同步。 之後的同步,都是通過增量傳輸命令的方式(AOF)進行同步。環境描述:

redis主從複製踩到的那些坑

一、報錯:* MASTER <-> SLAVE sync started # Error condition on socket for SYNC: No route to host解決:詳情見: https://blog.csdn.net/qq_28538407/article/det