docker容器化搭建 redis7.0.4 三主三从集群 [详细说明,步骤简洁]

哈希槽算法

先简单介绍下哈希槽,搭建的时候以及扩容缩容的时候会经常看到 slot 字眼。一个集群对应16384个槽,这些槽会分配给集群中的所有主节点,集群会记录节点和槽的对应关系。解决了节点和槽的关系后,对key求哈希值,然后对16384取余,余数是几key就落入对应的槽里。数据放在槽里,槽放在节点里。

由于它以槽为单位移动数据,槽的数目是固定的,处理起来比较容易,这样数据移动问题就解决了。

它解决了哈希取余分配算法的扩缩容的问题,redis节点数变化后,映射关系需要重新计算;也解决了节点太少时哈希一致性算法(哈希环)的落点分布不均问题,也就是数据倾斜问题。

拉取镜像
docker pull redis:7.0.4

解释一下这条命令,相当于:docker 拉取 redis:版本号

查看镜像:docker images,图中第1行数据就是刚才拉取的redis镜像:
在这里插入图片描述

创建并运行容器

redis的conf配置文件,可以自己编写并载入容器,也可以在启动容器时作为参数传入。这里采用参数传入。如果是生产环境,一般会在不同的云服务器上面创建实例。

# 节点1
docker run -d --name redis-node-1 --net host --privileged=true redis:7.0.4 --cluster-enabled yes --port 6381
# 节点2
docker run -d --name redis-node-2 --net host --privileged=true redis:7.0.4 --cluster-enabled yes --port 6382
# 节点3
docker run -d --name redis-node-3 --net host --privileged=true redis:7.0.4 --cluster-enabled yes --port 6383
# 节点4
docker run -d --name redis-node-4 --net host --privileged=true redis:7.0.4 --cluster-enabled yes --port 6384
# 节点5
docker run -d --name redis-node-5 --net host --privileged=true redis:7.0.4 --cluster-enabled yes --port 6385
# 节点6
docker run -d --name redis-node-6 --net host --privileged=true redis:7.0.4 --cluster-enabled yes --port 6386

redis的参数
--cluster-enabled yes 表示启动集群
--port 6381 表示此实例使用6381端口

redis持久化。如果需要把数据持久化到宿主机,则需要加上这两个参数
--appendonly yes 是否开启持久化
-v /home/data/redis/redis-node-1:/data。这意思是把 redis 的数据目录 /data 挂截到宿主机的 /home/data/redis/redis-node-1 目录。

docker的参数
--name redis-node-1表示给这个容器取个名字,叫 redis-node-1
-d 后台运行
--net host 使用宿主机的ip和端口

查看容器是否在运行中:docker ps
在这里插入图片描述

创建集群
1、进入容器
docker exec -it redis-node-1 /bin/bash
2、进入docker容器后才能执行以下命令。这里填宿主机的 ip 即可。如果是在生产环境中,不同 redis 实例会分布在不同云服务器,这里的 ip 地址填对应服务器的 ip 即可。
redis-cli --cluster create 10.0.3.15:6381 10.0.3.15:6382 10.0.3.15:6383 10.0.3.15:6384 10.0.3.15:6385 10.0.3.15:6386 --cluster-replicas 1
#--cluster-replicas 1 表示为每个master创建一个slave节点

输入yes,然后回车
在这里插入图片描述

检查集群状态:redis-cli --cluster check 10.0.3.15:6381
看到如下图,表示创建成功了。
在这里插入图片描述

两个常见问题:

1 连接redis时报这个错:
Couldn’t map cluster keyspace using any provided seed in…
是因为连接的redis连不上,或者不是集群。编程写代码连接时,连接的必须是正确的集群(cluster)

2 最后创建集群时,界面一直在这里点点点没动动静,卡住了:
Waiting for the cluster to join …

原因:
前面没按步骤进行操作。或者几台redis间相互不通。

解决方案:
删除节点,重新操作

docker rm -f redis-node-6 redis-node-5 redis-node-4  redis-node-3 redis-node-2 redis-node-1
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值