詳解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 減少硬件成本和運維成本。

vRedis 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}

詳解Redis Cluster集群

1.1 拷貝6個實例

cp /root/redis-5.0.2/redis.conf /usr/local/bin/redis-cluster/9001

詳解Redis Cluster集群

1.2 更新實例配置文件

詳解Redis Cluster集群

具體來說,需要注意下:由於在一台機器上,因此每個實例應該有不同的端口;同時,每個實例顯然會有自己的存放數據的地方;開啟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

詳解Redis Cluster集群

通過netstat -tnulp | grep redisps -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

詳解Redis Cluster集群

注意,redis5.0使用redis-cli作為創建集群的命令,使用c語言實現,不再使用ruby語言。

詳解Redis Cluster集群

1.6 檢查集群

./redis-cli --cluster check 10.168.11.116:9001

詳解Redis Cluster集群

1.7 查看集群key、slot、slave分布信息

./redis-cli --cluster info 10.168.11.116:9001

詳解Redis Cluster集群

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 列表

vCluster測試效果

./redis-cli -c -h 10.168.11.116 -p 9001

詳解Redis Cluster集群

其他參考資料:


作  者:請叫我頭頭哥
出  處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM