docker配置redis集群

首先关闭防火墙,确认本机docker服务是否启动。

1 新建6个redis的docker容器实例

docker run -d --name redis-node-1 --net host  --privileged=true -v /Users/hukeling/code-tech/docker/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 /Users/hukeling/code-tech/docker/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 /Users/hukeling/code-tech/docker/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 /Users/hukeling/code-tech/docker/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 /Users/hukeling/code-tech/docker/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 /Users/hukeling/code-tech/docker/data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386

–net host 使用宿主机的IP和端口,默认
–priviledged =true 获取宿主机的root用户权限
–cluster-enabled yes 开启redis集群
–appendonly yes 开启持久化
–port 6381 redis端口号

请添加图片描述

2进入其中一台容器内并为6台机器构建集群关系

进入容器

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

构建集群关系

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

命令中192.168.1.5是本机ip,采用本机ip会报connection refused,此处暂时换成127.0.0.1继续

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

–cluster-replicas1 表示为每个master创建一个slave
在这里插入图片描述
如图所示,最终生成的的集群关系如下表

主节点从节点
63816386
63826384
63836385

3进入某个容器内部,查看集群状态

redis-cli -p 6381
>cluster info
>cluster nodes

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

4主从容错切换迁移

redis-cli -p 6381 -c
-c集群登录
给6381赋值
set k1 v1
set k2 v2
退出redis
查看集群状态

redis-cli --cluster check 127.0.0.1:6381

在这里插入图片描述
将6381宕机,
进入容器2,查看集群节点
在这里插入图片描述
可以发现6386变成了主节点。
再启动6381,可以发现6381变成了从节点,而6386仍是主节点。
如果需要回复,则关闭6381和6386,先重启6381,再重启6386

5扩容

新增节点6387和节点6388

docker run -d --name redis-node-7 --net host  --privileged=true -v /Users/hukeling/code-tech/docker/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 /Users/hukeling/code-tech/docker/data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

进入6387,将6387作为主节点加入集群

docker exec -it redis-node-7 /bin/bash
redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6381

在这里插入图片描述
检查集群状态
在这里插入图片描述
发现6387的哈希槽号是空的

重新分派槽号

redis-cli --cluster reshard 127.0.0.1:6381

给6387分配槽号4096个
接收id填6387的id
来源选all
在这里插入图片描述
查看状态发现6387的槽号是其他三个每个节点分了一部分给6387,因为从新分配的成本太高了。

给6387分配从节点

redis-cli --cluster add-node 127.0.0.1:6388 127.0.0.1:6387 --cluster-slave --cluster-master-id bc42ebf764312c67ef6931503bfa1cdbed285414

查看集群状态发现扩容成功
在这里插入图片描述

6缩容

先清楚节点6388

# id是6388的id
redis-cli --cluster del-node 127.0.0.1:6388 ab0fe8c0a2c7d59b9fee98afdf2681d7331de923

清出来的槽号重新分配

redis-cli --cluster reshard 127.0.0.1:6381
把6387的4096个槽号分给6381

在这里插入图片描述
6387槽号变为0

再删除6387

redis-cli --cluster del-node 127.0.0.1:6387 bc42ebf764312c67ef6931503bfa1cdbed285414

恢复成3主3从

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值