天天看點

redis 主從、哨兵、叢集

目錄

一、主從模式

二、 哨兵

三、叢集(cluster)模式

一、主從模式

即slave節點儲存master資料副本,可以讀寫分離,從slave節點讀,緩解了master的節點的讀寫壓力

二、 哨兵

1. 基本過程:叢集監控、消息通知,故障轉移、配置中心

2. 具體過程: 多個sentinel節點監控master、slave節點,當一個sentinel節點發現master節點出現故障當機時(主觀下線),它就會去通知其他sentinel節點,當認為master節點故障的sentinel節點數大于quroum時(客觀下線),sentinel發起上司者選舉,選出一個sentinel節點進行去進行主從切換。

3. 優點:保證了一定的高可用性,當master當機時,會有slave節點補上,選中的slave節點變成master節點,當機的master節點變成slave節點

4. 問題:

  • 主備切換的資料丢失問題:

min-slaves-to-write 1

          min-slaves-max-lag 10 

配置要求至少有一個slave節點,複制和同步master節點的資料延遲不超過10s。若所有slave,資料複制和同步超過10s,   master節點就不會再接受任何請求。

  • slave選擇标準:

跟master斷開連接配接的時長

slave優先級

複制offset

run id

三、叢集(cluster)模式

叢集主要基于分布式的思想了,維護多個master節點,一般在不同機器上,每個master節點儲存一部分資料。

1. 一緻性哈希->hash slot

CRC16(key)%16384,有16384個slot(槽),每個master節點會配置設定到一定數量的槽。

2. gossipe協定

meet:加入叢集後,第一次與叢集裡的其他節點進行通訊,通知其它節點,該節點加入了叢集。

ping:發送ping消息時,可以攜帶自身和其他節點的資訊,會有一個cluster_node_timeout的時間,當超過cluster_node_timeout還沒得到pong回應時,則會認為這個節點當機,并且會通知其他節點。當半數以上的節點都認為其當機,則該節點會客觀下線。

pong:傳回ping和meet,包含自己的狀态和其他資訊

fail:某個節點判斷另一個節點fail後,就發送fail給其他節點,通知其他節點,指定的節點當機啦!

3. ask、move重定向及smart client

當叢集擴容或縮容的時候,就會有slot進行遷移。這時若有client進行請求,就會出現資料所在的slot不在目前通路節點上,是以要進行重定向。

ask:在slot遷移還未完成時

move:slot遷移已經完成

smart client:會在client本地緩存一個 hashslot->node映射表,當要查找某個資料時,通過CRC16(key)%16384得到slot位置,然後通過查詢這個映射表,确定到去哪個node進行請求。當請求同時該節點有slot在遷移,若是正在遷移過程中,會傳回ask,這時client不會更新映射表,而是再次到目标節點進行請求,直到遷移完成,節點傳回move,此時更新映射表,并将到新的對應得node進行請求。

繼續閱讀