天天看點

redis主從和哨兵原理

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