redis-cluster概念

本博客整參考文章:redis架構演變與redis-cluster羣集讀寫方案  以及 Redis cluster集羣:原理及搭建 以及 redis官方集羣文檔html

不一樣於master-salve 或者 哨兵模式 cluster與他們最大的區別就是 前兩種是全量存儲 內存消耗大,且存在木桶效應而 cluster集羣則是分佈式存儲 即每臺Redis存儲不一樣的內容。node

 

redis-cluster被設計爲一共有16384個hash slot可用,每一個master分得一部分的slot 其分佈算法爲:【hash_slot = crc16(key) mod 16384】  若是有{}則取{}的可用key,不然整個能夠是可用key。集羣至少要3主3從,且每一個實例使用不一樣的配置文件。redis

  1. 全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬。算法

  2. 節點的fail是經過集羣中超過半數的節點檢測失效時才生效。架構

  3. 客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可。分佈式

  4. redis-cluster把全部的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value優化

 

redis-cluster投票:容錯ui

  1. 投票過程是集羣中全部master參與,若是半數以上master節點與master節點通訊超時(cluster-node-timeout),認爲當前master節點掛掉..net

  2. 何時整個集羣不可用(cluster_state:fail)?設計

    • 若是集羣任意master掛掉,且當前master沒有slave.集羣進入fail狀態,也能夠理解成集羣的slot映射[0-16383]不完整時進入fail狀態. 
      • redis-3.0.0.rc1加入cluster-require-full-coverage參數,默認關閉,打開集羣兼容部分失敗.
    • 若是集羣超過半數以上master掛掉,不管是否有slave,集羣進入fail狀態。

 

在redis-cluster架構中,redis-master節點通常用於接收讀寫,而redis-slave節點則通常只用於備份,其與對應的master擁有相同的slot集合,若某個redis-master意外失效,則再將其對應的slave進行升級爲臨時redis-master。
在redis的官方文檔中,對redis-cluster架構上,有這樣的說明:在cluster架構下,默認的,通常redis-master用於接收讀寫,而redis-slave則用於備份,當有請求是在向slave發起時,會直接重定向到對應key所在的master來處理。但若是不介意讀取的是redis-cluster中有可能過時的數據而且對寫請求不感興趣時,則亦可經過readonly命令,將slave設置成可讀,而後經過slave獲取相關的key,達到讀寫分離

相關文章
相關標籤/搜索