当前位置: 首页 > news >正文

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微控制器,设计并实现一个简单的无线传感器网络通信方案&#xff0c…...

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、视频监控系统 在网吧内部布置高清摄像头&#xff0…...

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语言变量与常量

跟着肯哥&#xff08;不是我&#xff09;学C语言的变量和常量、跨文件访问、栈空间 栈空间还不清楚&#xff0c;期待明天的课程内容 C变量 变量&#xff08;Variable&#xff09;是用于存储和表示数据值的名称。 主要包括四个环节&#xff1a;定义、初始化、声明、使用 在我刚…...

AI创作系统ChatGPT网站源码/支持DALL-E3文生图/支持最新GPT-4-Turbo模型+Prompt应用

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

二维码智慧门牌管理系统升级,异常门牌聚合解决方案助力高效管理

文章目录 前言一、异常门牌聚合解决方案 前言 在今天的数字化时代&#xff0c;智慧城市已成为发展趋势&#xff0c;其中二维码智慧门牌管理系统扮演着至关重要的角色。通过对门牌信息进行数字化管理&#xff0c;该系统极大提升了城市管理的效率和便捷性。然而&#xff0c;随着…...

【XTDrone Ubuntu20.04】XTDrone+ Ubuntu20.04 + PX4安装

XTDrone仿真平台配置 文章目录 XTDrone仿真平台配置依赖安装 ROS一键安装Marvos安装PX4 安装安装QTGroundControlXTDrone下载安装 环境&#xff1a; VMWare 16.0 Ubuntu 22.04 &#xff08;因为没人配过&#xff09;Ubuntu 20.04 参考文章&#xff1a; 仿真平台基础配置 (yuq…...

河北大学选择ZStack Cube超融合一体机打造实训云平台

河北大学通过云轴科技ZStack Cube超融合一体机构建校园实训云平台&#xff0c;部署测试仅耗时1天&#xff0c;该平台能够更快地为学生提供高性能、高可用的云主机、云存储和云网络服务&#xff1b;同时也能满足日常运维管理要求&#xff0c;为学生提供更好的实训环境。 河北省…...

IDEA远程一键部署SpringBoot到Docker

IDEA是Java开发利器&#xff0c;Spring Boot是Java生态中最流行的微服务框架&#xff0c;docker是时下最火的容器技术&#xff0c;那么它们结合在一起会产生什么化学反应呢&#xff1f; 一、开发前准备 1. Docker安装 可以参考&#xff1a;https://docs.docker.com/install/ 2…...

索引三星结构

三星索引的定义&#xff0c;可以先给我们对索引优化提供一个大概的思路&#xff1a; 满足第1颗星&#xff1a; 取出所有的等值谓词的列&#xff0c;作为索引最开头的列——以任意顺序都可以。 满足第2颗星&#xff1a; 将order by加入到索引列&#xff0c;不要改变这些列的顺…...

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 错误处理…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...