不同於master-salve 或 哨兵模式 cluster與他們最大的區別就是 前兩種是全量存儲 內存消耗大,且存在木桶效應而 cluster集群則是分佈式存儲 即每台Redis存儲不同的內容。
redis-cluster被設計為一共有16384個hash slot可用,每個master分得一部分的slot 其分佈演算法為:【hash_slot = crc16(key) mod 16384】 若有{}則取{}的可用key,否則整個可以是可用key。叢集至少要3主3從,且每個實例使用不同的設定檔。
所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位協定優化傳輸速度和頻寬。
節點的fail是透過叢集中超過半數的節點偵測失效時才生效。
客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接叢集所有節點,連接叢集中任何一個可用節點即可。
redis-cluster把所有的實體節點映射到[0-16383]slot上,cluster 負責維護nodeslotvalue
#redis-cluster投票:容錯
1、投票過程是集群中所有master參與,如果半數以上master節點與master節點通信超時(cluster-node-timeout),認為當前master節點掛掉.
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,達到讀寫分離。
更多redis知識請關注redis入門教學欄位。
以上是redis cluster叢集介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!