Docker 配置redis集群

一、拉取redis镜像

  1. docker pull redis

二、创建模板文件

创建名为redis的目录

mkdir redis

编写 redis-cluster.tmpl redis配置文件的模板文件

port ${PORT}
bind 0.0.0.0
requirepass 123456
masterauth 123456
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
# 集群总线 这里写本机ip
cluster-announce-ip 192.168.101.28
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes

三、创建配置文件

基于redis-cluster.tmpl创建六个redis.conf,需要使用shell脚本的for循环
envsubst命令用来替换配置文件中的配置项

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

四、创建redis网络

docker network create redis-net

五、启动redis

注意启动redis的绝对路径!!!

for port in `seq 7000 7005`; do \
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
-v /root/redis/${port}/conf/redis.conf:/etc/redis/redis.conf \
-v /root/redis/${port}/data:/data \
--restart always --name redis-${port} --net redis-net \
--sysctl net.core.somaxconn=1024 redis redis-server /etc/redis/redis.conf; \
done

六、查看IP地址

docker inspect redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 | grep IPAddress

七、配置集群

进入任意一个redis容器

docker exec -it redis-7000 bash

然后就可以创建集群 利用刚刚查看到的ip地址和redis对应的端口

redis-cli --cluster create -a 123456 172.18.0.2:7000 172.18.0.3:7001 172.18.0.4:7002 172.18.0.5:7003 172.18.0.6:7004 172.18.0.7:7005 --cluster-replicas 1

也可以使用本机ip

redis-cli --cluster create -a 123456 192.168.101.28:7000 192.168.101.28:7001 192.168.101.28:7002 192.168.101.28:7003 192.168.101.28:7004 192.168.101.28:7005 --cluster-replicas 1

然后输入yes就可以了

但是可能会有如下的报错

[ERR] Node 192.168.101.28:7002 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

这时候就需要将对应节点下的aof,rdb等本地备份文件删除,然后重启该redis容器就可以了