docker学习(十三、Redis主从扩容、缩容)

发布时间:2023年12月22日

docker搭建Redis集群相关知识:
docker学习(九、分布式存储亿级数据知识)
docker学习(十、搭建redis集群,三主三从)
docker学习(十一、Redis集群存储数据方式)
docker学习(十二、Redis主从容错迁移)
docker学习(十三、Redis主从扩容、缩容)

一、扩容

主从关系依然是:
master1 – > slave6
master2 – > slave4
master3 – > slave5

新增两个节点,变成四主四从,思考槽位如何分配?

1.新建两个节点

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share-node-7:/data redis --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share-node-8:/data redis --cluster-enabled yes --appendonly yes --port 6388

在这里插入图片描述

目前只是启动容器,并没有加入集群~~

2.加入集群

docker exec -it redis-node-7 /bin/bash
# 将6387节点加入到6381节点
redis-cli --cluster add-node 172.27.64.169:6387 172.27.64.169:6381 

master1 – > slave6 0~5460
master2 – > slave4 5461~10922
master3 – > slave5 10923~16383
在这里插入图片描述
这里看到绿色的部分提示加入成功了~

# 检查集群的情况,发现6387暂无槽位
redis-cli --cluster check 172.27.64.169:6381

在这里插入图片描述

3.分配槽位

# 重新分配槽位(rehash)
redis-cli --cluster reshard 172.27.64.169:6381
# 16384个槽位,分配4台master,平均分的话就是每台4096个槽位
4096
# 要分配的id
这里我的是6387的id
all
yes

在这里插入图片描述
在这里插入图片描述

4.查看分配槽位后的节点信息

redis-cli --cluster check 172.27.64.169:6381

可以看到6387节点已经分配了槽位,而且每个主节点都是4096个节点。
原槽位分配:
master1 – > slave6 [0 ~ 5460]
master2 – > slave4 [5461 ~ 10922]
master3 – > slave5 [10923 ~ 16383]
新槽位分配:
master1 – > slave6 [1365 ~ 5460]
master2 – > slave4 [6827 ~ 10922]
master3 – > slave5 [12288 ~ 16383]
master7 [0 ~ 1364] [5461 ~ 6828] [10923 ~ 12287]
新加入的主节点分配槽位是从其他全部主节点中分别拿出一部分组成的4096个槽位。
其他master节点的槽位仍然保持连续!

在这里插入图片描述

5.增加从节点,四主四从完成

# 给主节点增加从节点
redis-cli --cluster add-node 172.27.64.169:6388 172.27.64.169:6387 --cluster-slave --cluster-master-id  主节点6387的id
# 查看节点信息
redis-cli --cluster check 172.27.64.169:6381

在这里插入图片描述
在这里插入图片描述

二、缩容

思考:
1.缩容的时候槽位节点如何分配?是恢复之前的分配方式,还是集中给一个节点?
2.缩容的时候先删除主节点,还是从节点?

1.删除6388端口的从节点

# del-node删除节点,ip:端口,节点id
redis-cli --cluster del-node 172.27.64.169:6388 ffec21f910b0f3bf2caaef014fcefb22f0d2a28f

在这里插入图片描述

2.分配槽位,将要删除的节点槽位全都分配给一个节点

# 重新分配槽位
redis-cli --cluster reshard 172.27.64.169:6381
# 这里直接将4096个槽位都给6381节点。How many slots do you want to move? 
4096
# 6381节点接收4096槽位,所以用6381节点的id,What is the receiving node ID?
78335b6f29ab57a9bd87ce6138df4b02c6bcffc0
# 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: 
# 6387节点来提供4096个槽位,所以这块放6387的id
62cf51a0ce6c038840f01ba8cc6d43b5d42a37d8
done
yes

在这里插入图片描述
在这里插入图片描述

3.删除6387端口的节点,缩容成功,3主3从

redis-cli --cluster del-node 172.27.64.169:6387 62cf51a0ce6c038840f01ba8cc6d43b5d42a37d8

在这里插入图片描述

揭晓上一章答案

如果我把master6挂掉,那slave1会恢复master节点么?
答案:node1会变回master节点,node6变回slave节点
在这里插入图片描述
在这里插入图片描述

文章来源:https://blog.csdn.net/qq_35716085/article/details/135125327
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。