Docker搭建Redis4.0集群(不使用Ruby脚本)

Posted 神奇小宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker搭建Redis4.0集群(不使用Ruby脚本)相关的知识,希望对你有一定的参考价值。

前言

生产服务器没法下载ruby,因此我只能这么干啊。

拉取镜像

docker pull docker:4.0

创建网卡

docker network create redis-net

创建redis集群环境

我的文件是放在/opt/docker/redis-cluster/目录下,这里酌情修改为自己的目录。
sudo mkdir /opt/docker/redis-cluster/
创建模版文件:vim redis-cluster.tmpl

port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 127.0.0.1 #注意这儿一定是你的外网IP
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes

生成配置文件和数据存放目录:

for port in `seq 7001 7006`; do   mkdir -p ./${port}/conf   && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf   && mkdir -p ./${port}/data; done

这一段的意思就是创建7001-7006目录以及下面的conf和data目录,并将redis-cluster.tmpl中的${port}替换为7001-7006分别复制到各自的conf下的redis.conf中。

创建Redis4.0容器

for port in `seq 7001 7006`; do   docker run -d -ti -p ${port}:${port} -p 1${port}:1${port}   --name="redis-${port}"  -v /opt/docker/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf   -v /opt/docker/redis-cluster/${port}/data:/data   --restart always --name redis-${port} --net redis-net   --sysctl net.core.somaxconn=1024 redis:4.0 redis-server /usr/local/etc/redis/redis.conf; done

经过这一步目前我们已经有了6台独立的redis容器

连接redis容器到集群

打开reids-cli客户端:docker exec -it redis-7001 redis-cli -p 7001
在redis-cli中关联各个容器:cluster meet 127.0.0.1 7001,cluster meet 127.0.0.1 7002,cluster meet 127.0.0.1 7003,cluster meet 127.0.0.1 7004,cluster meet 127.0.0.1 7005,cluster meet 127.0.0.1 7006注意:这儿的127.0.0.1替换成你的外网IP
查看关联信息:cluster nodes注意:第一列是容器id,下面会用到
退出redis-cli:exit

主从配置

我的配置是7001、7002、7003是master,7004、7005、7006是slave
将7004配置为7001的从节点:docker exec -it redis-7004 redis-cli -p 7004 cluster replicate 7001的容器id(一长串字符串),
将7005配置为7002的从节点:docker exec -it redis-7005 redis-cli -p 7005 cluster replicate 7002的容器id(一长串字符串),
将7006配置为7003的从节点:docker exec -it redis-7006 redis-cli -p 7006 cluster replicate 7003的容器id(一长串字符串)
打开reids-cli客户端:docker exec -it redis-7001 redis-cli -p 7001 ,之后执行cluster nodes查看主从分配情况。

主节点分配Redis槽点

给7001分配槽点:docker exec -it redis-7001 redis-cli -p 7001 cluster addslots {0..5461},
给7002分配槽点:docker exec -it redis-7002 redis-cli -p 7002 cluster addslots {5462..10922},
给7003分配槽点:docker exec -it redis-7003 redis-cli -p 7003 cluster addslots {10923..16383}
注意1:不管你有几个主节点,一定要完全分配16383个槽点,不能多也不能少。加节点的话,就必须重复切分部分槽点到新节点上。
注意2:一定要在外面执行这个cluster addslots {a..b}命令,在客户端执行的话只能分配单独的节点,不能分配连续的节点。会报错: ERR Invalid or out of range slot

结尾

到此为止,集群已经搭建完毕!你可以使用客户端去访问了。
别忘了把你的服务器端口7001-7006开放了

以上是关于Docker搭建Redis4.0集群(不使用Ruby脚本)的主要内容,如果未能解决你的问题,请参考以下文章

docker redis4.0 集群(cluster)搭建

Redis4.0.10集群搭建

redis4.0.2集群搭建

redis4.0.14集群搭建

R_01 centos8.0 redis4.0 伪集群搭建

REDIS CLUSTER 搭建,扩容缩容基本原理