Docker快速构建Redis集群(cluster)
以所有redis
实例运行在同一台宿主机上为例子
搭建步骤
redis
集群目录清单
.
├── Dockerfile
├── make_master_slave.sh
├── run_master_slave.sh
├── compose_master_slave.sh
├── redis-trib.rb
├── master
│?? ├── 7000
│?? │?? ├── data
│?? │?? │?? ├── appendonly.aof
│?? │?? │?? ├── dump.rdb
│?? │?? │?? └── nodes.conf
│?? │?? └── redis.conf
│?? ├── 7001
│?? │?? ├── data
│?? │?? │?? ├── appendonly.aof
│?? │?? │?? ├── dump.rdb
│?? │?? │?? └── nodes.conf
│?? │?? └── redis.conf
│?? └── 7002
│?? ├── data
│?? │?? ├── appendonly.aof
│?? │?? ├── dump.rdb
│?? │?? └── nodes.conf
│?? └── redis.conf
├── redis-cluster.tmpl
└── slave
├── 7003
│?? ├── data
│?? │?? ├── appendonly.aof
│?? │?? ├── dump.rdb
│?? │?? └── nodes.conf
│?? └── redis.conf
├── 7004
│?? ├── data
│?? │?? ├── appendonly.aof
│?? │?? ├── dump.rdb
│?? │?? └── nodes.conf
│?? └── redis.conf
└── 7005
├── data
│?? ├── appendonly.aof
│?? ├── dump.rdb
│?? └── nodes.conf
└── redis.conf
1.redis.conf
找到一份原始的redis.conf文件,将其重命名为:redis-cluster.tmpl
redis-cluster.tmpl
# bind 127.0.0.1
protected-mode no
port ${PORT}
daemonize no
dir /data/redis
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
2.构建redis-trib镜像
redis-trib.rb
是redis
官方推出的管理redis
集群的工具,集成在redis
的源码src
目录下,因为搭建redis-cluster的时候需要用到redis-trib工具。
构建redis-trib
镜像
Dockerfile
FROM ruby:2.5.5-slim
MAINTAINER xinchen<[email protected]>
RUN gem install redis
RUN mkdir /redis
WORKDIR /redis
# redis-trib.rb 可在https://github.com/antirez/redis中找到
# 此处已经 wget https://raw.githubusercontent.com/antirez/redis/4.0/src/redis-trib.rb
ADD ./redis-trib.rb /redis/redis-trib.rb
构建镜像
docker build -t redis-trib .
3.创建docker内部网络
# docker network ls 可查看
docker network create redis-cluster-net
4.创建 master 和 slave 文件夹并生成配置文件
make_master_slave.sh
# 创建 master 和 slave 文件夹
for port in `seq 7000 7005`; do
ms="master"
if [ $port -ge 7003 ]; then
ms="slave"
fi
mkdir -p ./$ms/$port/ && mkdir -p ./$ms/$port/data && PORT=$port envsubst < ./redis-cluster.tmpl > ./$ms/$port/redis.conf;
done
5.运行docker redis 的 master 和 slave 实例
run_master_slave.sh
# 运行docker redis 的 master 和 slave 实例
for port in `seq 7000 7005`; do
ms="master"
if [ $port -ge 7003 ]; then
ms="slave"
fi
docker run -d -p $port:$port -p 1$port:1$port -v $PWD/$ms/$port/redis.conf:/data/redis.conf -v $PWD/$ms/$port/data:/data/redis --restart always --name redis-$ms-$port --net redis-cluster-net redis redis-server /data/redis.conf;
done
6.组装masters : slaves 节点参数
组装masters : slaves 节点参数
# 组装masters : slaves 节点参数
matches=""
for port in `seq 7000 7005`; do
ms="master"
if [ $port -ge 7003 ]; then
ms="slave"
fi
matches=$matches$(docker inspect --format '{{(index .NetworkSettings.Networks "redis-cluster-net").IPAddress}}' "redis-$ms-${port}"):${port}" ";
done
echo $matches
# 172.20.0.2:7000 172.20.0.3:7001 172.20.0.4:7002 172.20.0.5:7003 172.20.0.6:7004 172.20.0.7:7005
# 创建docker-cluster,这里就用到了上面的redis-trib镜像
docker run -it --rm --net redis-cluster-net redis-trib ruby redis-trib.rb create --replicas 1 $matches
# 最后需要在接下来的console中输入“yes”,即可完成docker-cluster的搭建
参考
原文地址:https://www.cnblogs.com/xcmelody/p/10891636.html
时间: 2024-10-12 09:50:54