redis主从复制原理、断点续传、无磁盘化复制、过期key处理
1.主從架構的核心原理:
當啟動一個salve node時會發送PSYNC 命令到master。
salve第一次連接master時master會根據當前數據復制一份RDB(full resynchronization 全量復制)到slave,slave會將本地數據寫入磁盤,然后從本地磁盤加載到內存中,master會將內存中的數據發送給slave,slave會同步這些數據。如果master與slave發生故障master,會自動重連
2.主從復制斷點續傳
概念:主從復制過程中如果網絡斷掉了,可以從上次復制的地方繼續復制而不是從頭復制
原理:master會在自己內存里維護一個backlog,master和salve都會保存一個復制數據的replica offset ,offset里有一個master的id,offset保存在backlog中,如果網絡斷掉的話,salve會從master 的offset開始復制
(1).maste和slave都會維護offset
(2).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
(5)全量復制
3.對于千兆網卡的機器來說1s傳輸100MB,6G時間可能超過60s
7.如果slave node開啟了AOF會立即執行BGRERITEAOF,重寫AOF
如果復制數據在4-6G之間,很可能全量復制的時間在1.5-2分鐘
(6)增量復制
(7)heartbeat
(8)異步復制
master接收到命令后在內部寫入,異步發送給slave node
3.無磁盤化復制
repl-diskless-sync no
repl-diskless-sync-delay 5
4.Redis過期策略
(1)定期刪除+惰性刪除
(2)redis內存淘汰策略
5.redis哨兵的多個核心底層原理的深入解析(包含slave選舉算法)
sdown是主觀宕機,一個slave覺得自己的master宕機了就是主觀宕機
- odown是客觀宕機,如果quorum的數量的哨兵覺得maser宕機了就是客觀宕機,sdown達成條件很簡單,如果一個哨兵ping master超過了is-master-down-after-milliseconds指定毫秒數就認為master宕機了
- sdown到odown的轉換條件比較簡單,如果一個哨兵在指定時間內也收到quorum的數量的哨兵覺的是sdown宕機,那么就認為是odown,客觀認為master宕機
哨兵和slave的自動發現機制
哨兵之間相互發現通過pub/sub系統實現,每個兩秒鐘哨兵都會監控自己的master+slaves對應的_sentinel_:hello channel發送消息,內容主要是hos、IP、run id還有master對應的監控配置,感知同樣監聽master+slaves哨兵的存在,哨兵間還會交換master監控配置,實現監控配置的同步
slave配置的自動糾正
哨兵模式會負責糾正slave的一些配置,比如slave要成為master的潛在候選人,哨兵會確保slave會復制master現有的數據,如果slave連接到一個錯誤的master上故障轉移后哨兵會保證它連接到正確的master上
slave->master選舉算法
-
如果master被認為是odown而且majoitry哨兵都允許主備切換,此時哨兵就會執行主備切換,選舉slave需要考慮的信息
- 跟master斷開連接的時長
- slave優先級
- 復制offset
- run id
-
如果一個slave與master斷開時長超過down-after-milliseconds的10倍,外加master宕機時長此時就會認為不適合選舉為master
(down-after-milliseconds *10)+milliseconds_since_master_is_in_sdown -
接下來會對slave進行排序
-
quorum和majority
每次主備切換,首先確認quorum數量的odown,然后選舉出一個哨兵進行切換,這個哨兵還必須得到majority哨兵的授權,才能被正式授權
如果quorum<majority比如5個哨兵,majority是3,quorum的數量是2,那么3哨兵授權就可以切換
但如果quorum>=majority,那么必須所有的quorum都必須授權,比如 quorum是5必須5個哨兵都授權才能切換 -
configuration epoch
執行切換的哨兵,要切換到新的master需要得到一個configuration epoch這就是一個版本號,每次版本號必須唯一
如果第一個哨兵切換失敗,那么其他哨兵會等待faliover-timeout時間,然后繼續執行切換獲得一個新的configuration epoch,作為新的版本號 -
configuration傳播
哨兵切換完成后會將本地跟新為最新的master配置,然后pub/sub機制同步給其他哨兵
這里之前的version就很重要,因為消息都是通過一個channel發布監聽,完成主備切換后新的master跟著新的version,其他哨兵也跟著version大小更新自己的master
總結
以上是生活随笔為你收集整理的redis主从复制原理、断点续传、无磁盘化复制、过期key处理的全部內容,希望文章能夠幫你解決所遇到的問題。