docker 部署Redis集群(三主三从,以及扩容、缩容)
1:创建6个redis容器
docker run -d --name redis01 --net host --privileged=true -v /opt/redis/redis01:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis02 --net host --privileged=true -v /opt/redis/redis02:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis03 --net host --privileged=true -v /opt/redis/redis03:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis04 --net host --privileged=true -v /opt/redis/redis04:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis05 --net host --privileged=true -v /opt/redis/redis05:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis06 --net host --privileged=true -v /opt/redis/redis06:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
2:查看容器运行状态
[root@localhost redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2230e0a5bf5c redis:6.0.8 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds redis06
0bc9f5da8601 redis:6.0.8 "docker-entrypoint.s…" 9 seconds ago Up 8 seconds redis05
e1431fb85072 redis:6.0.8 "docker-entrypoint.s…" 9 seconds ago Up 8 seconds redis04
01c2ff5e0090 redis:6.0.8 "docker-entrypoint.s…" 9 seconds ago Up 8 seconds redis03
88892f9eb9db redis:6.0.8 "docker-entrypoint.s…" 9 seconds ago Up 9 seconds redis02
a13bfc991867 redis:6.0.8 "docker-entrypoint.s…" 44 seconds ago Up 43 seconds redis01
3:创建redis 3主3从集群
[root@localhost ~]# docker exec -it redis01 /bin/bash--cluster-replicas 1 表示为每个master,创建一个slave节点
root@localhost:/data# redis-cli --cluster create 192.168.1.31:6381 192.168.1.31:6382 192.168.1.31:6383 192.168.1.31:6384 192.168.1.31:6385 192.168.1.31:6386 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.1.31:6385 to 192.168.1.31:6381
Adding replica 192.168.1.31:6386 to 192.168.1.31:6382
Adding replica 192.168.1.31:6384 to 192.168.1.31:6383
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384replicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385replicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386replicates cd9a9149593770a920258bf75e1235ca4b904cd5
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
4:查看集群状态
root@localhost:/data# redis-cli -p 6381
127.0.0.1:6381> keys *
(empty array)
127.0.0.1:6381> 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:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:300
cluster_stats_messages_pong_sent:310
cluster_stats_messages_sent:610
cluster_stats_messages_ping_received:305
cluster_stats_messages_pong_received:300
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:610127.0.0.1:6381> cluster nodes
cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381@16381 myself,master - 0 1700124241000 1 connected 0-5460
eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384@16384 slave 89228357317c6b7d6850fffa2f0819085def1a2f 0 1700124242176 2 connected
89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382@16382 master - 0 1700124242000 2 connected 5461-10922
5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386@16386 slave cd9a9149593770a920258bf75e1235ca4b904cd5 0 1700124240000 1 connected
d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385@16385 slave c2436c65625e1d74d8ea5bde328df04699d494e9 0 1700124239000 3 connected
c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383@16383 master - 0 1700124241149 3 connected 10923-16383可以看出主从关系如下:
192.168.1.31:6381 -> 192.168.1.31:6386
192.168.1.31:6382 -> 192.168.1.31:6384
192.168.1.31:6383 -> 192.168.1.31:6385
5:存储数据,必须连接redis集群,不能连接单节点
root@localhost:/data# redis-cli -p 6381 -c
127.0.0.1:6381> keys *
(empty array)
127.0.0.1:6381> set k1 v1
(error) MOVED 12706 192.168.1.31:6383
127.0.0.1:6381> set k2 v2
OK
127.0.0.1:6381> set k3 v3
OK
127.0.0.1:6381> set k4 v4
(error) MOVED 8455 192.168.1.31:6382
127.0.0.1:6381> 127.0.0.1:6381> set k1 v-cluster1
-> Redirected to slot [12706] located at 192.168.1.31:6383
OK
192.168.1.31:6383> set k2 v-cluster2
-> Redirected to slot [449] located at 192.168.1.31:6381
OK
192.168.1.31:6381> set k3 v3
OK
192.168.1.31:6381> set k4 v4
-> Redirected to slot [8455] located at 192.168.1.31:6382
OK
6:主从容错切换迁移
6.1:查看集群信息
root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 5461 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 5462 slots | 1 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 4 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
6.2:停止6381,redis01
[root@localhost redis]# docker stop redis01
6.3:查看集群状态
[root@localhost redis]# docker exec -it redis02 /bin/bash
root@localhost:/data# redis-cli -p 6382 -c查看集群状态:
127.0.0.1:6382> cluster nodes
eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384@16384 slave 89228357317c6b7d6850fffa2f0819085def1a2f 0 1700133223366 2 connected
5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386@16386 master - 0 1700133224000 7 connected 0-5460
d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385@16385 slave c2436c65625e1d74d8ea5bde328df04699d494e9 0 1700133224388 3 connected
89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382@16382 myself,master - 0 1700133223000 2 connected 5461-10922
cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381@16381 master,fail - 1700133123340 1700133116000 1 disconnected
c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383@16383 master - 0 1700133225412 3 connected 10923-16383192.168.1.31:6386,成为master了,192.168.1.31:6381宕机了。# 可以正常查询数据
127.0.0.1:6382> get k1
-> Redirected to slot [12706] located at 192.168.1.31:6383
"v-cluster1"
192.168.1.31:6383> get k2
-> Redirected to slot [449] located at 192.168.1.31:6386
"v-cluster2"
192.168.1.31:6386> get k3
"v3"
192.168.1.31:6386> get k4
-> Redirected to slot [8455] located at 192.168.1.31:6382
"v4"
6.4:启动redis01
[root@localhost redis]# docker start redis01
6.5:查看redis 集群状况
[root@localhost redis]# docker exec -it redis02 /bin/bash
root@localhost:/data# redis-cli -p 6382 -c
127.0.0.1:6382> cluster nodes
eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384@16384 slave 89228357317c6b7d6850fffa2f0819085def1a2f 0 1700134213000 2 connected
5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386@16386 master - 0 1700134213004 7 connected 0-5460
d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385@16385 slave c2436c65625e1d74d8ea5bde328df04699d494e9 0 1700134214020 3 connected
89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382@16382 myself,master - 0 1700134211000 2 connected 5461-10922
cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381@16381 slave 5b40728c470dac59556f7b51866e590e9038bbd9 0 1700134211000 7 connected
c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383@16383 master - 0 1700134212000 3 connected 10923-163836381成为slave,6386是master
6.6:恢复成原来的 6381位master,6386为slave,只需要重启redis06
docker stop redis06
docker start redis06
6.7:检查集群状况
root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 5461 slots | 1 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 5461 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 4 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
7:主从扩容,增加一个节点6387为master,一个节点6388为slave
docker run -d --name redis07 --net host --privileged=true -v /opt/redis/redis07:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis08 --net host --privileged=true -v /opt/redis/redis08:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388[root@localhost redis]# docker exec -it redis07 /bin/bash
将新增的6387作为master节点加入集群
6387就是将要作为master新增节点
6381就是原来集群节点里面的领导
root@localhost:/data# redis-cli --cluster add-node 192.168.1.31:6387 192.168.1.31:6381
>>> Adding node 192.168.1.31:6387 to cluster 192.168.1.31:6381
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.1.31:6387 to make it join the cluster.
[OK] New node added correctly.root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 5461 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 0 keys | 0 slots | 0 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 5461 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots: (0 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.重新分配槽号:
root@localhost:/data# redis-cli --cluster reshard 192.168.1.31:6381
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-6826],[10923-12287] (8192 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots: (0 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[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? f32e0d7320635a5873beb3594927ed6eea318976 #6387的节点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 #从其他3个主节点拿槽位root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 1 keys | 4096 slots | 0 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covere可以看到6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以3家各匀出来一部分,从6381、6382、6383三个旧节点,分别匀出1364个槽位给新节点6387给6387 添加slave 6388,f32e0d7320635a5873beb3594927ed6eea318976是6387的编号
root@localhost:/data# redis-cli --cluster add-node 192.168.1.31:6388 192.168.1.31:6387 --cluster-slave --cluster-master-id f32e0d7320635a5873beb3594927ed6eea318976
>>> Adding node 192.168.1.31:6388 to cluster 192.168.1.31:6387
>>> Performing Cluster Check (using node 192.168.1.31:6387)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.1.31:6388 to make it join the cluster.
Waiting for the cluster to join
>>> Configure node as replica of 192.168.1.31:6387.
[OK] New node added correctly.root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
S: a8fd323608979efd31be1222d281db20b250820b 192.168.1.31:6388slots: (0 slots) slavereplicates f32e0d7320635a5873beb3594927ed6eea318976
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
8:主从缩容,将6387、6388踢出集群,恢复3主3从
1:先清除从节点6388
root@localhost:/data# redis-cli --cluster del-node 192.168.1.31:6388 a8fd323608979efd31be1222d281db20b250820b
>>> Removing node a8fd323608979efd31be1222d281db20b250820b from cluster 192.168.1.31:6388
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.
root@localhost:/data#
root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 1 keys | 4096 slots | 0 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
检查发现6388被删除了,只剩下7台redis 2:清理出来的槽号重新分配
将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
root@localhost:/data# redis-cli --cluster reshard 192.168.1.31:6381
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[1365-5460] (4096 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[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? cd9a9149593770a920258bf75e1235ca4b904cd5 #6381节点id,用来接收空出来的槽号
Source node #1: f32e0d7320635a5873beb3594927ed6eea318976 #6387节点id,被删除的那个
Source node #2: doneMoving slot 12284 from f32e0d7320635a5873beb3594927ed6eea318976Moving slot 12285 from f32e0d7320635a5873beb3594927ed6eea318976Moving slot 12286 from f32e0d7320635a5873beb3594927ed6eea318976Moving slot 12287 from f32e0d7320635a5873beb3594927ed6eea318976
Do you want to proceed with the proposed reshard plan (yes/no)? yes
Moving slot 12284 from 192.168.1.31:6387 to 192.168.1.31:6381:
Moving slot 12285 from 192.168.1.31:6387 to 192.168.1.31:6381:
Moving slot 12286 from 192.168.1.31:6387 to 192.168.1.31:6381:
Moving slot 12287 from 192.168.1.31:6387 to 192.168.1.31:6381:root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 8192 slots | 1 slaves.
192.168.1.31:6387 (f32e0d73...) -> 0 keys | 0 slots | 0 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-6826],[10923-12287] (8192 slots) master1 additional replica(s)
M: f32e0d7320635a5873beb3594927ed6eea318976 192.168.1.31:6387slots: (0 slots) master
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.6387的4096个槽位都给6381了,6381有8192个槽位了3:再删除6387
root@localhost:/data# redis-cli --cluster del-node 192.168.1.31:6387 f32e0d7320635a5873beb3594927ed6eea318976
>>> Removing node f32e0d7320635a5873beb3594927ed6eea318976 from cluster 192.168.1.31:6387
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.4:恢复成3主3从
root@localhost:/data# redis-cli --cluster check 192.168.1.31:6381
192.168.1.31:6381 (cd9a9149...) -> 2 keys | 8192 slots | 1 slaves.
192.168.1.31:6383 (c2436c65...) -> 1 keys | 4096 slots | 1 slaves.
192.168.1.31:6382 (89228357...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.31:6381)
M: cd9a9149593770a920258bf75e1235ca4b904cd5 192.168.1.31:6381slots:[0-6826],[10923-12287] (8192 slots) master1 additional replica(s)
S: eac210d52a6c6ddeb9556ffa1820d13a89828264 192.168.1.31:6384slots: (0 slots) slavereplicates 89228357317c6b7d6850fffa2f0819085def1a2f
S: d8f0436ada2c423bc07d8cba38461eb3bb00ca3a 192.168.1.31:6385slots: (0 slots) slavereplicates c2436c65625e1d74d8ea5bde328df04699d494e9
S: 5b40728c470dac59556f7b51866e590e9038bbd9 192.168.1.31:6386slots: (0 slots) slavereplicates cd9a9149593770a920258bf75e1235ca4b904cd5
M: c2436c65625e1d74d8ea5bde328df04699d494e9 192.168.1.31:6383slots:[12288-16383] (4096 slots) master1 additional replica(s)
M: 89228357317c6b7d6850fffa2f0819085def1a2f 192.168.1.31:6382slots:[6827-10922] (4096 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
相关文章:
docker 部署Redis集群(三主三从,以及扩容、缩容)
1:创建6个redis容器 docker run -d --name redis01 --net host --privilegedtrue -v /opt/redis/redis01:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381 docker run -d --name redis02 --net host --privilegedtrue -v /opt/redis/redis0…...
JavaScript 浮点数运算的精度问题及解决
JavaScript 浮点数运算的精度问题及解决 在 JavaScript 中整数和浮点数都属于 Number 数据类型,当浮点数做数学运算的时候,你经常会发现一些问题,举几个例子: 0.1 0.2 0.30000000000000004 console.log(0.1 0.2) 0.3000000…...
基于STM32的无线传感器网络(WSN)通信方案设计与实现
无线传感器网络(Wireless Sensor Network,简称WSN)是由一组分布式的无线传感器节点组成的网络,用于监测和收集环境中的各类物理信息。本文将基于STM32微控制器,设计并实现一个简单的无线传感器网络通信方案,…...
Flink和Kafka连接时的精确一次保证
Flink写入Kafka两阶段提交 端到端的 exactly-once(精准一次) kafka -> Flink -> kafka 1)输入端 输入数据源端的 Kafka 可以对数据进行持久化保存,并可以重置偏移量(offset) 2)Flink内…...
UE4动作游戏实例RPG Action解析三:实现效果,三连击Combo,射线检测,显示血条,火球术
一、三连Combo 实现武器三连击,要求: 1.下一段Combo可以随机选择, 2.在一定的时机才能再次检测输入 3. 等当前片段播放完才播放下一片段 1.1、蒙太奇设置 通过右键-新建蒙太奇片段,在蒙太奇里创建三个片段,并且移除相关连接,这样默认只会播放第一个片段 不同片段播…...
Linux/麒麟系统上部署Vue+SpringBoot前后端分离项目
目录 1. 前端准备工作 1.1 在项目根目录创建两份环境配置文件 1.2 环境配置 2. 后端准备工作 2.1 在项目resources目录创建两份环境配置文件 2.2 环境配置 3. 前后端打包 3.1 前端打包 3.2 后端打包 4、服务器前后端配置及部署 4.1 下载、安装、启动Nginx 4.2 前端项目部署…...
STM32在FreeRTOS下的us延时
STM32在FreeRTOS下的us延时 前言 freeRTOS下跑SPI时需要微秒级别的延时,但是freeRTOS只提供了毫秒级的,记录一下实现us延时的方法。 前期分析 最简单的方式就是开个定时器或者干脆直接计算一下用nop做都可以实现us延时,但是显然还是使用滴…...
软件测试/人工智能丨深入人工智能软件测试:PyTorch引领新时代
在人工智能的浪潮中,软件测试的角色变得愈发关键。本文将介绍在人工智能软件测试中的一些关键技术,以及如何借助PyTorch深度学习框架来推动测试的创新与升级。 PyTorch:深度学习的引擎 PyTorch作为一种开源的深度学习框架,为软件…...
Android 当中的 Fragment 协作解耦方式
Android 当中的 Fragment 协作解耦方式 文章目录 Android 当中的 Fragment 协作解耦方式第一章 前言介绍第01节 遇到的问题第02节 绘图说明 第二章 核心代码第01节 代理人接口第02节 中间人 Activity第03节 开发者A第04节 开发者B第05节 测试类 第一章 前言介绍 第01节 遇到的…...
城市网吧视频智能监控方案,实现视频远程集中监控
网吧环境较为复杂,电脑设备众多且人员流动性大,极易发生人员或消防事故,亟需改变,TSINGSEE青犀AI智能网吧视频监管方案可以帮助实现对网吧环境和用户活动的实时监控和管理。 1、视频监控系统 在网吧内部布置高清摄像头࿰…...
C#WPF视频播放器实例
本文实例演示C#WPF视频播放器 实例如下: 修改mainwindow的代码 <Windowx:Class="PlayerDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xml…...
【uniapp】Google Maps
话不多说 直接上干货 提前申请谷歌地图账号一、新建地图 使用h5获取当前定位或者使用三方uniapp插件 var coords ""navigator.geolocation.getCurrentPosition(function(position) {coords {lat: position.coords.latitude,lng: position.coords.longitude};lats …...
C语言变量与常量
跟着肯哥(不是我)学C语言的变量和常量、跨文件访问、栈空间 栈空间还不清楚,期待明天的课程内容 C变量 变量(Variable)是用于存储和表示数据值的名称。 主要包括四个环节:定义、初始化、声明、使用 在我刚…...
AI创作系统ChatGPT网站源码/支持DALL-E3文生图/支持最新GPT-4-Turbo模型+Prompt应用
一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...
二维码智慧门牌管理系统升级,异常门牌聚合解决方案助力高效管理
文章目录 前言一、异常门牌聚合解决方案 前言 在今天的数字化时代,智慧城市已成为发展趋势,其中二维码智慧门牌管理系统扮演着至关重要的角色。通过对门牌信息进行数字化管理,该系统极大提升了城市管理的效率和便捷性。然而,随着…...
【XTDrone Ubuntu20.04】XTDrone+ Ubuntu20.04 + PX4安装
XTDrone仿真平台配置 文章目录 XTDrone仿真平台配置依赖安装 ROS一键安装Marvos安装PX4 安装安装QTGroundControlXTDrone下载安装 环境: VMWare 16.0 Ubuntu 22.04 (因为没人配过)Ubuntu 20.04 参考文章: 仿真平台基础配置 (yuq…...
河北大学选择ZStack Cube超融合一体机打造实训云平台
河北大学通过云轴科技ZStack Cube超融合一体机构建校园实训云平台,部署测试仅耗时1天,该平台能够更快地为学生提供高性能、高可用的云主机、云存储和云网络服务;同时也能满足日常运维管理要求,为学生提供更好的实训环境。 河北省…...
IDEA远程一键部署SpringBoot到Docker
IDEA是Java开发利器,Spring Boot是Java生态中最流行的微服务框架,docker是时下最火的容器技术,那么它们结合在一起会产生什么化学反应呢? 一、开发前准备 1. Docker安装 可以参考:https://docs.docker.com/install/ 2…...
索引三星结构
三星索引的定义,可以先给我们对索引优化提供一个大概的思路: 满足第1颗星: 取出所有的等值谓词的列,作为索引最开头的列——以任意顺序都可以。 满足第2颗星: 将order by加入到索引列,不要改变这些列的顺…...
rust 笔记 高级错误处理
文章目录 错误处理组合器or() 和 and()or_else() 和 and_then()filtermap() 和 map_err()map_or() 和 map_or_else()ok_or() and ok_or_else() 自定义错误类型错误转换 From 特征 归一化不同的错误类型Box<dyn Error>自定义错误类型 简化错误处理thiserroranyhow 错误处理…...
RAG知识库落地秘籍:从零到一打造企业智能问答系统,提升效率与用户体验!
有幸参与并主导实施的第二个AI 大模型应用项目就是“AI知识库”或者叫“智能问答”,也是接下来要介绍的内容。整篇文章将围绕着以下几个议题进行展开,内容上更侧重概念理解、落地方法路径、实施效果保障以及经验总结,不会在这里探讨具体技术细…...
“title“: “Java全栈开发面试实录:从基础到实战的深度对话“,
{ "title": "Java全栈开发面试实录:从基础到实战的深度对话", "content": "# Java全栈开发面试实录:从基础到实战的深度对话\n\n## 一、开场白\n\n面试官:你好,欢迎来参加我们公司的Java全栈开…...
4大场景解决散热难题:开源散热管理工具全攻略
4大场景解决散热难题:开源散热管理工具全攻略 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanCont…...
节水灌溉物联网监控管理系统方案
对于部分水资源匮乏的地区,节水灌溉系统的应用对农业发展具有重要意义。该系统通过实时监测农田土壤湿度和气象条件,结合预设的灌溉计划和作物生长需求,精准控制灌溉设备的开启或关闭,有效避免了水资源浪费,显著提高了…...
CosyVoice语音克隆应用案例:为短视频配音、制作个性化语音问候消息
CosyVoice语音克隆应用案例:为短视频配音、制作个性化语音问候消息 最近帮朋友做短视频账号,发现一个挺头疼的问题:每次拍完视频,找配音特别麻烦。要么自己录,口音重还费时间;要么用AI配音,声音…...
Canvas动画实战:用requestAnimationFrame打造会飘动的云朵与彩虹
1. Canvas动画基础入门 第一次接触Canvas动画时,我被它强大的绘图能力惊艳到了。记得当时为了做一个简单的太阳升起动画,硬是用setInterval写了上百行代码,结果动画卡得像幻灯片一样。后来才发现,原来浏览器早就为我们准备了更专业…...
Obsidian移动端深度评测:安卓/iOS同步技巧+5个必装生产力插件
Obsidian移动端深度评测:安卓/iOS同步技巧5个必装生产力插件 在移动办公场景下,Obsidian作为一款强大的知识管理工具,其跨平台能力与插件生态为商务人士和学生群体提供了独特的价值。本文将深入解析Obsidian在Android和iOS平台的核心差异&…...
如何用NanoMsg的6种通信模式搞定分布式系统开发?附代码示例
如何用NanoMsg的6种通信模式构建高可靠分布式系统?实战代码解析 在分布式系统开发中,通信模式的选择往往决定了整个架构的扩展性和可靠性。NanoMsg作为轻量级高性能通信库,提供了6种经过验证的通信模式,每种都对应着特定的应用场景…...
百度网盘提速全攻略:从限速对抗到效能优化的实战指南
百度网盘提速全攻略:从限速对抗到效能优化的实战指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 诊断限速瓶颈:从协议层破解速度封印 原理图解&am…...
FanControl完全掌控:5大核心优势实现电脑风扇智能调节
FanControl完全掌控:5大核心优势实现电脑风扇智能调节 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…...
