Redis主從複製的原理
更多內容,歡迎關注微信公眾號:全菜工程師小輝。公眾號回覆關鍵詞,領取免費學習資料。
在Redis叢集中,讓若干個Redis伺服器去複製另一個Redis伺服器,我們定義被複制的伺服器為主伺服器(master),而對主伺服器進行復制的伺服器則被稱為從伺服器(slave),這種模式叫做主從複製模式。
> 資料流向是單向的,只能是從master到slave
> 一個slave只能有一個master
主從複製的作用
- 為資料提供多個副本,實現高可用
- 實現讀寫分離(主節點負責寫資料,從節點負責讀資料,主節點定期把資料同步到從節點保證資料的一致性)
主從複製的方式
- 命令slaveof。
優點:無需重啟。缺點:不便於管理
// 命令列使用
slaveof ip port // 使用命令後自身資料會被清空,但取消slave只是停止複製,並不清空
- 修改配置。
優點:統一配置。缺點:需要重啟
// 配置檔案中配置
slaveof ip port
slave-read-only yes //只允許從節點進行讀操作
全量複製
用於初次複製或其它無法進行部分複製的情況,將主節點中的所有資料都發送給從節點,是一個非常重型的操作,當資料量較大時,會對主從節點和網路造成很大的開銷
全量複製過程:
- Redis內部會發出一個同步命令,剛開始是Psync命令,Psync ? -1表示要求master主機同步資料
- 主機會向從機發送run_id和offset,因為slave並沒有對應的 offset,所以是全量複製
- 從機slave會儲存主機master的基本資訊
- 主節點收到全量複製的命令後,執行bgsave(非同步執行),在後臺生成RDB檔案(快照),並使用一個緩衝區(稱為複製緩衝區)記錄從現在開始執行的所有寫命令
- 主機發送RDB檔案給從機
- 傳送緩衝區資料
- 重新整理舊的資料。從節點在載入主節點的資料之前要先將老資料清除
- 載入RDB檔案將資料庫狀態更新至主節點執行bgsave時的資料庫狀態和緩衝區資料的載入。
全量複製開銷
- 主節點需要bgsave
- RDB檔案網路傳輸佔用網路io
- 從節點要清空資料
- 從節點載入RDB
- 全量複製會觸發從節點AOF重寫
部分複製
部分複製是Redis 2.8以後出現的,用於處理在主從複製中因網路閃斷等原因造成的資料丟失場景,當從節點再次連上主節點後,如果條件允許,主節點會補發丟失資料給從節點。因為補發的資料遠遠小於全量資料,可以有效避免全量複製的過高開銷,需要注意的是,如果網路中斷時間過長,造成主節點沒有能夠完整地儲存中斷期間執行的寫命令,則無法進行部分複製,仍使用全量複製
部分複製過程:
- 如果網路抖動(連線斷開 connection lost)
- 主機master 還是會寫 repl_back_buffer(複製緩衝區)
- 從機slave 會繼續嘗試連線主機
- 從機slave 會把自己當前 run_id 和偏移量傳輸給主機 master,並且執行 pysnc 命令同步
- 如果master發現你的偏移量是在緩衝區的範圍內,就會返回 continue命令
- 同步了offset的部分資料,所以部分複製的基礎就是偏移量 offset。
> 伺服器執行ID(run_id):每個Redis節點(無論主從),在啟動時都會自動生成一個隨機ID(每次啟動都不一樣),由40個隨機的十六進位制字元組成;run_id用來唯一識別一個Redis節點。 通過info server命令,可以檢視節點的run_id。
開發運維常見的問題
- 讀寫分離
- 複製資料存在延遲(如果從節點發生阻塞)
- 從節點可能發生故障
- 主從配置不一致
- 例如maxmemory不一致,可能會造成丟失資料
- 例如資料結構優化引數不一致:造成主從記憶體不一致
- 規避全量複製
- 第一次全量複製不可避免,所以分片的maxmemory減小,同時選擇在低峰(夜間)時,做全量複製。
- 複製積壓緩衝區不足 增大複製緩衝區配置rel_backlog_size
> 例如如果網路中斷的平均時間是60s,而主節點平均每秒產生的寫命令(特定協議格式)所佔的位元組數為100KB,則複製積壓緩衝區的平均需求為6MB,保險起見,可以設定為12MB,來保證絕大多數斷線情況都可以使用部分複製。
- 複製風暴 master節點重啟,master節點生成一份rdb檔案,但是要給所有從節點發送rdb檔案。對cpu,記憶體,頻寬都造成很大的壓力
更多內容,歡迎關注微信公眾號:全菜工程師小輝。公眾號回覆關鍵詞,領取免費學習資料。
相關推薦
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