0五、_redis replication的完整流運行程和原理的再次深刻剖析

一、複製的完整流程node

(1)slave node啓動,僅僅保存master node的信息,包括master node的host和ip,可是複製流程沒開始redis

master host和ip是從哪兒來的,redis.conf裏面的slaveof配置的緩存

(2)slave node內部有個定時任務,每秒檢查是否有新的master node要鏈接和複製,若是發現,就跟master node創建socket網絡鏈接
(3)slave node發送ping命令給master node
(4)口令認證,若是master設置了requirepass,那麼salve node必須發送masterauth的口令過去進行認證
(5)master node第一次執行全量複製,將全部數據發給slave node
(6)master node後續持續將寫命令,異步複製給slave node網絡

二、數據同步相關的核心機制異步

指的就是第一次slave鏈接msater的時候,執行的全量複製,那個過程裏面你的一些細節的機制socket

(1)master和slave都會維護一個offsetui

master會在自身不斷累加offset,slave也會在自身不斷累加offset
slave每秒都會上報本身的offset給master,同時master也會保存每一個slave的offsetdebug

這個倒不是說特定就用在全量複製的,主要是master和slave都要知道各自的數據的offset,才能知道互相之間的數據不一致的狀況server

(2)backlogblog

master node有一個backlog,默認是1MB大小
master node給slave node複製數據時,也會將數據在backlog中同步寫一份
backlog主要是用來作全量複製中斷候的增量複製的

(3)

master run id

info server,能夠看到master run id
若是根據host+ip定位master node,是不靠譜的,若是master node重啓或者數據出現了變化,那麼slave node應該根據不一樣的run id區分,run id不一樣就作全量複製
若是須要不更改run id重啓redis,可使用redis-cli debug reload命令

(4)psync

從節點使用psync從master node進行復制,psync runid offset
master node會根據自身的狀況返回響應信息,多是FULLRESYNC runid offset觸發全量複製,多是CONTINUE觸發增量複製

三、全量複製

(1)master執行bgsave,在本地生成一份rdb快照文件
(2)master node將rdb快照文件發送給salve node,若是rdb複製時間超過60秒(repl-timeout),那麼slave node就會認爲複製失敗,能夠適當調節大這個參數
(3)對於千兆網卡的機器,通常每秒傳輸100MB,6G文件,極可能超過60s
(4)master node在生成rdb時,會將全部新的寫命令緩存在內存中,在salve node保存了rdb以後,再將新的寫命令複製給salve node
(5)client-output-buffer-limit slave 256MB 64MB 60,若是在複製期間,內存緩衝區持續消耗超過64MB,或者一次性超過256MB,那麼中止複製,複製失敗
(6)slave node接收到rdb以後,清空本身的舊數據,而後從新加載rdb到本身的內存中,同時基於舊的數據版本對外提供服務
(7)若是slave node開啓了AOF,那麼會當即執行BGREWRITEAOF,重寫AOF

rdb生成、rdb經過網絡拷貝、slave舊數據的清理、slave aof rewrite,很耗費時間

若是複製的數據量在4G~6G之間,那麼極可能全量複製時間消耗到1分半到2分鐘

四、增量複製

(1)若是全量複製過程當中,master-slave網絡鏈接斷掉,那麼salve從新鏈接master時,會觸發增量複製
(2)master直接從本身的backlog中獲取部分丟失的數據,發送給slave node,默認backlog就是1MB
(3)msater就是根據slave發送的psync中的offset來從backlog中獲取數據的

五、heartbeat

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

master默認每隔10秒發送一次heartbeat,salve node每隔1秒發送一個heartbeat

六、異步複製

master每次接收到寫命令以後,如今內部寫入數據,而後異步發送給slave node  

相關文章
相關標籤/搜索