一,redis cluster命令行
- //集羣(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 槽中的鍵。
這些命令是集羣所獨有的。執行上述命令要先登陸html
- [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
二,添加節點
1,新配置二個測試節點node
- # 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 &
2,添加主節點redis
- # redis-trib.rb add-node 192.168.10.219:6378 192.168.10.219:6379
註釋:sql
192.168.10.219:6378是新增的節點nosql
192.168.10.219:6379集羣任一個舊節點測試
3,添加從節點ui
- # redis-trib.rb add-node --slave --master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2 192.168.10.220:6385 192.168.10.219:6379
註釋:spa
--slave,表示添加的是從節點命令行
--master-id 03ccad2ba5dd1e062464bc7590400441fafb63f2,主節點的node id,在這裏是前面新添加的6378的node id3d
192.168.10.220:6385,新節點
192.168.10.219:6379集羣任一個舊節點
4,從新分配slot
- # 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的話,就比如從某個節點,抽牌。
5,查看一下,集羣狀況
- [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.
三,改變從節點的master
- //查看一下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
四,刪除節點
1,刪除從節點
- # redis-trib.rb del-node 192.168.10.220:6385 '9c240333476469e8e2c8e80b089c48f389827265'
2,刪除主節點
若是主節點有從節點,將從節點轉移到其餘主節點
若是主節點有slot,去掉分配的slot,而後在刪除主節點
- # 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-trib.rb del-node 192.168.10.219:6378 '03ccad2ba5dd1e062464bc7590400441fafb63f2'
新的master節點被刪除了,這樣就回到了,就是這篇文章開頭,尚未添加節點的狀態
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">