Docker 配置redis集群
一、拉取redis镜像
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容器就可以了
