Docker-compose로 Redis Cluster 자동 구성하기
이번 글에서는 docker-compose 로 redis-cluster를 구성해보겠습니다. 여기서 사용한 redis 이미지 및 redis / sentinel conf 파일 등 기본 환경은 제가 개인적으로 만든 것이기 때문에
이 글을 참고하시는 경우엔 본인의 환경에 맞게 설정이 필요합니다.
구성
* docker-compose.yml
* redis_cluster_1a
* Dockerfile
* docker-entrypoint.sh
* redis_cluster_2a
* redis_cluster_3a
* redis_cluster_1b
* redis_cluster_2b
* redis_cluster_3b
=> Master 3ea , Slave 3ea 생성
docker-compose.yml
version: '3'
services:
redis_cluster_1a:
image: redis_image:cluster
build:
context: ./redis1
dockerfile: Dockerfile
stdin_open: true
tty: true
environment:
- REQUIREPASS=qhdks123
- PORT=8001
- HOST=172.19.0.20
networks:
redis_net:
ipv4_address: 172.19.0.20
container_name: redis_cluster_1a
redis_cluster_2a:
image: redis_image:cluster
stdin_open: true
tty: true
environment:
- REQUIREPASS=qhdks123
- PORT=8001
- HOST=172.19.0.21
networks:
redis_net:
ipv4_address: 172.19.0.21
depends_on:
- redis_cluster_1a
container_name: redis_cluster_2a
redis_cluster_3a:
image: redis_image:cluster
stdin_open: true
tty : true
environment:
- REQUIREPASS=qhdks123
- PORT=8001
- HOST=172.19.0.22
networks:
redis_net:
ipv4_address: 172.19.0.22
depends_on:
- redis_cluster_2a
container_name: redis_cluster_3a
redis_cluster_1b:
image: redis_image:cluster
stdin_open: true
tty : true
environment:
- REQUIREPASS=qhdks123
- PORT=8001
- HOST=172.19.0.23
networks:
redis_net:
ipv4_address: 172.19.0.23
depends_on:
- redis_cluster_3a
container_name: redis_cluster_1b
redis_cluster_2b:
image: redis_image:cluster
stdin_open: true
tty : true
environment:
- REQUIREPASS=qhdks123
- PORT=8001
- HOST=172.19.0.24
networks:
redis_net:
ipv4_address: 172.19.0.24
depends_on:
- redis_cluster_1b
container_name: redis_cluster_2b
redis_cluster_3b:
image: redis_image:cluster
stdin_open: true
tty : true
environment:
- REQUIREPASS=qhdks123
- PORT=8001
- HOST=172.19.0.25
networks:
redis_net:
ipv4_address: 172.19.0.25
depends_on:
- redis_cluster_2b
container_name: redis_cluster_3b
networks:
redis_net:
driver: bridge
ipam:
config:
- subnet: 172.19.0.0/24
Dockerfile
FROM kimdubi/redis_image:latest
MAINTAINER kimdubi
USER root
ADD redis.conf /engn001/redis-stable/redis_8001.conf
ADD docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
docker-entrypoint.sh
#!/bin/sh
set -e
# MASTER
#sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /engn001/redis-stable/redis_8001.conf
sed -i "s/6379/$PORT/g" /engn001/redis-stable/redis_8001.conf
sed -i "s/requirepass foobared/requirepass $REQUIREPASS/g" /engn001/redis-stable/redis_8001.conf
sed -i "s/masterauth <master-password>/masterauth $REQUIREPASS/g" /engn001/redis-stable/redis_8001.conf
sed -i "s/redis.log/redis_$PORT/g" /engn001/redis-stable/redis_8001.conf
sed -i "s/redis.pid/redis_$PORT.pid/g" /engn001/redis-stable/redis_8001.conf
# CLUSTER
sed -i "s/#cluster-enabled yes/cluster-enabled yes/g" /engn001/redis-stable/redis_8001.conf
sed -i "s/#cluster-config-file nodes-6379.conf/cluster-config-file nodes_$PORT.conf/g" /engn001/redis-stable/redis_8001.conf
sed -i "s/#cluster-node-timeout 15000/cluster-node-timeout 5000/g" /engn001/redis-stable/redis_8001.conf
cp /engn001/redis-stable/redis_8001.conf /engn001/redis-stable/data
redis-server /engn001/redis-stable/redis_8001.conf &
sleep 10
printf 'yes\n' | redis-cli -p 8001 -a qhdks123 --cluster create 172.19.0.20:8001 172.19.0.21:8001 172.19.0.22:8001 172.19.0.25:8001 172.19.0.23:8001 172.19.0.24:8001 --cluster-replicas 1 &
sleep 10
/bin/bash
실행
docker-compose -f ./docker-compose.yml up -d --build
Building redis_cluster_1a
Step 1/6 : FROM kimdubi/redis_image:latest
---> a693415dce41
Step 2/6 : MAINTAINER kimdubi
---> Using cache
---> 824284b455ee
Step 3/6 : USER root
---> Using cache
---> c8c490ffb70d
Step 4/6 : ADD redis.conf /engn001/redis-stable/redis_8001.conf
---> Using cache
---> 1735069c6560
Step 5/6 : ADD docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
---> Using cache
---> 7fb4293ba344
Step 6/6 : ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
---> Using cache
---> c9ee06aa66de
Successfully built c9ee06aa66de
Successfully tagged redis_image:cluster
Creating redis_cluster_1a ... done
Creating redis_cluster_2a ... done
Creating redis_cluster_3a ... done
Creating redis_cluster_1b ... done
Creating redis_cluster_2b ... done
Creating redis_cluster_3b ... done
결과
[root@0b9693752f92 /]# redis-cli -p 8001 -a qhdks123 --cluster check 172.19.0.20:8001
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
172.19.0.20:8001 (9b7201f6...) -> 0 keys | 5461 slots | 1 slaves.
172.19.0.21:8001 (289ed007...) -> 0 keys | 5462 slots | 1 slaves.
172.19.0.22:8001 (c3186498...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 172.19.0.20:8001)
M: 9b7201f6325351aaba31890e818171aa913d9e30 172.19.0.20:8001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: d1be9fc203d6a3a13841faf752831671ee9f623d 172.19.0.24:8001
slots: (0 slots) slave
replicates 289ed00739a84bb82bd55939e7fe3a064d8c9308
S: 7e63452401b51be9722f4d4ae65aae7cb4b3f692 172.19.0.25:8001
slots: (0 slots) slave
replicates c3186498062e6d1f4d1615cd76b1f9e780b435de
M: 289ed00739a84bb82bd55939e7fe3a064d8c9308 172.19.0.21:8001
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 2fcc3aea104b1c95e278d26fa5dda043d8f1c5c7 172.19.0.23:8001
slots: (0 slots) slave
replicates 9b7201f6325351aaba31890e818171aa913d9e30
M: c3186498062e6d1f4d1615cd76b1f9e780b435de 172.19.0.22:8001
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.