Docker搭建3主3从Redis集群

演示只用一台虚拟机,多机记得把对应ip给换了

1.docker启动六台容器实例

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

docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382

docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383

docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384

docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385

docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

  • --net host:使用默认宿主机的ip和端口
  • --cluster-enabled:开启redis集群
  • --appendonly:开启持久化

 2.进入任意一台容器实例来构建集群关系,以第一台为例

docker exec -it redis-node-1 /bin/bash

然后执行

redis-cli --cluster create 192.168.101.21:6381 192.168.101.21:6382 192.168.101.21:6383 192.168.101.21:6384 192.168.101.21:6385 192.168.101.21:6386 --cluster-replicas 1

ip为自己的ip地址,在下方选择yes既可

 

 3.进入6381的redis查看集群

 redis-cli -p 6381

cluster nodes

然后我们进入6381随便存入一些key,发现有些无法存入

 

 这是由于哈希槽对集群环境进行了分段,一共有0-16383也就是16384个槽位

从上的截图可以看到每个主机的槽位不同,而失败的k1由内部哈希算法得出的槽位已经超过所以添加失败。

因此需要改用集群方式连接,先退出exit,然后

redis-cli -p 6381 -c

清空里面的数据

添加k1 v1

 

可以看到,它自动跳转到6383

不同的key有不同的槽位范围,他可以自动帮我们跳转过去

4.验证6381挂了之后从机是否会自动顶替上来

关闭6381

 

进入6382

 

 查看集群状态可以发现6381已经fail,而原属6381的从机6385已经上位

 可以看到死了一台根本无所谓,数据依然存在

 

 重启发现,6381已经变为6385的slave

 5.扩容

新建6387、6388两个节点

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

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

进入6387,然后将6387master节点加入集群,记得将6381换回master,把他重启后挂掉6385一会在启动6385就回来了

redis-cli --cluster add-node 192.168.101.21:6387 192.168.101.21:6381

6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群

查看发现已经加入,但还没有分配槽位

 

 重新分配槽位

 redis-cli --cluster reshard 自己的ip:6381

然后查看可以看到由于重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

 

 接下来将6388挂到6387下面成为从机

redis-cli --cluster add-node 自己ip:6388 自己ip:6387 --cluster-slave --cluster-master-id 6387的编号

查看发现,已成功扩容

 

6.缩容

恢复到3主3从的状态

先获取6388的id

redis-cli --cluster check 192.168.101.21:6387

 

删除6388从机节点

 redis-cli --cluster del-node 192.168.101.21:6388 a69b2622f7d85a83857c698ae77c3b05f23ab2c0 

检查发现已经剩下7台机器

 将6387的槽位分给6381

redis-cli --cluster reshard 192.168.101.21:6381

 由6381接收6387的4096个槽位

查看发现6387的槽位已经为0,全部由6381接手

删除6387节点

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

检查发现已经恢复3主3从

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值