主從複制的架構
- 一主一從
- 一主多從
主從複制的作用
- 資料備份
- 讀寫分離
主從複制的工作原理
- runid
主節點的runid,從節點第一次請求複制主節點的時候,主節點會将此runid傳回
- offset(偏移量)
目前資料的偏移量,例如執行一條指令後,産生一條資料後,會增大偏移量,從節點請求複制主節點的時候,會帶上這個資訊,讓主節點從這個偏移量之後的資料傳回給我。
全量複制
- 建立連接配接後,從節點向主節點發送psync指令,請求同步,攜帶 runid和offset,如果第一次同步,傳 ?和-1
- 主節點收到psync請求後,發現runid為?和offset為-1,則知道從節點希望全量複制,于是将自己的runid和offset傳回給從節點
- 主節點執行bgsave,生成RDB檔案,在此期間生成的指令全部放到buffer中
- 主節點将生成後的rdb檔案,傳輸給從節點
- 從節點收到rdb檔案後,首先清除自己的資料,然後将rdb檔案加載到記憶體
- 主節點再把緩沖區的指令發給從節點
- 從節點再把緩沖區的指令加載到記憶體
增量複制
- 從節點向主節點發送psync 指令 攜帶 已儲存的runid和offset
- 主節點判斷runid是否和自己的id一緻,如果不一緻則執行全量同步
- 主節點判斷offset是否在環形緩沖區内,如果不在澤執行全量同步
- 否則執行增量同步