前言
生产服务器没法下载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开放了
原文地址:https://www.cnblogs.com/Lenbrother/p/12222715.html