Redis Cluster架構和設計機制簡單介紹


之前另一篇文章也介紹了 Redis Cluster (link,在文章的后半部分)

今天看到這一篇,簡單說一下(http://hot66hot.iteye.com/blog/2050676)

 

作者的目標:Redis Cluster will support up to ~1000 nodes. 贊...

目前redis支持的cluster特性(已測試):

1):節點自動發現

2):slave->master 選舉,集群容錯

3):Hot resharding:在線分片

4):集群管理:cluster xxx

5):基於配置(nodes-port.conf)的集群管理

6):ASK 轉向/MOVED 轉向機制.

 

1)redis-cluster架構圖

 

架構細節:

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

(2)節點的fail是通過集群中超過半數的master節點檢測失效時才生效.

(3)客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集群所有節點,連接集群中任何一個可用節點即可

(4)redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->key

 

2) redis-cluster選舉:容錯

(1)選舉過程是集群中所有master參與,如果半數以上master節點與故障節點通信超過(cluster-node-timeout),認為該節點故障,自動觸發故障轉移操作.

(2):什么時候整個集群不可用(cluster_state:fail)? 

    a:如果集群任意master掛掉,且當前master沒有slave.集群進入fail狀態,也可以理解成集群的slot映射[0-16383]不完整時進入fail狀態.

ps : redis-3.0.0.rc1加入cluster-require-full-coverage參數,默認關閉,打開集群兼容部分失敗.

    b:如果集群超過半數以上master掛掉,無論是否有slave集群進入fail狀態.

ps:當集群不可用時,所有對集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤

 

二:redis cluster的使用

忽略。現在基本用單機版Redis,通過master-slave + (Partition 或者 Pre-sharding) 方式來進行。挺好。

 

redis-cluster客戶端的一些坑.

1)cluster環境下slave默認不接受任何讀寫操作,在slave執行readonly命令后,可執行讀操作

2)client端不支持多key操作(mget,mset等),但當keys集合對應的slot相同時支持mget操作見:hash_tag

3)不支持多數據庫,只有一個db,select 0。

4)JedisCluster 沒有針對byte[]的API,需要自己擴展(附件是我加的基於byte[]的BinaryJedisCluster  api)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM