在官方文檔Cluster Spec中,做者詳細介紹了Redis集羣爲何要設計成如今的樣子。最核心的目標有三個:php
redis Cluster集羣功能推出已經有一段時間了。在單機版的Redis中,每一個Master之間是沒有任何通訊的,因此咱們通常在Jedis客戶端或者Codis這樣的代理中作Pre-sharding。按照CAP理論來講,單機版的Redis屬於保證CP(Consistency & Partition-Tolerancy)而犧牲A(Availability),也就說Redis可以保證全部用戶看到相同的數據(一致性,由於Redis不自動冗餘數據)和網絡通訊出問題時,暫時隔離開的子系統能繼續運行(分區容忍性,由於Master之間沒有直接關係,不須要通訊),可是不保證某些結點故障時,全部請求都能被響應(可用性,某個Master結點掛了的話,那麼它上面分片的數據就沒法訪問了)。node
有了Cluster功能後,Redis從一個單純的NoSQL內存數據庫變成了分佈式NoSQL數據庫,CAP模型也從CP變成了AP。也就是說,經過自動分片和冗餘數據,Redis具備了真正的分佈式能力,某個結點掛了的話,由於數據在其餘結點上有備份,因此其餘結點頂上來就能夠繼續提供服務,保證了Availability。然而,也正由於這一點,Redis沒法保證曾經的強一致性了。這也是CAP理論要求的,三者只能取其二。mysql
設置3個節點,將enable-cluster 設置爲yes, 修改cluster-config-file nodes-6379.conf,將其設置爲不一樣的文件便可,無需此nodes文件存在。
修改redis.conf配置文件的內容:redis
cluster-enabled yes
cluster-config-file nodes-6379.confsql
其中node-6739.conf並不要求真實存在,只要不一樣的redis實例不相同便可。
而後分別啓動各個redis的實例,而後查看進程: shell
從圖中能夠發現,其中的進程後面都帶有cluster的字樣,標示其爲cluster集羣狀態。
這裏啓動了3個實例: 6379, 6380, 6381.數據庫
這裏通常須要基於redis-cli進入命令行參數,而後輸入cluster meet的命令,進行cluster的註冊:
ubuntu
這裏咱們從6379這個實例登錄,分別註冊6380, 6381兩個節點。註冊完成後,而後查看集羣信息,能夠發現其整個集羣的信息爲3個節點。ruby
建立初始化slot的腳本:bash
>
#!/bin/bash
for i in {1..16383}; do ./src/redis-cli cluster addslots $i; done
在腳本里面總共添加16383個slot。
修改該腳本的執行權限,執行之,便可獲取相應的結果信息。
cluster slots : 查看slots信息
cluster nodes: 查看節點信息
從上面能夠整個集羣的基本情況。
基於命令行來查看信息的設置:
redis-cli -p 6739
redis-cli -c -p 6739
從這裏能夠看懂,在cluster模式下與普通模式下的不一樣,集羣模式下客戶端能夠自動的切換到其餘節點。
正常狀況下的客戶端執行邏輯以下:
各個操做系統的不一樣,安裝方案各有差別,這裏以ubuntu的方式來進行。
src/redis-trib.rb reshard 127.0.0.1:6739
從源節點移動到目標節點
• ./redis-trib.rb reshard 127.0.0.1:6379
• How many slots do you want to move (from 1 to 16384)? 4000 //輸入被遷移的solt的數量
• What is the receiving node ID? //輸入目的地節點的id,執行第一行命
• Please enter all the source node IDs.//輸入被遷移的槽
• Do you want to proceed with the proposed reshard plan (yes/no)? Yes //遷移計劃確認
如何來確認reshard來進行呢?查看命令的日誌便可得知:
redis提供了完整的一套如何進行集羣處理的機制,並利用一致性hash來更好的處理redis的動態調整。
http://www.woaipu.com/shops/zuzhuan/61406http://nanning.xjwy.cn/f/bencandy.php?fid=43&id=117777http://nanning.xjwy.cn/f/bencandy.php?fid=43&id=117890http://nanning.xjwy.cn/f/bencandy.php?fid=43&id=117994http://nanning.xjwy.cn/f/bencandy.php?fid=43&id=118376