1. docker-Compose构成
1.1 docker-redis-cluster文件夹准备明细
序号 | 目录或文件 | 作用 |
---|---|---|
1 | ./docker-redis-cluster | 总配置目录 |
2 | ./docker-redis-cluster/docker-compose.yaml | 部署文件 |
3 | ./docker-redis-cluster/redis/Dockerfile | 镜像配置文件 |
4 | ./docker-redis-cluster/redis/redis.conf | redis配置文件 |
5 | ./docker-redis-cluster/redis/start.sh | redis启动脚本 |
特别注意点:最后三个文件文件编码格式-UTF-8,换行编码-LF(UNIX)
1.2 docker-compose.yaml
version: '3'
networks:
redisnet:
driver: bridge
ipam:
config:
- subnet: 10.0.0.0/24
services:
redis-cluster:
image: redis:6.0.9
command: redis-cli -p 6379 --cluster create 10.0.0.10:6379 10.0.0.11:6380 10.0.0.12:6381 10.0.0.13:6382 10.0.0.14:6383 10.0.0.15:6384 --cluster-replicas 1 --cluster-yes
depends_on:
- redis-1
- redis-2
- redis-3
- redis-4
- redis-5
- redis-6
networks:
redisnet:
ipv4_address: 10.0.0.2
redis-1:
build: ./redis
image: redis-cluster-node
environment:
X_REDIS_PORT: 6379
networks:
redisnet:
ipv4_address: 10.0.0.10
ports:
- 6379:6379
redis-2:
image: redis-cluster-node
environment:
X_REDIS_PORT: 6380
networks:
redisnet:
ipv4_address: 10.0.0.11
ports:
- 6380:6379
redis-3:
image: redis-cluster-node
environment:
X_REDIS_PORT: 6381
networks:
redisnet:
ipv4_address: 10.0.0.12
ports:
- 6381:6379
redis-4:
image: redis-cluster-node
environment:
X_REDIS_PORT: 6382
networks:
redisnet:
ipv4_address: 10.0.0.13
ports:
- 6382:6379
redis-5:
image: redis-cluster-node
environment:
X_REDIS_PORT: 6383
networks:
redisnet:
ipv4_address: 10.0.0.14
ports:
- 6383:6379
redis-6:
image: redis-cluster-node
environment:
X_REDIS_PORT: 6384
networks:
redisnet:
ipv4_address: 10.0.0.15
ports:
- 6384:6379
1.3 配套文件Dockerfile
FROM redis:6.0.9
MAINTAINER Lu Dongsheng <learning1567@hotmail.com>
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN echo 'Asia/Tokyo' >/etc/timezone
# Dependent tool installation
RUN apt-get update
RUN apt-get install -y gettext-base && apt-get install -y apt-utils
COPY redis.conf /etc/redis/redis.conf.template
COPY start.sh /start.sh
ENTRYPOINT [ "/bin/bash", "/start.sh" ]
1.4 配套文件redis.conf
port $X_REDIS_PORT
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
1.5 配套文件start.sh
envsubst '$X_REDIS_PORT:$X_REDIS_PORT' < /etc/redis/redis.conf.template > /etc/redis/redis.conf
redis-server /etc/redis/redis.conf
2. 部署
2.1 构建并启动所有容器
$ docker-compose up --build -d
Creating network "docker-redis-cluster_redisnet" with driver "bridge"
Building redis-1
Step 1/9 : FROM redis:6.0.9
---> 6060df96cef3
Step 2/9 : MAINTAINER Lu Dongsheng <learning1567@hotmail.com>
---> Using cache
---> e20c87bd3cef
Step 3/9 : RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
---> Using cache
---> f7e6083e6fb3
Step 4/9 : RUN echo 'Asia/Tokyo' >/etc/timezone
---> Using cache
---> ef5aa8bb6c22
Step 5/9 : RUN apt-get update
---> Using cache
---> 362e0274a91c
Step 6/9 : RUN apt-get install -y gettext-base && apt-get install -y apt-utils
---> Using cache
---> 5fbf8d44d5bd
Step 7/9 : COPY redis.conf /etc/redis/redis.conf.template
---> Using cache
---> ed05230e6323
Step 8/9 : COPY start.sh /start.sh
---> Using cache
---> 5e253f787309
Step 9/9 : ENTRYPOINT [ "/bin/bash", "/start.sh" ]
---> Using cache
---> 51f8529def29
Successfully built 51f8529def29
Successfully tagged redis-cluster-node:latest
Creating docker-redis-cluster_redis-4_1 ... done
Creating docker-redis-cluster_redis-1_1 ... done
Creating docker-redis-cluster_redis-2_1 ... done
Creating docker-redis-cluster_redis-6_1 ... done
Creating docker-redis-cluster_redis-3_1 ... done
Creating docker-redis-cluster_redis-5_1 ... done
Creating docker-redis-cluster_redis-cluster_1 ... done
2.2 查看容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d638dc1a8109 redis-cluster-node "/bin/bash /start.sh" 37 seconds ago Up 34 seconds 0.0.0.0:6384->6379/tcp docker-redis-cluster_redis-6_1
32188654eedf redis-cluster-node "/bin/bash /start.sh" 37 seconds ago Up 34 seconds 0.0.0.0:6380->6379/tcp docker-redis-cluster_redis-2_1
7050bae336f1 redis-cluster-node "/bin/bash /start.sh" 37 seconds ago Up 34 seconds 0.0.0.0:6379->6379/tcp docker-redis-cluster_redis-1_1
41bbf8d74f6c redis-cluster-node "/bin/bash /start.sh" 37 seconds ago Up 34 seconds 0.0.0.0:6382->6379/tcp docker-redis-cluster_redis-4_1
f55577e67af7 redis-cluster-node "/bin/bash /start.sh" 37 seconds ago Up 34 seconds 0.0.0.0:6381->6379/tcp docker-redis-cluster_redis-3_1
60bf1405fd3e redis-cluster-node "/bin/bash /start.sh" 37 seconds ago Up 35 seconds 0.0.0.0:6383->6379/tcp docker-redis-cluster_redis-5_1
2.3 日志
为了更好地了解如何创建群集,请检查其中一个容器日志。
$ docker logs docker-redis-cluster_redis-1_1
$ docker logs docker-redis-cluster_redis-2_1
$ docker logs docker-redis-cluster_redis-3_1
$ docker logs docker-redis-cluster_redis-4_1
$ docker logs docker-redis-cluster_redis-5_1
$ docker logs docker-redis-cluster_redis-6_1
2.4 连接到Master其中之一
$ docker exec -it docker-redis-cluster_redis-1_1 redis-cli -c -p 6379
127.0.0.1:6379> cluster nodes
b42c322538ca174995277ced98534a4253dd6948 10.0.0.13:6382@16382 slave d0429fa1e0ba3ece8898f7bd84969839d2d3c516 0 1611892729662 3 connected
e5396fcd18de2126b1cc725a83308b944575704f 10.0.0.10:6379@16379 myself,master - 0 1611892729000 1 connected 0-5460
05f0201fbb705d0701c9c0da9175a7c22e25e030 10.0.0.11:6380@16380 master - 0 1611892729000 2 connected 5461-10922
d0429fa1e0ba3ece8898f7bd84969839d2d3c516 10.0.0.12:6381@16381 master - 0 1611892728157 3 connected 10923-16383
1bf41a4c744c880ba7aaf70ae770f51cc139bedf 10.0.0.14:6383@16383 slave e5396fcd18de2126b1cc725a83308b944575704f 0 1611892728000 1 connected
b5d420d8461fcee9f73172752fc508c41c46a870 10.0.0.15:6384@16384 slave 05f0201fbb705d0701c9c0da9175a7c22e25e030 0 1611892730162 2 connected
2.5 查看集群槽位
127.0.0.1:6379> cluster slots
1) 1) (integer) 0
2) (integer) 5460
3) 1) "10.0.0.10"
2) (integer) 6379
3) "e5396fcd18de2126b1cc725a83308b944575704f"
4) 1) "10.0.0.14"
2) (integer) 6383
3) "1bf41a4c744c880ba7aaf70ae770f51cc139bedf"
2) 1) (integer) 5461
2) (integer) 10922
3) 1) "10.0.0.11"
2) (integer) 6380
3) "05f0201fbb705d0701c9c0da9175a7c22e25e030"
4) 1) "10.0.0.15"
2) (integer) 6384
3) "b5d420d8461fcee9f73172752fc508c41c46a870"
3) 1) (integer) 10923
2) (integer) 16383
3) 1) "10.0.0.12"
2) (integer) 6381
3) "d0429fa1e0ba3ece8898f7bd84969839d2d3c516"
4) 1) "10.0.0.13"
2) (integer) 6382
3) "b42c322538ca174995277ced98534a4253dd6948"
2.6 清空
$ docker-compose down
Stopping docker-redis-cluster_redis-4_1 ... done
Stopping docker-redis-cluster_redis-6_1 ... done
Stopping docker-redis-cluster_redis-2_1 ... done
Stopping docker-redis-cluster_redis-5_1 ... done
Stopping docker-redis-cluster_redis-1_1 ... done
Stopping docker-redis-cluster_redis-3_1 ... done
Removing docker-redis-cluster_redis-cluster_1 ... done
Removing docker-redis-cluster_redis-4_1 ... done
Removing docker-redis-cluster_redis-6_1 ... done
Removing docker-redis-cluster_redis-2_1 ... done
Removing docker-redis-cluster_redis-5_1 ... done
Removing docker-redis-cluster_redis-1_1 ... done
Removing docker-redis-cluster_redis-3_1 ... done
Removing network docker-redis-cluster_redisnet