Redis集羣配置以及踩坑實例

聲明:本文章部分內容來源於網絡 但都進過本人實際操作


Redis集羣簡介:

 

redis-cluster架構圖

redis-cluster投票:容錯

 


 

架構細節:

(1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.

(2)節點的fail是通過集羣中超過半數的節點檢測失效時才生效.

(3)客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集羣所有節點,連接集羣中任何一個可用節點即可

(4)redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value

Redis 集羣中內置了 16384 個哈希槽,當需要在 Redis 集羣中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點

我的Redis版本3.2

搭建:

開啓集羣模式配置Redis.conf

每個機器開啓集羣模式

cluster-enabled yes

 

若是在服務器上的Redis需要設置requirepass

 

 

集羣模式下不能使用selaveof命令

 

需要6個redis實例。

需要運行在不同的端口7001-7006

 

第一步:創建6個redis實例,每個實例運行在不同的端口。需要修改redis.conf配置文件。配置文件中還需要把cluster-enabled yes前的註釋去掉。

第二步:啓動每個redis實例。

第三步:使用ruby腳本搭建集羣。

沒有ruby? 

Yum -y install ruby

yum install rubygems

創建集羣

//創建集羣

./redis-trib.rb create --replicas 1 192.168.25.133:6379 192.168.25.133:6380 192.168.25.133:6381 192.168.25.133:6389 192.168.25.133:6390 192.168.25.133:6391
//連接集羣

[root@tracker_ip bin1]# ./redis-cli -h 192.168.25.133 -p 6379 -c

 


集羣客戶端命令(redis-cli -c -p port
 

集羣

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 :將節點的配置文件保存到硬盤裏面。

(slot)

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 槽中的鍵  

 


集羣過程中遇到致命的問題:

問題1:槽被佔用:

解決:

1:flushall   

2:cluster reset

3:rm -rf redis/rdb/*

問題2:一直提示Waiting for the cluster to join....

請看此文章:https://blog.csdn.net/zenmin2015/article/details/78020609


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章