Redis Cluster 在5.0之后取消了ruby腳本 redis-trib.rb的支持(手動命令行添加集群的方式不變),集合到redis-cli里,避免了再安裝ruby的相關環境。直接使用redis-clit的參數--cluster 來取代
一. 命令行
redis-cli --cluster help Cluster Manager Commands: create host1:port1 ... hostN:portN #創建集群 --cluster-replicas <arg> #從節點個數 check host:port #檢查集群 --cluster-search-multiple-owners #檢查是否有槽同時被分配給了多個節點 info host:port #查看集群狀態 fix host:port #修復集群 --cluster-search-multiple-owners #修復槽的重復分配問題 reshard host:port #指定集群的任意一節點進行遷移slot,重新分slots --cluster-from <arg> #需要從哪些源節點上遷移slot,可從多個源節點完成遷移,以逗號隔開,傳遞的是節點的node id,還可以直接傳遞--from all,這樣源節點就是集群的所有節點,不傳遞該參數的話,則會在遷移過程中提示用戶輸入 --cluster-to <arg> #slot需要遷移的目的節點的node id,目的節點只能填寫一個,不傳遞該參數的話,則會在遷移過程中提示用戶輸入 --cluster-slots <arg> #需要遷移的slot數量,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。 --cluster-yes #指定遷移時的確認輸入 --cluster-timeout <arg> #設置migrate命令的超時時間 --cluster-pipeline <arg> #定義cluster getkeysinslot命令一次取出的key數量,不傳的話使用默認值為10 --cluster-replace #是否直接replace到目標節點 rebalance host:port #指定集群的任意一節點進行平衡集群節點slot數量 --cluster-weight <node1=w1...nodeN=wN> #指定集群節點的權重 --cluster-use-empty-masters #設置可以讓沒有分配slot的主節點參與,默認不允許 --cluster-timeout <arg> #設置migrate命令的超時時間 --cluster-simulate #模擬rebalance操作,不會真正執行遷移操作 --cluster-pipeline <arg> #定義cluster getkeysinslot命令一次取出的key數量,默認值為10 --cluster-threshold <arg> #遷移的slot閾值超過threshold,執行rebalance操作 --cluster-replace #是否直接replace到目標節點 add-node new_host:new_port existing_host:existing_port #添加節點,把新節點加入到指定的集群,默認添加主節點 --cluster-slave #新節點作為從節點,默認隨機一個主節點 --cluster-master-id <arg> #給新節點指定主節點 del-node host:port node_id #刪除給定的一個節點,成功后關閉該節點服務 call host:port command arg arg .. arg #在集群的所有節點執行相關命令 set-timeout host:port milliseconds #設置cluster-node-timeout import host:port #將外部redis數據導入集群 --cluster-from <arg> #將指定實例的數據導入到集群 --cluster-copy #migrate時指定copy --cluster-replace #migrate時指定replace help For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
二. 節點操作
1. 創建集群主節點 redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381 2. 創建集群主從節點 /redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381 192.168.163.132:6382 192.168.163.132:6383 192.168.163.132:6384 --cluster-replicas 1 --cluster-replicas為數字,1代表每個主節點需要一個從節點 這種方式不能手動的指定主節點, 所以需要的話,先執行創建主節點, 然后再添加從節點 3. 新增集群主節點 redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379 為指定集群添加節點, 需要先鏈接到集群的任意一個節點IP(192.168.163.132:6379 ), 再將新節點添加, 要求前面放置新增的節點 4. 添加集群從節點 redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379 --cluster-slave --cluster-master-id 117457eab5071954faab5e81c3170600d5192270 將6382節點添加到6379這個集群中, 並當做node_id為117457eab5071954faab5e81c3170600d5192270的從節點 如果不指定--cluster-master-id則會隨機分配到任意一個主節點 5. 刪除節點 redis-cli --cluster del-node 192.168.163.132:6384 f6a6957421b80409106cb36be3c7ba41f3b603ff 指定ip,端口和node_id來刪除一個節點, 從節點可以直接刪除, 主節點不能直接刪除 刪除之后, 該節點會被shutdown 當刪除掉的節點重新起來之后不能自動的加入到集群中,, 但其和主的復制是正常的, 如果想要再次加入集群, 需要先在該節點執行cluster reset, 在使用add-node進行添加 6. 檢查集群 redis-cli --cluster check 192.168.163.132:6384 --cluster-search-multiple-owners 任意鏈接一個集群節點, 進行集群狀態檢查 7.集群信心查看 redis-cli --cluster info 192.168.163.132:6384 8. 修復集群 redis-cli --cluster fix 192.168.163.132:6384 --cluster-search-multiple-owners 修復集群和槽的重復分配問題 9. 設置集群的超時時間 redis-cli --cluster set-timeout 192.168.163.132:6382 10000 連接集群中的任意節點來設置集群的超時時間參數: cluster-node-timeout 10. 集群中執行相關命令 redis-cli --cluster call 192.168.163.132:6381 config set requirepass cc redis-cli -a cc --cluster call 192.168.163.132:6381 config set masterauth cc redis-cli -a cc --cluster call 192.168.163.132:6381 config rewrite
三. 遷移相關
1. 在線遷移slot :在線把集群的一些slot從集群原來slot節點遷移到新的節點,即可以完成集群的在線橫向擴容和縮容。有2種方式進行遷移 1) 根據提示進行操作 直接連接到集群的任意一節點 redis-cli -a cc --cluster reshard 192.168.163.132:6379 2) 根據參數進行操作 redis-cli -a cc --cluster reshard 192.168.163.132:6379 --cluster-from 117457eab5071954faab5e81c3170600d5192270 --cluster-to 815da8448f5d5a304df0353ca10d8f9b77016b28 --cluster-slots 10 --cluster-yes --cluster-timeout 5000 --cluster-pipeline 10 --cluster-replace 連接到集群的任意一節點來對指定節點指定數量的slot進行遷移到指定的節點。 2. 平衡slot 1)平衡集群中各個節點的slot數量 redis-cli -a cc --cluster rebalance 192.168.163.132:6379 2)根據集群中各個節點設置的權重等平衡slot數量(不執行,只模擬) redis-cli -a cc --cluster rebalance --cluster-weight 117457eab5071954faab5e81c3170600d5192270=5 815da8448f5d5a304df0353ca10d8f9b77016b28=4 56005b9413cbf225783906307a2631109e753f8f=3 --cluster-simulate 192.168.163.132:6379
3)新增加的節點,需要進行槽點平衡
redis-cli -a cc --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 172.16.59.92.7008
3. 導入集群 redis-cli --cluster import 192.168.163.132:6379 --cluster-from 192.168.163.132:9021 --cluster-replace 外部Redis實例(9021)導入到集群中的任意一節點
注意點:
- Redis cluster最低要求是3個主節點
