詳解Redis Cluster叢集
Redis Cluster是Redis的分散式解決方案,在Redis 3.0版本正式推出的,有效解決了Redis分散式方面的需求。當遇到單機記憶體、併發、流量等瓶頸時,可以採用Cluster架構達到負載均衡的目的。分散式叢集首要解決把整個資料集按照分割槽規則對映到多個節點的問題,即把資料集劃分到多個節點上,每個節點負責整個資料的一個子集。
v 功能介紹
1.0 資料自動分片
叢集中每個節點都會負責一定數量的slot,每個key會對映到一個具體的slot,通過這種方式就可能找到key具體儲存在哪個節點上了。
1.1 提供hash tags功能
通過hash tag功能可以將多個不同key對映到同一個slot上,這樣就能夠提供multi-key操作,hash tag的使用的方式是在key中包含“{}”,這樣只有在“{...}”中字串被用於hash計算。
1.2 自動失效轉移和手動失效轉移
1.3 減少硬體成本和運維成本。
v Redis Cluster目標
高效能
高可用
線性擴容
v 配置Redis Cluster
建立目錄cluster,併為6個例項建立各自的目錄,這6個目錄用來存放6個例項,後面將使用這6個例項組成叢集。3個Master和3個Slave
1.0 建立目錄
mkdir redis-cluster
mkdir 900{1,2,3,4,5,6}
1.1 拷貝6個例項
cp /root/redis-5.0.2/redis.conf /usr/local/bin/redis-cluster/9001
1.2 更新例項配置檔案
具體來說,需要注意下:由於在一臺機器上,因此每個例項應該有不同的埠;同時,每個例項顯然會有自己的存放資料的地方;開啟AOF模式;開啟叢集配置;開啟後臺模式;
1.3 Redis叢集的操作在後文是通過Ruby指令碼來完成的,因此需要安裝Ruby相關的RPM包,以及Redis和Ruby的介面包。
1.3.1 安裝ruby
yum install ruby
1.3.1 安裝rubygems
yum install rubygems
1.4 啟動Redis cluster例項
/root/redis-5.0.2/src/redis-server /usr/local/bin/redis-cluster/9001/redis.conf
通過 netstat -tnulp | grep redis
和 ps -aux | grep redis
檢視是否啟動成功。
1.5 redis-cli建立叢集
./redis-cli --cluster create 10.168.11.116:9001 10.168.11.116:9002 10.168.11.116:9003 10.168.11.116:9004 10.168.11.116:9005 10.168.11.116:9006
注意,redis5.0使用redis-cli作為建立叢集的命令,使用c語言實現,不再使用ruby語言。
1.6 檢查叢集
./redis-cli --cluster check 10.168.11.116:9001
1.7 檢視叢集key、slot、slave分佈資訊
./redis-cli --cluster info 10.168.11.116:9001
1.8 叢集相關命令
CLUSTER INFO 列印叢集的資訊 CLUSTER NODES 列出叢集當前已知的所有節點(node),以及這些節點的相關資訊。 CLUSTER MEET <ip> <port> 將 ip 和 port 所指定的節點新增到叢集當中,讓它成為叢集的一份子。 CLUSTER FORGET <node_id> 從叢集中移除 node_id 指定的節點。 CLUSTER REPLICATE <node_id> 將當前節點設定為 node_id 指定的節點的從節點。 CLUSTER SAVECONFIG 將節點的配置檔案儲存到硬盤裡面。 CLUSTER ADDSLOTS <slot> [slot ...] 將一個或多個槽(slot)指派(assign)給當前節點。 CLUSTER DELSLOTS <slot> [slot ...] 移除一個或多個槽對當前節點的指派。 CLUSTER FLUSHSLOTS 移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。 CLUSTER SETSLOT <slot> NODE <node_id> 將槽 slot 指派給 node_id 指定的節點。 CLUSTER SETSLOT <slot> MIGRATING <node_id> 將本節點的槽 slot 遷移到 node_id 指定的節點中。 CLUSTER SETSLOT <slot> IMPORTING <node_id> 從 node_id 指定的節點中匯入槽 slot 到本節點。 CLUSTER SETSLOT <slot> STABLE 取消對槽 slot 的匯入(import)或者遷移(migrate)。 CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪個槽上。 CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的鍵值對數量。 CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 個 slot 槽中的鍵。 CLUSTER SLAVES node-id 返回一個master節點的slaves 列表
v Cluster測試效果
./redis-cli -c -h 10.168.11.116 -p 9001
其他參考資料:
作者: 請叫我頭頭哥
出處: http://www.cnblogs.com/toutou/
關於作者:專注於基礎平臺的專案開發。如有問題或建議,請多多賜教!
版權宣告:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。
特此宣告:所有評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點選文章右下角一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!