一、Redis cluster 分布式集群
1.什么是Redis cluster
1.Redis集群是一个可以在多个Redis节点之间进行数据共享的设施(installation)。
2.Redis集群不支持那些需要同时处理多个键的Redis命令,因为执行这些命令需要在多个Redis节点之间移动数据,并且在高负载的情况下,这些命令将降低Redis集群的性能,并导致不可预测的行为。
3.Redis集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法4.Redis集群有将数据自动切分(split )到多个节点的能力。
2.redis cluster的特点
1.解决了redis资源利用率的问题
2.在多分片节点中,将16384个槽位,均匀分布到多个分片节点中
2.存数据时,将key做crc16(key),然后和16384进行取模,得出槽位值(0-16383之间)
3.根据计算得出的槽位值,找到相对应的分片节点的主节点,存储到相应槽位上
4.如果客户端当时连接的节点不是将来要存储的分片节点,分片集群会将客户端连接切换至真正存储节点进行数据存储
5.在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof功能,同时当主节点down,实现类似于sentinel的自动failover的功能。
3.槽的概念
1.集群中,所有节点一共拥有16384个槽位
2.槽位的序号是 0 - 16383 ,序号不重要,槽位的数量才重要
3.每一个槽位获取数据的几率是一样的
4.Redis Cluster故障转移
1.在集群里面,节点会对其他节点进行下线检测。
2.当一个主节点下线时,集群里面的其他主节点负责对下线主节点进行故障移。
3.换句话说,集群的节点集成了下线检测和故障转移等类似 Sentinel 的功能。
4.因为 Sentinel 是一个独立运行的监控程序,而集群的下线检测和故障转移等功能是集成在节点里面的,它们的运行模式非常地不同,所以尽管这两者的功能很相似,但集群的实现没有重用 Sentinel 的代码。
二、Redis cluster 分布式集群搭建
1.环境准备
节点
主机
IP
端口
节点1
db01
10.0.0.51
6379,6380
节点2
db02
10.0.0.52
6379,6380
节点3
db03
10.0.0.53
6379,6380
2.创建多节点目录
[root@db01 ~]
[root@db02 ~]
[root@db03 ~]
[root@db01 ~]
[root@db02 ~]
[root@db03 ~]
3.配置redis
[root@db01 ~]
daemonize yes
bind 172.16.1.51 127.0.0.1
port 6379
pidfile "/server/redis/6379/redis.pid"
logfile "/server/redis/6379/redis.log"
protected-mode no
dir "/server/redis/6379"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
[root@db02 ~]
daemonize yes
bind 172.16.1.52 127.0.0.1
port 6379
pidfile "/server/redis/6379/redis.pid"
logfile "/server/redis/6379/redis.log"
protected-mode no
dir "/server/redis/6379"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
[root@db03 ~]
daemonize yes
bind 172.16.1.53 127.0.0.1
port 6379
pidfile "/server/redis/6379/redis.pid"
logfile "/server/redis/6379/redis.log"
protected-mode no
dir "/server/redis/6379"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
[root@db01 ~]
daemonize yes
bind 172.16.1.51 127.0.0.1
port 6380
pidfile "/server/redis/6380/redis.pid"
logfile "/server/redis/6380/redis.log"
protected-mode no
dir "/server/redis/6380"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
[root@db02 ~]
daemonize yes
bind 172.16.1.52 127.0.0.1
port 6380
pidfile "/server/redis/6380/redis.pid"
logfile "/server/redis/6380/redis.log"
protected-mode no
dir "/server/redis/6380"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
[root@db02 ~]
daemonize yes
bind 172.16.1.53 127.0.0.1
port 6380
pidfile "/server/redis/6380/redis.pid"
logfile "/server/redis/6380/redis.log"
protected-mode no
dir "/server/redis/6380"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
4.启动所有节点的redis
[root@db01 ~]
[root@db02 ~]
[root@db03 ~]
[root@db01 ~]
[root@db02 ~]
[root@db03 ~]
[root@db01 ~]
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 15593/redis-server
tcp 0 0 172.16.1.51:6379 0.0.0.0:* LISTEN 15593/redis-server
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 18602/redis-server
tcp 0 0 172.16.1.51:6380 0.0.0.0:* LISTEN 18602/redis-server
5.关联所有节点
127.0.0.1:6380> CLUSTER NODES
1cc8546c6bd57ca54659418c28bf589cb8b3cdba :6380 myself,master - 0 0 0 connected
127.0.0.1:6380> CLUSTER MEET 172.16.1.52 6379
OK
127.0.0.1:6380> CLUSTER NODES
fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379 master - 0 1594343695689 0 connected
df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380 master - 0 1594343696193 5 connected
12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379 master - 0 1594343695183 1 connected
c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380 master - 0 1594343694982 4 connected
9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379 master - 0 1594343694176 2 connected
1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380 myself,master - 0 0 3 connected
127.0.0.1:6380>
127.0.0.1:6379> CLUSTER info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_sent:164579
cluster_stats_messages_received:164579
127.0.0.1:6379>
6.分配槽位
第一个节点 db01: 0 - 5460 5461个槽位
第二个节点 db02: 5461 - 10922 5462个槽位
第三个节点 db03: 10923 - 16383 5461个槽位
127.0.0.1:6379> CLUSTER ADDSLOTS 0
OK
127.0.0.1:6379> CLUSTER ADDSLOTS 1
OK
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
OK
[root@db02 ~]
OK
[root@db03 ~]
OK
127.0.0.1:6379> CLUSTER NODES
9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379 master - 0 1594344707485 2 connected 5461-10922
1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380 master - 0 1594344705479 3 connected
12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379 myself,master - 0 0 1 connected 0-5460
df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380 master - 0 1594344705970 5 connected
c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380 master - 0 1594344706477 4 connected
fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379 master - 0 1594344706477 0 connected 10923-16383
127.0.0.1:6379> 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:5
cluster_my_epoch:1
cluster_stats_messages_sent:167782
cluster_stats_messages_received:167782
7.测试插入数据
172.16.1.51:6379> set k1 v1
(error) MOVED 12706 172.16.1.53:6379
172.16.1.51:6379> set k2 v2
OK
[root@db01 ~]
172.16.1.53:6379> set k1 v1
OK
[root@db01 ~]
172.16.1.51:6379> set k1 v1
-> Redirected to slot [12706] located at 172.16.1.53:6379
OK
[root@db01 ~]
[root@db01 ~]
172.16.1.51:6379> DBSIZE
(integer ) 3347
[root@db01 ~]
172.16.1.52:6379> DBSIZE
(integer ) 3317
[root@db01 ~]
172.16.1.53:6379> DBSIZE
(integer ) 3343
8.将副本加入集群(做主从)
[root@db01 ~]
172.16.1.51:6379> CLUSTER NODES
9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379 master - 0 1594347511554 2 connected 5461-10922
1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380 master - 0 1594347510553 3 connected
12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379 myself,master - 0 0 1 connected 0-5460
df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380 master - 0 1594347511050 5 connected
c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380 master - 0 1594347509538 4 connected
fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379 master - 0 1594347510043 0 connected 10923-16383
172.16.1.51 6380 是 172.16.1.52 6379 的从库
172.16.1.52 6380 是 172.16.1.53 6379 的从库
172.16.1.53 6380 是 172.16.1.51 6379 的从库
[root@db01 ~]
172.16.1.51:6380> CLUSTER REPLICATE 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2
OK
172.16.1.52:6380> CLUSTER REPLICATE fd8dfff8331d493e35324580d35a4ec39c0bd39f
OK
[root@db03 ~]
172.16.1.53:6380> CLUSTER REPLICATE 12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0
OK
172.16.1.51:6379> CLUSTER NODES
9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379 master - 0 1594348232192 2 connected 5461-10922
1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380 slave 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 0 1594348231187 3 connected
12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379 myself,master - 0 0 1 connected 0-5460
df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380 slave 12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 0 1594348233204 5 connected
c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380 slave fd8dfff8331d493e35324580d35a4ec39c0bd39f 0 1594348231689 4 connected
fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379 master - 0 1594348232695 0 connected 10923-16383
9.错误演示
[root@db01 ~]
[root@db01 ~]
172.16.1.52:6379> CLUSTER NODES
df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380 master - 0 1594348466336 6 connected 0-5460
12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379 master,fail - 1594348365644 1594348363122 1 disconnected
c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380 slave fd8dfff8331d493e35324580d35a4ec39c0bd39f 0 1594348466335 4 connected
9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379 myself,master - 0 0 2 connected 5461-10922
fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379 master - 0 1594348467348 0 connected 10923-16383
1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380 slave,fail 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 1594348365644 1594348365138 3 disconnected
10.恢复节点
[root@db01 ~]
[root@db01 ~]
172.16.1.52:6379> CLUSTER NODES
df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380 master - 0 1594348537278 6 connected 0-5460
12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379 slave df20862e40a495fb4c7c03362a4d0e2f64a072f5 0 1594348535762 6 connected
c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380 slave fd8dfff8331d493e35324580d35a4ec39c0bd39f 0 1594348536669 4 connected
9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379 myself,master - 0 0 2 connected 5461-10922
fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379 master - 0 1594348536770 0 connected 10923-16383
1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380 slave 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 0 1594348537789 3 connected
三、Redis Cluster 集群管理操作(核心)
1.安装集群插件
[root@db01 ~]
[root@db01 ~]
*** CURRENT SOURCES ***
http://rubygems.org/
[root@db01 ~]
http://mirrors.aliyun.com/rubygems/ added to sources
[root@db01 ~]
http://rubygems.org/ removed from sources
[root@db01 ~]
[root@db01 ~]
Successfully installed redis-3.3.3
1 gem installed
Installing ri documentation for redis-3.3.3...
Installing RDoc documentation for redis-3.3.3...
2.工具参数
[root@db01 ~]
1.create
2.check
3.info
4.fix
5.reshard
6.rebalance
7.add-node
8.del-node
9.set-timeout
10.call
11.import
3.添加节点
1)配置两个实例
[root@db03 ~]
daemonize yes
bind 172.16.1.53 127.0.0.1
port 6382
pidfile "/server/redis/6382/redis.pid"
logfile "/server/redis/6382/redis.log"
protected-mode no
dir "/server/redis/6382"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
[root@db03 ~]
daemonize yes
bind 172.16.1.53 127.0.0.1
port 6381
pidfile "/server/redis/6381/redis.pid"
logfile "/server/redis/6381/redis.log"
protected-mode no
dir "/server/redis/6381"
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
2)启动新节点
[root@db03 ~]
[root@db03 ~]
3)将新节点加入集群
[root@db01 ~]
127.0.0.1:6379> CLUSTER MEET 172.16.1.53 6381
OK
127.0.0.1:6379> CLUSTER MEET 172.16.1.53 6382
OK
127.0.0.1:6379> CLUSTER NODES
fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379 master - 0 1594349678935 0 connected 10923-16383
df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380 master - 0 1594349680449 6 connected 0-5460
c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380 slave fd8dfff8331d493e35324580d35a4ec39c0bd39f 0 1594349679443 4 connected
2aa0dc6d488df4647d27aa9a69dcfd823bcd5f27 172.16.1.53:6382 master - 0 1594349680955 1 connected
1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380 slave 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 0 1594349679444 3 connected
8a07bc32d3b260fb9a1f23c0da5a054a614850ee 172.16.1.53:6381 master - 0 1594349679942 0 connected
9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379 master - 0 1594349680953 2 connected 5461-10922
12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379 myself,slave df20862e40a495fb4c7c03362a4d0e2f64a072f5 0 0 1 connected
4)重新分配槽位
[root@db01 ~]
[ERR] Sorry, can't connect to node 172.16.1.52:6379
解决办法:
#修改redis-trib.rb 脚本,配置上密码
[root@db01 /usr/local/redis-3.2.12/src]# find / -name ' *redis-trib.rb*' -type f
/usr/local/redis-3.2.12/src/redis-trib.rb
[root@db01 /usr/local/redis-3.2.12/src]# vim /usr/local/redis-3.2.12/src/redis-trib.rb
@r = Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60,:password => ' 123')
[root@db01 ~]
>>> Performing Cluster Check (using node 172.16.1.53:6381)
M: 8a07bc32d3b260fb9a1f23c0da5a054a614850ee 172.16.1.53:6381
slots: (0 slots) master
0 additional replica(s)
M: fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379
slots:5461-10922 (5462 slots) master
1 additional replica(s)
M: df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: 2aa0dc6d488df4647d27aa9a69dcfd823bcd5f27 172.16.1.53:6382
slots: (0 slots) master
0 additional replica(s)
S: 1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380
slots: (0 slots) slave
replicates 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2
S: c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380
slots: (0 slots) slave
replicates fd8dfff8331d493e35324580d35a4ec39c0bd39f
S: 12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379
slots: (0 slots) slave
replicates df20862e40a495fb4c7c03362a4d0e2f64a072f5
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)?4096
What is the receiving node ID? 8a07bc32d3b260fb9a1f23c0da5a054a614850ee
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
Do you want to proceed with the proposed reshard plan (yes /no)? yes
[root@db01 ~]
172.16.1.51:6379> CLUSTER NODES
fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379 master - 0 1594350449548 0 connected 12288-16383
df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380 master - 0 1594350448844 6 connected 1365-5460
c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380 slave fd8dfff8331d493e35324580d35a4ec39c0bd39f 0 1594350449044 4 connected
2aa0dc6d488df4647d27aa9a69dcfd823bcd5f27 172.16.1.53:6382 master - 0 1594350448544 1 connected
1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380 slave 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 0 1594350450050 3 connected
8a07bc32d3b260fb9a1f23c0da5a054a614850ee 172.16.1.53:6381 master - 0 1594350450051 7 connected 0-1364 5461-6826 10923-12287
9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379 master - 0 1594350448544 2 connected 6827-10922
12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379 myself,slave df20862e40a495fb4c7c03362a4d0e2f64a072f5 0 0 1 connected
5)添加新节点的从库(副本)
[root@db03 ~]
172.16.1.53:6382> CLUSTER REPLICATE 8a07bc32d3b260fb9a1f23c0da5a054a614850ee
OK
172.16.1.53:6382> CLUSTER NODES
9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379 master - 0 1594350621966 2 connected 6827-10922
8a07bc32d3b260fb9a1f23c0da5a054a614850ee 172.16.1.53:6381 master - 0 1594350621966 7 connected 0-1364 5461-6826 10923-12287
fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379 master - 0 1594350623477 0 connected 12288-16383
c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380 slave fd8dfff8331d493e35324580d35a4ec39c0bd39f 0 1594350622468 0 connected
df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380 master - 0 1594350623987 6 connected 1365-5460
2aa0dc6d488df4647d27aa9a69dcfd823bcd5f27 172.16.1.53:6382 myself,slave 8a07bc32d3b260fb9a1f23c0da5a054a614850ee 0 0 1 connected
12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379 slave df20862e40a495fb4c7c03362a4d0e2f64a072f5 0 1594350623988 6 connected
1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380 slave 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 0 1594350622971 2 connected
172.16.1.53:6382>
4.删除节点
1)移除删除节点的槽位
[root@db01 ~]
>>> Performing Cluster Check (using node 172.16.1.53:6381)
M: 8a07bc32d3b260fb9a1f23c0da5a054a614850ee 172.16.1.53:6381
slots: (0 slots) master
0 additional replica(s)
M: fd8dfff8331d493e35324580d35a4ec39c0bd39f 172.16.1.53:6379
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2 172.16.1.52:6379
slots:5461-10922 (5462 slots) master
1 additional replica(s)
M: df20862e40a495fb4c7c03362a4d0e2f64a072f5 172.16.1.53:6380
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: 2aa0dc6d488df4647d27aa9a69dcfd823bcd5f27 172.16.1.53:6382
slots: (0 slots) master
0 additional replica(s)
S: 1cc8546c6bd57ca54659418c28bf589cb8b3cdba 172.16.1.51:6380
slots: (0 slots) slave
replicates 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2
S: c388120fc6ba88d71ea24cc8348352c1414a3c8c 172.16.1.52:6380
slots: (0 slots) slave
replicates fd8dfff8331d493e35324580d35a4ec39c0bd39f
S: 12f234dc3ffba8e7c1aa4a2664d779b62f99b9b0 172.16.1.51:6379
slots: (0 slots) slave
replicates df20862e40a495fb4c7c03362a4d0e2f64a072f5
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)?4096
What is the receiving node ID? 9e56ddcb1700c5117d8d5ccb90134bf5855a33e2
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
Do you want to proceed with the proposed reshard plan (yes /no)? yes
[root@db01 ~]
2)删除节点
[root@db01 ~]
>>> Removing node 8a07bc32d3b260fb9a1f23c0da5a054a614850ee from cluster 172.16.1.53:6381
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
[root@db01 ~]
>>> Removing node 2aa0dc6d488df4647d27aa9a69dcfd823bcd5f27 from cluster 172.16.1.53:6382
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
[root@db01 ~]
5.槽位分配时故障
1)模拟故障
[root@db01 ~]
[root@db01 ~]
>>> Check for open slots...
[WARNING] Node 172.16.1.53:6379 has slots in importing state (1384).
[WARNING] Node 172.16.1.53:6380 has slots in migrating state (1384).
[WARNING] The following slots are open: 1384
2)修复故障
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
>>> Performing Cluster Check (using node 172.16.1.51:6379)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@db01 ~]
3)重新分配槽位
[root@db01 ~]
>>> Performing Cluster Check (using node 172.16.1.51:6379)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
*** No rebalancing needed! All nodes are within the 2.0% threshold.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现