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

文章目录

  • 一、扩容
    • 1.新建两个节点
    • 2.加入集群
    • 3.分配槽位
    • 4.查看分配槽位后的节点信息
    • 5.增加从节点,四主四从完成
  • 二、缩容
    • 1.删除6388端口的从节点
    • 2.分配槽位,将要删除的节点槽位全都分配给一个节点
    • 3.删除6387端口的节点,缩容成功,3主3从
  • 揭晓上一章答案

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

docker学习(十三、Redis主从扩容、缩容)_第1张图片

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

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
docker学习(十三、Redis主从扩容、缩容)_第2张图片
这里看到绿色的部分提示加入成功了~

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

docker学习(十三、Redis主从扩容、缩容)_第3张图片

3.分配槽位

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

docker学习(十三、Redis主从扩容、缩容)_第4张图片
docker学习(十三、Redis主从扩容、缩容)_第5张图片

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节点的槽位仍然保持连续!

docker学习(十三、Redis主从扩容、缩容)_第6张图片

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

docker学习(十三、Redis主从扩容、缩容)_第7张图片
docker学习(十三、Redis主从扩容、缩容)_第8张图片

二、缩容

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

1.删除6388端口的从节点

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

docker学习(十三、Redis主从扩容、缩容)_第9张图片

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

docker学习(十三、Redis主从扩容、缩容)_第10张图片
docker学习(十三、Redis主从扩容、缩容)_第11张图片

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

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

docker学习(十三、Redis主从扩容、缩容)_第12张图片

揭晓上一章答案

如果我把master6挂掉,那slave1会恢复master节点么?
答案:node1会变回master节点,node6变回slave节点
docker学习(十三、Redis主从扩容、缩容)_第13张图片
docker学习(十三、Redis主从扩容、缩容)_第14张图片

你可能感兴趣的:(docker,docker,学习,redis,容器,集群)