Docker搭建Redis集群
前沿
redis是最常用的缓存服务,下面我就使用docker来搭建一套redis的集群。
创建redis容器
首先我们需要新建一个redis配置模板,用于批量生成redis配置文件
redis-cluster.tmpl
1
2
3mkdir -p ~/docker/redis-cluster;
cd ~/docker/redis-cluster;
touch redis-cluster.tmpl;将一下内容写入到
redis-cluster.tmpl
文件中1
2
3
4
5
6
7
8
9port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.3.60
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes注意: cluster-announce-ip 是本机ip,而不是
127.0.0.1
在docker中创建一个自定义网络,可以使用
docker network create
命令来创建,docker network ls
命令来查看是否创建成功。1
2
3
4
5
6
7docker network create redis-net
[root@localhost ~/docker/redis-cluster]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e98dcf06eec6 bridge bridge local
845f1245483b host host local
f72ff3f690a0 none null local
72aa0ec39b32 redis-net bridge local现在我们来批量执行生成配置文件和数据存储目录
1
2
3
4
5for port in `seq 7000 7005`; do \
mkdir -p ~/docker/redis-cluster/${port}/conf \
&& PORT=${port} envsubst < ~/docker/redis-cluster/redis-cluster.tmpl > ~/docker/redis-cluster/${port}/conf/redis.conf \
&& mkdir -p ~/docker/redis-cluster/${port}/data; \
done共生成6个文件夹,从7000到7005,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件
创建6个redis容器,并启动
registry.cn-shenzhen.aliyuncs.com/zhouqi/redis:4.0
是我自己的docker镜像,当然也可以直接使用官方镜像。1
2
3
4
5
6
7for port in `seq 7000 7005`; do \
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
-v ~/docker/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf:z \
-v ~/docker/redis-cluster/${port}/data:/data:z \
--restart always --name redis-${port} --net redis-net \
--sysctl net.core.somaxconn=1024 registry.cn-shenzhen.aliyuncs.com/zhouqi/redis:4.0 redis-server /usr/local/etc/redis/redis.conf; \
done我们查看一下是否启动成功
建立Redis集群关系
1 | echo yes | docker run -i --rm --net redis-net ruby sh -c '\ |
最后我们在看一下redis的集群信息
问题
centos7创建redis集群一直卡在Waiting for the cluster to join
问题:
机器没有开放redis集群总线端口。解决方法:
开放redis集群总线端口。
集群总线端口是redis客户端连接的端口+10000。
如:redis客户端端口是7001。
则:集群总线端口就是17001。
注意、所以redis集群机器都要放开对应的redis客户端端口和集群总线端口。
如果你是在虚拟机上搭建redis集群、那么你直接关闭防火墙即可解决centos7创建redis集群一直卡在Waiting for the cluster to join
问题:
也许你的redis集群的ip设置成了127.0.0.1或loclahost解决方法:
将redis-cluster.tmpl中的ip设置成本机ipWARNING: redis-trib.rb is not longer available!
问题:
只有redis 5.0以下的版本才支持解决方法:
去http://download.redis.io/releases
中下载你对应的版本号
批量处理命令
Redis停止
1
2
3for port in `seq 7000 7005`; do \
docker stop redis-${port}; \
doneRedis删除
1
2
3
4for port in `seq 7000 7005`; do \
docker stop redis-${port}; \
docker rm redis-${port}; \
doneRedis启动
1
2
3for port in `seq 7000 7005`; do \
docker start redis-${port}; \
done