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,內存,帶寬都形成很大的壓力

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

哎呀,若是個人名片丟了。微信搜索「全菜工程師小輝」,依然能夠找到我

相關文章
相關標籤/搜索