【Redis主從架構】Redis replication完整流程和深入講解

4. 【Redis主從架構】Redis replication完整流程和深入講解

1. Replication完整複製流程

  1. slave node啓動,僅僅保存 master node 的信息,包括 master node 的host和ip,但是複製流程還沒有開始master host和ip從哪裏來,redis.conf裏面的slaveof配置的。

  2. salve node 內部有個定時任務每秒檢查是否有master node要連接和複製,如果發現, slave node 就跟 master node 建立socket網絡連接。

  3. slave node 發送ping命令給master node。

  4. 口令認證,如果master 設置了 requiress,那麼 salve node必須發送masterauth的口令過去進行認證。

  5. slave node第一次連接到master,會執行全量複製,將所有數據發送給slave node

  6. master node後續持續寫命令異步複製到slave node。

2. 數據同步相關的核心機制

第一次slave 連接 master 的時候,執行的全量複製,這個過程中一些細節的機制

  1. master 和 slave 都會維護一個offset

master 會在自身不斷累積offset,slave也會在自身不斷累加offset

slave 每秒都會上報自己的offset給master,同時master也會保存每個slave的offset,主要作用是:master和slave都要知道各自數據的offset,才能知道互相之間數據不一致的情況

  1. backlog

master node有一個backlog,默認大小是1M。

master node給salve複製數據的時候,會同步將數據寫到backlog中

backlog主要是用來做全量複製中斷時的增量複製

  1. master run id

  • master runid的作用

在這裏插入圖片描述

  • info server命令可以看到 master 的run id

如果根據host+ip命令定位master node,是不靠譜的,如果master node重啓或者數據出現了變化,那麼 slave node應該根據不同的run id的不同做全量複製

如果需要不更改run id重啓redis,可以使用redis-cli debug reload命令。

  1. psync

slave 節點 使用 psync 命令從 master node進行復制,psync runid offset

master node 會根據自身的情況返回響應信息,可能是 fullresync runid offset 觸發全量複製,可能是continue觸發增量複製。

3. 全量複製詳細介紹

  1. master 執行 bgsave 命令,在本地生成一份rdb快照文件
  2. master node 將rdb快照文件發送到 salve node,如果rdb複製事件超過60s(repl-timeout),那麼 slave node 就會認爲複製失敗,可以適當的調大這個參數
  3. 對於千兆網卡的機器,一般一秒傳輸100MB文件,6G文件很可能超過60s秒,導致複製失敗
  4. master node 生成rdb時,會將所有新增的命令存儲到內存中,在slave node 保存了rdb之後,再講新的寫命令複製給 slave node。
  5. client-output-buffer-limit slave 256MB 64MB 60,如果在複製期間,新增的數據超過內存緩存區大小64MB,或者一次性到達256MB,那麼停止複製,複製失敗
  6. 如果slave node 開啓了AOF,那麼會立即執行BGRWRITEAOF,重新AOF。

rdb生成,rdb通過網絡拷貝,slave舊數據的清理、slave aof rewrite,很好時間。

4. 增量複製

  1. 如果複製過程中,master-slave網絡連接中斷,那麼salve重新連接到master,是進行增量複製,而不是全量複製。
  2. master 直接從自己的backlog中獲取部分丟失的數據,發送給slave node,默認backlog的大小是1MB
  3. master 會根據salve發送的psync中的offset來從backlog中獲取數據。

5. heartbeat

主從節點互相都會發送heartbeat信息

master 默認每隔10秒發送一次heartbeatslave node每秒發送一個heartbeat

6. 異步複製

master 介紹到寫命令之後,現在內部寫入數據,然後異步發送給slave node。

參考 石衫老師 《億級流量教程》課程筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章