Docker快速構建Redis集羣(cluster)

Docker快速構建Redis集羣(cluster)

以全部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

1.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

2.構建redis-trib鏡像

redis-trib.rbredis官方推出的管理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 .

3.建立docker內部網絡

# docker network ls 可查看
docker network create redis-cluster-net

4.建立 master 和 slave 文件夾並生成配置文件

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

5.運行docker redis 的 master 和 slave 實例

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

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的搭建

參考

docker redis 集羣(cluster)搭建app

redis官網

redis中文文檔

相關文章
相關標籤/搜索