聲明:本文章部分內容來源於網絡 但都進過本人實際操作
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