Docker快速構建Redis集群(cluster) 以所有 實例運行在同一臺宿主機上為例子 搭建步驟 集群目錄清單 1.redis.conf 找到一份原始的redis.conf文件,將其重命名為:redis cluster.tmpl redis cluster.tmpl 2.構建redis tri ...
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的搭建