Docker环境Redis集群扩缩容

基于哈希槽实现

Redis集群的搭建

在 Docker 中创建 6 个 Redis 的容器实例.
格式如下:

docker run -d --name=redis-node1 \
--net host --privileged=true \
-v /data/redis/share/redis-node-1:/data \
redis:6.0.8 --cluster-enabled yes \
--appendonly yes --port 6381

创建好容器后随便进入其中之一, 调用如下命令为这6台容器构建集群关系

redis-cli --cluster create \
ip地址:6381 \
ip地址:6382 \
ip地址:6383 \
ip地址:6384 \
ip地址:6385 \
ip地址:6386 \
--cluster-replicas 1

在这里插入图片描述会智能化分配, 在决定好分配方案后, 没有问题输入yes即可.
搭建好后, 可调用如下命令查看集群状态

redis-cli --cluster check ip:6381

此处的6381填写其他结点端口也可以, 这个6381相当于是一个定位, 通过这个端口找到其所在的集群

主从扩容案例

在上文搭建的集群时3主3从集群, 现在希望扩容为4主4从集群
这就需要再创建两个结点, 我这里将其端口设置为6387、6388
第一步:将6387作为主节点加入到集群
进入redis容器实例
调用如下命令

redis-cli --cluster add-node ip:6387 \
ip:6381

此时638虽加入结点, 但还没有槽位
第二步: 重新分配槽位

redis-cli --cluster reshard 192.168.35.131:6381

输入完命令后会问你三个问题:
① 每个分配多少个槽位?
因为 4 个主节点, 采用 AA 分配, 所以是 16384/4=4096个
② 分配给机器的ID?
此处填写6387结点的ID
③ 从哪台机器上分配给6387?
此处填写 all

这里的分配模式是, 从其余结点上截取一些槽位分配给6387, 这样的好处就在于不用像以前一样, 每次扩缩容都需要重新洗牌, 极大的减少成本.
第三步: 为主节点6387添加从结点6388
这里直接调用如下命令即可

redis-cli --cluster add-node ip:要添加的slave端口(6388) \
ip:添加到的master端口(6387) \
--cluster-slave --cluster-master-id 新主节点ID(6387的ID)

集群信息

主从缩容案例

此处以删除6387与6388为例子, 将6387持有的结点平均分配回其他结点
嫌平均分配比较麻烦, 也可以直接分配给一个结点
第一步: 从集群中先将从结点6388删除

redis-cli --cluster del-node ip:从机端口 从机节点ID

第二步: 将6387的槽位分配给其他结点
6387 目前持有的槽位是4096
分配给其他结点的槽位可以是 1365 + 1366 +1365
在 Redis 容器实例中调用如下命令

redis-cli --cluster reshard ip:6381 

问题:
① 分配多少个槽位
1365
② 接收槽位的ID
此处填写6381的ID
③ 分配模式
输入6387的ID
done
处理好后, 按照此方法处理分配给其余两个master结点

都分配好后, 查看集群信息, 看是否将6387的槽位都分配出去了

第三步: 删除6387结点

redis-cli --cluster del-node ip:端口 6387的结点id

使用命令总结

建立Redis集群容器实例

docker run -d --name=redis-node1 \
--net host --privileged=true \
-v /data/redis/share/redis-node-1:/data \
redis:6.0.8 --cluster-enabled yes \
--appendonly yes --port 6381

搭建集群

redis-cli --cluster create \
ip地址:6381 \
ip地址:6382 \
ip地址:6383 \
ip地址:6384 \
ip地址:6385 \
ip地址:6386 \
--cluster-replicas 1

查看集群信息

redis-cli --cluster check ip:端口

将容器实例作为master结点加入已有集群

redis-cli --cluster add-node 192.168.35.131:6387 \
192.168.35.131:6381
redis-cli --cluster reshard 192.168.35.131:6381

为某一主节点添加从节点(也是将某结点作为从节点加入集群)

redis-cli --cluster add-node ip:要添加的slave端口(6388) \
ip:添加到的master端口(6387) \
--cluster-slave --cluster-master-id 新主节点ID(6387的ID)
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值