作redis集羣須要注意的幾點是:html
一、Redis 集羣目前處於Alpha測試階段,不過能用,目前新浪和twiter有在用,不過他們的集羣有本身的解決方案,這個本身去google下,twiter已經把他們的方案開源出來了。node
二、測試用例的時候,強烈建議使用六個節點: 其中三個爲主節點, 而其他三個則是各個主節點的從節點。git
三、須要搭建ruby的環境github
4.集羣規範詳細:http://www.redis.cn/topics/cluster-spec.htmlweb
Redis 集羣是一個提供在多個Redis間節點間共享數據的程序集.redis
Redis集羣並不支持處理多個keys的命令,由於這須要在不一樣的節點間移動數據,從而達不到像Redis那樣的性能,在高負載的狀況下可能會致使不可預料的錯誤.shell
Redis 集羣經過分區來提供必定程度的可用性,在實際環境中當某個節點宕機或者不可達的狀況下繼續處理命令.windows
Redis 集羣的優點:ruby
自動分割數據到不一樣的節點上.服務器
整個集羣的部分節點失敗或者不可達的狀況下可以繼續處理命令.
Redis 集羣沒有使用一致性hash, 而是引入了哈希槽的概念.
Redis 集羣有16384個哈希槽,每一個key經過CRC16校驗後對16384取模來決定放置哪一個槽.集羣的每一個節點負責一部分hash槽,舉個例子,好比當前集羣有3個節點,那麼:
節點 A 包含 0 到 5500號哈希槽.
節點 B 包含5501 到 11000 號哈希槽.
節點 C 包含11001 到 16384號哈希槽.
這種結構很容易添加或者刪除節點. 好比若是我想新添加個節點D, 我須要從節點 A, B, C中得部分槽到D上. 若是我像移除節點A,須要將A中得槽移到B和C節點上,而後將沒有任何槽的A節點從集羣中移除便可.
因爲從一個節點將哈希槽移動到另外一個節點並不會中止服務,因此不管添加刪除或者改變某個節點的哈希槽的數量都不會形成集羣不可用的狀態.
咱們的環境仍是以window爲主,因此搭建按照當前的狀況來。個人環境是windows 64位
RubyInstaller下載,這個根據本身系統來,個人是64位的,安裝按照下一步來就好,如圖:
此處全選,不用配置環境變量。
獲取RubyGems,下載最新的rubygems,我當前版本rubygems-2.4.5.(有時候會被牆,多嘗試幾回)。
安裝完成,測試下安裝是否成功。
ruby -v
把下載文件解壓,而後進入目錄,執行:
ruby setup.rb ... gem -v
顯示當前源:
gem sources
添加淘寶的源
gem sources -a http://ruby.taobao.org/
更新source cache
gem sources -u
gem install redis
找到redis執行文件夾,找到redis.conf文件,咱們選擇最少選項的集羣的配置文件。
port 7001 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
cluster-enabled 選項用於開實例的集羣模式, 而 cluster-conf-file 選項則設定了保存節點配置文件的路徑, 默認值爲 nodes.conf.節點配置文件無須人爲修改, 它由 Redis 集羣在啓動時建立, 並在有須要時自動進行更新。
要讓集羣正常運做至少須要三個主節點,不過在剛開始試用集羣功能時, 強烈建議使用六個節點: 其中三個爲主節點, 而其他三個則是各個主節點的從節點。
我使用的cygwin來建立的,命令以下(windows下可視圖建立):
mkdir cluster cd cluster mkdir 7001 7002 7003 7004 7005 7006
最終如圖:
在7001到7006文件夾中,把redis可執行文件(第一篇編譯後的文件夾redis3.0)拷貝到每一個目錄,每一個目錄都須要有redis.conf文件,記得配置內容須要和第一步相同,同時把端口號,改成與文件夾名字相同。
沒有windows下redis3.0執行文件的,點此下載。
進入每一個目錄啓動服務:
cd cluster cd 7001 redis-server.exe redis.conf
其餘幾個目錄同上。
經過使用 Redis 集羣命令行工具 redis-trib , 編寫節點配置文件的工做能夠很是容易地完成: redis-trib
位於 Redis 源碼的 src 文件夾中, 它是一個 Ruby 程序, 這個程序經過向實例發送特殊命令來完成建立新集羣, 檢查集羣, 或者對集羣進行從新分片(reshared)等工做。
點擊下載
記得把redis-trib.rb文件發到cluster目錄下面。
cd cluster redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
這個命令在這裏用於建立一個新的集羣, 選項--replicas 1
表示咱們但願爲集羣中的每一個主節點建立一個從節點。
以後跟着的其餘參數則是這個集羣實例的地址列表,3個master3個slave
redis-trib 會打印出一份預想中的配置給你看, 若是你以爲沒問題的話, 就能夠輸入 yes , redis-trib 就會將這份配置應 用到集羣當中,讓各個節點開始互相通信,最後能夠獲得以下信息:
[OK] All 16384 slots covered
測試 Redis 集羣比較簡單的辦法就是使用 redis-rb-cluster
或者 redis-cli
, 接下來咱們將使用 redis-cli
爲例來進行演示:
cd 7002 redis-cli.exe -c -p 7002 redis 127.0.0.1:7002> set test one -> Redirected to slot [12182] located at 127.0.0.1:7002 OK redis 127.0.0.1:7002> set hello world -> Redirected to slot [866] located at 127.0.0.1:7003 OK redis 127.0.0.1:7002> get test -> Redirected to slot [12182] located at 127.0.0.1:7002 "one" redis 127.0.0.1:7002> get hello -> Redirected to slot [866] located at 127.0.0.1:7003 "world"
edis-cli 對集羣的支持是很是基本的, 因此它老是依靠 Redis 集羣節點來將它轉向(redirect)至正確的節點。咱們能夠看到儲存和獲取的時候,數據都不在一個服務器上的。
下一篇咱們將討論如何增長節點,移除節點,從新切片,以及如何使用redis-rb-cluster .