redis主從模式
主從模式
在軟件架構中,master-slave(主從模式)是使用比較多的一種架構方式;
-
概述
主(master)和 從(slave)部署在不同的服務器上,當主節點服務器寫入數據時會同步到從節點的服務器上,一般主節點負責寫入數據,從節點負責讀取數據
-
優點
- 讀寫分離,提高效率
- 數據熱備份,提供多個副本
-
缺點
- 主節點故障,集羣則無法進行工作,可用性比較低,從節點升主節點需要人工手動干預
- 單點容易造成性能低下
-
主節點的存儲能力受到限制
- 主節點的寫受到限制(只有一個主節點)
- 全量同步可能會造成毫秒或者秒級的卡頓現象
-
架構圖
-
特點
只能master到slave,單向的;
-
全量複製
一般情況下,當slave第一次啓動連接master,或者是“被認爲是第一次連接”,則主從採用全量複製的方式進行數據同步。
全量複製的執行流程:
-
定時任務每秒檢查是否有新的mater需要連接,如果發現就與master建立socket連接。
-
slave 發送ping指令到mater
-
如果mater配置require pass,slave需要發送認證給master
-
slave 會發送sync命令命令給 master 請求同步數據;
-
master 接收到同步請求後向 slave 發送 run_id 和 offset;
-
slave 會接收並保存 mater 傳遞過來信息(slave 中無對應offset,所以執行全量複製)。
-
master 執行 bgsave 命令生成RDB文件,期間會創建複製緩衝區記錄從現在開始執行的所有寫命令;
-
master 先向 slave 發送RDB數據;
-
然後發送複製緩衝區記錄的數據,slave 會將RDB和緩衝區數據存放到磁盤中;
-
slave 在清空原有數據;
-
最後再將磁盤中接收到的數據導入內存中。
-
Master收集到的寫命令都會通過之前建立的連接,增量發送給salve端
-
-
名詞解釋
-
offset複製偏移量
offset是用來記錄master和lslave某個時段的數據版本狀態的,slave每秒會向master上報offset,master保存下來,當觸發PSYNC時再拿來和master的offset數據作對比。它是記錄數據在某一時刻的快照,用來對比master和slave數據差異用的,從而決定是否是全量複製。
-
backlog積壓緩衝區
它默認大小爲1mb,複製積壓緩衝區是由Master維護的一個固定長度的FIFO隊列,它的作用是緩存已經傳播出去的命令。當Master進行命令傳播時,不僅將命令發送給所有Slave,還會將命令寫入到複製積壓緩衝區裏面。
全量複製的時候,master的數據更新(讀寫操作,主動過期刪除等)會臨時存放在backlog中待全量複製完成後增量發到slave,必須爲此保留足夠的空間。
-
run_id
master唯一標示,slave連接master時會傳runid,master每次重啓runid都發生變化,當slave發現master的runid變化時都會觸發全量複製流程。
-
-
環境搭建
環境搭建就不一一贅述了,隨便搜一下都有的,跟着操作一下就好了,都只是配置而已
想了解學習更多C++後臺服務器方面的知識,請關注:
微信公衆號:C++後臺服務器開發
**
想了解學習更多C++後臺服務器方面的知識,請關注:
微信公衆號:C++後臺服務器開發