docker 搭建 redis cluster
-
安装docker
yum install docker
-
启动docker
systemctl start docker
-
拉取redis
docker pull redis (最新版) -
创建redis配置文件(redis-cluster.tmpl)
我在路径/home下创建一个文件夹redis-cluster,在路径/home/redis-cluster下创建一个文件redis-cluster.tmpl,并把以下内容复制过去。(注:路径可自定义,我用的是/home/redis-cluster)port ${PORT} protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 39.10X.XX.XX cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} appendonly yes # Generated by CONFIG REWRITE 是否配置密码 如若要配置则修改第7步 加入-a 密码 # dir "/data" # masterauth "密码" # requirepass "密码"
-
创建自定义redis网络
docker network create redis-net -
在/home/redis-cluster下生成conf和data目标,并生成配置信息
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
共生成6个文件夹,从7000到7005,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件
-
创建6个redis容器
for port in `seq 7000 7005`; do \ docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \ -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /home/redis-cluster/${port}/data:/data \ --restart always --privileged=true --name redis-${port} --net redis-net \ --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \ done
--privileged =true 完全开放防火墙,如果不配置会出现问题,服务会一直restarting
-
实现集群
echo yes | docker run -i --rm --net redis-net redis sh -c '\ redis-cli --cluster create --cluster-replicas 1 \ '"$(for port in `seq 7000 7005`; do \ echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \ done)" #redis-cli --cluster create :7000 :7001 :7002 :7003 :7004 :7005 --cluster-replicas 1
可能会出现
redis集群部署一直卡在Waiting for the cluster to join …
redis新版本不支持ruby,而是使用redis-cli 代替。
到这就完成了。
可以尝试连接了。