個人學習筆記,謝絕轉載!!!
原文:https://www.cnblogs.com/wshenjin/p/15466843.html
--cluster help
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,可以逗號隔開從多個源節點完成遷移,參數是nodeid
#還可以直接傳遞--from all,這樣源節點就是集群的所有節點,不傳遞該參數,則會在遷移過程中提示用戶輸入
--cluster-to <arg> #slot需要遷移的目的節點nodeid,目的節點只能填寫一個,不傳遞該參數,則會在遷移過程中提示用戶輸入
--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.
集群操作
創建一個三主節點不帶從節點的集群:
shell# redis6-cli --user admin --pass *** --cluster create \
192.168.1.21:6379 192.168.1.22:6379 192.168.1.23:6379
創建一個三節點帶從節點的集群:
shell# redis6-cli --user admin --pass *** --cluster create --cluster-replicas 1 \
192.168.1.21:6379 192.168.1.22:6379 192.168.1.23:6379 \
192.168.1.24:6379 192.168.1.25:6379 192.168.1.26:6379
- --cluster-replicas N,N表示每個主節點需要N個從節點
添加主節點:
add-node new_host:new_port existing_host:existing_port
shell# redis-cli -h 192.168.1.21 -p 6379 --user admin --pass *** --cluster add-node \
192.168.1.24:6379 192.168.1.21:6379
給主節點添加從節點:
add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id
shell# redis-cli -h 192.168.1.21 -p 6379 --user admin --pass *** --cluster add-node \
192.168.1.24:6379 192.168.1.21:6379 --cluster-slave --cluster-master-id \
035f9cb03ead48c7a35a6247834d397be7442b71
- 不指定 --cluster-master-id參數,新從節點任意分配給一個主節點
刪除節點:
可以直接刪除從節點,已經分配slot的主節點無法刪除
shell# redis-cli --user admin --pass *** --cluster del-node 192.168.1.21:6379 \
2afbf631cb81139c7cce6fc4b06263c697ff31ea
shell# redis-cli --user admin --pass *** --cluster del-node 192.168.1.21:6379 \
f15857c88d90af3885b8be8edfc7a8905b28334a
>>> Removing node f15857c88d90af3885b8be8edfc7a8905b28334a from cluster 192.168.1.21:6379
[ERR] Node 192.168.1.23:6379 is not empty! Reshard data away and try again.
查看集群信息:
shell# redis-cli --user admin --pass *** --cluster info 192.168.1.21:6379
集群檢查:
shell# redis-cli --user admin --pass *** --cluster check 192.168.1.21:6379
- --cluster-search-multiple-owners , 檢查是否有槽同時被分配給了多個節點
集群修復:
shell# redis-cli --user admin --pass *** --cluster fix 192.168.1.21:6379
- --cluster-search-multiple-owners , 修復槽的重復分配問題
- --cluster-fix-with-unreachable-masters
設置集群超時
shell# redis-cli --user admin --pass *** --cluster set-timeout 192.168.1.21:6379 10000
集群中執行命令:
shell# redis-cli --user admin --pass *** --cluster call 192.168.1.21:6379 config get maxmemory
-
--cluster-only-masters
-
--cluster-only-replicas
集群備份:
shell# redis-cli --user admin --pass *** --cluster backup 192.168.1.21:6379 /data/backup/
- 怎么從備份文件中恢復????
slot操作
手動遷移slot:
shell# redis-cli --user admin --pass *** --cluster reshard 192.168.1.21:6379 \
--cluster-from 035f9cb03ead48c7a35a6247834d397be7442b71 \
--cluster-to 6120f24e60e4f8a11df8fc7e9a50c2a3711abf5f \
--cluster-slots 100 --cluster-yes --cluster-pipeline 10 --cluster-replace
- --cluster-from
, 需要從哪些源節點上遷移slot,可以逗號隔開從多個源節點完成遷移,傳遞的是節點的nodeid。可以直接傳遞 --from all,這樣源節點就是集群的所有節點,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。 - --cluster-to
, slot需要遷移的目的節點的node id,目的節點只能填寫一個,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。 - --cluster-slots
, 需要遷移的slot數量,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。 - --cluster-yes , 指定遷移時的確認輸入
- --cluster-timeout
, 設置migrate命令的超時時間 - --cluster-pipeline
, 定義cluster getkeysinslot命令一次取出的key數量,不傳的話使用默認值為10 - --cluster-replace , 是否直接replace到目標節點
平衡各個節點的slot數量:
shell# redis-cli --user admin --pass *** --cluster rebalance 192.168.1.21:6379
- --cluster-weight <node1=w1...nodeN=wN> , 指定集群節點的權重
- --cluster-use-empty-masters , 設置可以讓沒有分配slot的主節點參與,默認不允許
- --cluster-timeout
, 設置migrate命令的超時時間 - -cluster-simulate , 模擬rebalance操作,不會真正執行遷移操作
- --cluster-pipeline
, 定義cluster getkeysinslot命令一次取出的key數量,默認值為10 - --cluster-threshold
, 遷移的slot閾值超過threshold,執行rebalance操作 - --cluster-replace , 是否直接replace到目標節點
從其他實例導數據到集群:
shell# redis-cli --user admin --pass *** --cluster import 192.168.1.21:6379 \
--cluster-from 127.0.0.1:6004 --cluster-from-user admin --cluster-from-pass *** --cluster-replace
- --cluster-from
,將指定實例的數據導入到集群 - --cluster-from-user , 用戶
- --cluster-from-pass , 密碼
- --cluster-copy ,migrate時指定copy
- --cluster-replace ,migrate時指定replace