//集羣(cluster) CLUSTER INFO 打印集羣的信息 CLUSTER NODES 列出集羣當前已知的全部節點(node),以及這些節點的相關信息。 //節點(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)。 //鍵 (key) CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪一個槽上。 CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的鍵值對數量。 CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 個 slot 槽中的鍵。 這些命令是集羣所獨有的。執行上述命令要先登陸 [root@manage redis]# redis-cli -c -p 6382 -h 192.168.10.220 //登陸 192.168.10.220:6382> cluster info //查看集羣狀況 cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:8 cluster_my_epoch:4 cluster_stats_messages_sent:82753 cluster_stats_messages_received:82754
# cd /etc/redis //新增配置 # cp redis-6379.conf redis-6378.conf && sed -i "s/6379/6378/g" redis-6378.conf # cp redis-6382.conf redis-6385.conf && sed -i "s/6382/6385/g" redis-6385.conf //啓動 # redis-server /etc/redis/redis-6385.conf > /var/log/redis/redis-6385.log 2>&1 & # redis-server /etc/redis/redis-6378.conf > /var/log/redis/redis-6378.log 2>&1 &
# redis-trib.rb add-node 192.168.10.219:6378 192.168.10.219:6379 註釋: 192.168.10.219:6378是新增的節點 192.168.10.219:6379集羣任一個舊節點
# redis-trib.rb add-node --slave --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.220:6385 192.168.10.219:6379 註釋: --slave,表示添加的是從節點 --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2,主節點的node id,在這裏是前面新添加的6378的node id 192.168.10.220:6385,新節點 192.168.10.219:6379集羣任一個舊節點
# redis-trib.rb reshard 192.168.10.219:6378 //下面是主要過程 How many slots do you want to move (from 1 to 16384)? 1000 //設置slot數1000 What is the receiving node ID? 03ccad2ba5dd1e062464bc7590400441fafb63f2 //新節點node id Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. Source node #1:all //表示所有節點從新洗牌 Do you want to proceed with the proposed reshard plan (yes/no)? yes //確認從新分 新增長的主節點,是沒有slots的, M: 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.219:6378 slots:0-332,5461-5794,10923-11255 (0 slots) master 主節點若是沒有slots的話,存取數據就都不會被選中。 能夠把分配的過程理解成打撲克牌,all表示你們從新洗牌;輸入某個主節點的node id,而後在輸入done的話,就比如從某個節點,抽牌。
[root@slave2 redis]# redis-trib.rb check 192.168.10.219:6379 Connecting to node 192.168.10.219:6379: OK Connecting to node 192.168.10.220:6385: OK Connecting to node 192.168.10.219:6378: OK Connecting to node 192.168.10.220:6382: OK Connecting to node 192.168.10.220:6383: OK Connecting to node 192.168.10.219:6380: OK Connecting to node 192.168.10.219:6381: OK Connecting to node 192.168.10.220:6384: OK >>> Performing Cluster Check (using node 192.168.10.219:6379) M: 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 192.168.10.219:6379 slots:5795-10922 (5128 slots) master 1 additional replica(s) S: 9c240333476469e8e2c8e80b089c48f389827265 192.168.10.220:6385 slots: (0 slots) slave replicates 03ccad2ba5dd1e062464bc7590400441fafb63f2 M: 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.219:6378 slots:0-332,5461-5794,10923-11255 (1000 slots) master 1 additional replica(s) M: 19b042c17d2918fade18a4ad2efc75aa81fd2422 192.168.10.220:6382 slots:333-5460 (5128 slots) master 1 additional replica(s) M: b2c50113db7bd685e316a16b423c9b8abc3ba0b7 192.168.10.220:6383 slots:11256-16383 (5128 slots) master 1 additional replica(s) S: 6475e4c8b5e0c0ea27547ff7695d05e9af0c5ccb 192.168.10.219:6380 slots: (0 slots) slave replicates 19b042c17d2918fade18a4ad2efc75aa81fd2422 S: 1ee01fe95bcfb688a50825d54248eea1e6133cdc 192.168.10.219:6381 slots: (0 slots) slave replicates b2c50113db7bd685e316a16b423c9b8abc3ba0b7 S: 9a2a1d75b8eb47e05eee1198f81a9edd88db5aa1 192.168.10.220:6384 slots: (0 slots) slave replicates 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
//查看一下6378的從節點 # redis-cli -p 6378 cluster nodes | grep slave | grep 03ccad2ba5dd1e062464bc7590400441fafb63f2 //將6385加入到新的master # redis-cli -c -p 6385 -h 192.168.10.220 192.168.10.220:6385> cluster replicate 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 //新master的node id OK 192.168.10.220:6385> quit //查看新master的slave # redis-cli -p 6379 cluster nodes | grep slave | grep 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052
# redis-trib.rb del-node 192.168.10.220:6385 '9c240333476469e8e2c8e80b089c48f389827265'
若是主節點有從節點,將從節點轉移到其餘主節點
若是主節點有slot,去掉分配的slot,而後在刪除主節點node
# redis-trib.rb reshard 192.168.10.219:6378 //取消分配的slot,下面是主要過程 How many slots do you want to move (from 1 to 16384)? 1000 //被刪除master的全部slot數量 What is the receiving node ID? 5d8ef5a7fbd72ac586bef04fa6de8a88c0671052 //接收6378節點slot的master Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. Source node #1:03ccad2ba5dd1e062464bc7590400441fafb63f2 //被刪除master的node-id Source node #2:done Do you want to proceed with the proposed reshard plan (yes/no)? yes //取消slot後,reshard
新增master節點後,也進行了這一步操做,當時是分配,如今去掉。反着的。redis
# redis-trib.rb del-node 192.168.10.219:6378 '03ccad2ba5dd1e062464bc7590400441fafb63f2'
新的master節點被刪除了,這樣就回到了,就是這篇文章開頭,尚未添加節點的狀態測試