redis主從原理
一、全量複制
主從全量複制:核心:将主節點最新的rdb檔案和緩沖區的資料同步給從節點
1、從節點首次啟動,進行全量同步。向主節點發送psync指令
2、主節點收到psync指令後,執行bgsave生成最新的rdb快照資料
3、主節點将rdb檔案發送給從節點
4、在第2步中主節點生成rdb快照的時候(假如生成快照時間1s,期間有100條指令進入到主節點)那麼發送給從節點的rdb檔案不是最新的(沒有那100條指令)
5、主節點有一個緩沖區,專門存放最近的指令(預設1M)。也就是說主節點不僅給從節點發送rdb快照,同時也将緩沖區的資料發送給從節點
6、将rdb和緩沖區的資料合并生成一個完整的rdb并替換從節前之前的快照檔案
疑問:
1、redis沒開啟rdb怎麼進行同步?
答案:跟持久化方式沒有關系,同步是主節點接受到從節點的psync指令後,主動執行bgsave生成的rdb【主動生成主節點的全量資料rdb】
2、什麼時間進行主從複制?從節點首次啟動的時候
二、部分複制
1、從節點連接配接斷開,重新連主節點
2、向主節點發送psync(offset)指令,offset代表從節點的rdb檔案中最後一條指令的偏移量
3、如果從節點發送的offset在主節點的緩沖區中,那麼master會将緩存中從slave的offset之後的資料一次性同步給從節點,否則會全量同步
三、主從切換
當master挂了,需要手動修改很多,修改slave的replicaof 新的主節點,然後重新開機。
還要改java程式的ip。需要運維進行master挂了自動切換master
redis哨兵原理
哨兵不提供讀寫服務,主要用來監控redis示例節點
1、用戶端第一次通路哨兵,哨兵拿到master節點後告知用戶端
2、用戶端通路master節點,如果master節點挂了則會在多個slave節點中選擇一個新的master節點,此時哨兵已監控到master節點的變化,然後告訴用戶端新的master節點ip,用戶端接收到新的master的ip,下次通路則會通路新的master的ip