以全部redis
實例運行在同一臺宿主機上爲例子html
redis
集羣目錄清單node
. ├── 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
找到一份原始的redis.conf文件,將其重命名爲:redis-cluster.tmpl
redis-cluster.tmplgit
# 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
redis-trib.rb
是redis
官方推出的管理redis
集羣的工具,集成在redis
的源碼src
目錄下,由於搭建redis-cluster的時候須要用到redis-trib工具。github
構建redis-trib
鏡像
Dockerfileredis
FROM ruby:2.5.5-slim MAINTAINER xinchen<xcmelody@gmail.com> 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
docker build -t redis-trib .
# docker network ls 可查看 docker network create redis-cluster-net
make_master_slave.shruby
# 建立 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
run_master_slave.shbash
# 運行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
組裝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的搭建