1. 程式人生 > >Redis Cluster搭建方法簡介

Redis Cluster搭建方法簡介

轉自:http://blog.sina.com.cn/s/blog_48c95a190101ig6a.html

去年本博主發表了一篇關於Redis Cluster搭建的博文,因為當時沒有找到任何官方的說明文件,所以只能根據Redis主頁上的Redis cluster Specification一步步地摸索出了一種搭建方法,可以說是徹徹底底的野路子。後來自己怕誤人子弟,還很自覺地在原文中對這一點作了說明。後來某位網友發來一篇博文的連結:http://no-fucking-idea.com/blog/2012/04/16/setting-up-redis-cluster/,其中就是介紹如何使用redis原始碼包中的redis-trib.rb工具來實現Redis Cluster的搭建,不僅實現方法異常簡單而且發表時間也早了一年有餘,由此可知自己的那篇博文確實是閉門造車了。最近Redis官網正式推出了支援Redis Cluster的3.0 Beta版,我在官網上也找到了關於Redis Cluster搭建的tutorial,今天按照上面的步驟嘗試了一把,果真是極好的!於是乎趕緊發一篇博文,希望已經被俺前一篇博文毒害的弟兄們早日懸崖勒馬,迴歸正道!     首先,下載支援Redis Cluster的原始碼包,最方便的當然就是直接下載3.0 Beta版,其連結地址為:https://github.com/antirez/redis/archive/3.0.0-beta1.tar.gz。解壓安裝後,對Redis進行配置,主要就是將cluster功能開啟,與Cluster相關的具體配置如下所示。 cluster-enabled yes
cluster-config-file /home/wqd/work/conf/nodes-6379.conf cluster-node-timeout 5000     此外,這次通過執行在同一臺機器上的三個不同Redis例項來搭建Redis Cluster,所以需要準備三個配置檔案,每個配置檔案中設定不同的埠。這裡姑且將這三個配置檔案分別命名為redis-6379.conf、redis-6380.conf和redis-6381.conf,其中的配置也是一樣,像pid檔案、日誌檔案、rdb檔案、aof檔案和叢集配置檔案等都是通過埠號來區分。在完成對配置檔案的修改後,分別啟動三個Redis例項,結果如圖一所示。
Redis <wbr>Cluster搭建方法簡介(續)

圖一 啟動三個Redis例項     其次,通過redis-trib.rb工具構建Redis Cluster。通過以上操作我們已經有了三個獨立執行的Redis例項,彼此之間各自為政,接下來就是redis-trib.rb工具發揮作用的時候了。在執行該工具之前,一些準備工作是必不可少的,其一就是安裝ruby和rubygem,為了方便起見這裡推薦安裝ruby 1.9.2及之後的版本,這些版本已經包含了rubygem,無需單獨安裝,安裝方法這裡就不贅述了。在完成ruby和rubygem的安裝之後,我們還需要為ruby安裝redis庫,安裝命令為:gem install redis。在做完了以上這些準備工作後,我們就可以執行redis-trib.rb這個工具了,圖二給出了該工具在沒有任何引數下的執行結果,其中我們可以瞭解該工具支援的所有功能,這裡就不一一介紹了,官方的tutorial中有詳細的介紹。
Redis <wbr>Cluster搭建方法簡介(續)

圖二 redis-trib.rb工具使用方法     再次,基於三個例項構建Redis Cluster。上面我們已經看到了redis-trib.rb支援的所有子命令了,而其中用於構建Redis Cluster的子命令就是create。create子命令的引數有兩種,host1:port1 ... hostN:portN指定了用於構建Redis Cluster的所有redis例項,而--replicas 則指定了為Redis Cluster中的每個Master節點配備幾個Slave節點。關於後一個引數這裡需要簡單說明一下,那就是Redis Cluster中的節點分為兩種:Master節點和Slave節點,一個Master節點可以擁有若干個Slave節點,Master節點上的資料通過非同步方式與Slave節點實現資料同步,當Master節點因為某種原因退出集群后,Redis Cluster會自動從該Master節點的Slave節點中選擇出一個作為新的Master節點。因此,redis-trib.rb工具的create子命令提供了--args引數來指定叢集中的Master節點擁有幾個Slave節點,譬如使用6個redis例項構建叢集且--args引數值為1,那麼整個叢集就包含三個Master節點和三個Slave節點,每個Master節點都有一個Slave節點。這裡我們只有三個redis例項,所以選擇不為Master節點配備Slave節點,建立叢集的方法和結果如圖三所示,從中可知Redis叢集已經構建成功,其中監聽6379的例項負責儲存0-5460雜湊槽,監聽6380的例項負責儲存5461-10921雜湊槽,監聽6381的例項負責儲存10922-16383雜湊槽。 Redis <wbr>Cluster搭建方法簡介(續)
圖三 通過redis-trib.rb建立Redis Cluster     如果忘記了Redis Cluster的搭建環境,如叢集中有幾個節點,這些節點分別負責儲存哪些雜湊槽,我們可以通過redis-trib.rb工具的check子命令來檢視叢集資訊,該子命令只需要提供叢集中任意redis例項的IP地址和埠號即可,圖四給出了check子命令的執行方法和結果。 Redis <wbr>Cluster搭建方法簡介(續)
圖四 通過redis-trib.rb檢視Redis Cluster     最後,通過redis客戶端實現對Redis Cluster的讀寫。當前,redis客戶端同樣實現了對叢集的支援,但使用方法略有不同,即在啟動的時候需要新增一個-c引數。圖五給出了redis客戶端的使用方法和執行結果,從中可以看到當讀寫Key-Value資料所屬的雜湊槽儲存在別的節點上時,redis客戶端會將資料自動重定向到目標節點上,而不是像之前那樣(即不帶-c引數)返回錯誤並給出目標節點了事。 Redis <wbr>Cluster搭建方法簡介(續)
圖五 通過redis客戶端實現對Redis Cluster讀寫     以上我們簡單介紹了通過redis-trib.rb工具構建Redis Cluster的方法與步驟,關於redis-trib.rb工具實際上還有很多實用的功能沒有介紹,像reshard、add-node、del-node等等,感興趣地話推薦大家還是去閱讀官方的tutorial,其中有詳細的說明和示例。
參考連結:http://no-fucking-idea.com/blog/2012/04/16/setting-up-redis-cluster/ http://redis.io/topics/cluster-tutorial