원래 목적은 master 노드 1개, slave 노드 3개를 생성하려고 했지만, cluster를 생성하다보니
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 4 nodes and 1 replicas per node.
*** At least 6 nodes are required.
이런 에러를 확인하였다.
알고보니 master 1개, slave 3개 이런식의 구성은 Sentinel 방식이었다.
Redis 운영 방식 : Cluster vs Sentinel 어떤 것을 선택해야 할까 ? 🤔
https://velog.io/@always/Redis-%EC%9A%B4%EC%98%81-%EB%B0%A9%EC%8B%9D-Cluster-vs-Sentinel-%EC%96%B4%EB%96%A4-%EA%B2%83%EC%9D%84-%EC%84%A0%ED%83%9D%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C
master 노드 3개, slave 노드 3개를 생성하기로 수정하였고, 그 방법에 대해 설명하겠다.
주인 3명에 노예 3마리 컨테이너 docker-compose.yml
services:
# Redis 마스터 노드 1
redis-master1:
image: redis:7
container_name: redis-master1
command: ["redis-server", "--cluster-enabled", "yes", "--appendonly", "yes", "--requirepass", "systempass"]
ports:
- "6379:6379"
volumes:
- ./redis_data_master1:/data
networks:
- redis-cluster
# Redis 마스터 노드 2
redis-master2:
image: redis:7
container_name: redis-master2
command: ["redis-server", "--cluster-enabled", "yes", "--appendonly", "yes", "--requirepass", "systempass"]
ports:
- "6380:6379"
volumes:
- ./redis_data_master2:/data
networks:
- redis-cluster
# Redis 마스터 노드 3
redis-master3:
image: redis:7
container_name: redis-master3
command: ["redis-server", "--cluster-enabled", "yes", "--appendonly", "yes", "--requirepass", "systempass"]
ports:
- "6381:6379"
volumes:
- ./redis_data_master3:/data
networks:
- redis-cluster
# Redis 슬레이브 노드 1
redis-slave1:
image: redis:7
container_name: redis-slave1
command: ["redis-server", "--cluster-enabled", "yes", "--appendonly", "yes", "--requirepass", "systempass", "--masterauth", "systempass"]
ports:
- "6382:6379"
volumes:
- ./redis_data_slave1:/data
networks:
- redis-cluster
# Redis 슬레이브 노드 2
redis-slave2:
image: redis:7
container_name: redis-slave2
command: ["redis-server", "--cluster-enabled", "yes", "--appendonly", "yes", "--requirepass", "systempass", "--masterauth", "systempass"]
ports:
- "6383:6379"
volumes:
- ./redis_data_slave2:/data
networks:
- redis-cluster
# Redis 슬레이브 노드 3
redis-slave3:
image: redis:7
container_name: redis-slave3
command: ["redis-server", "--cluster-enabled", "yes", "--appendonly", "yes", "--requirepass", "systempass", "--masterauth", "systempass"]
ports:
- "6384:6379"
volumes:
- ./redis_data_slave3:/data
networks:
- redis-cluster
networks:
redis-cluster:
driver: bridge
이 상태에서 docker compose up
을 하면 총 6개의 노드가 컨테이너에서 실행이 된다.
# 생성된 네트워크의 목록을 확인
docker network ls
# 해당 네트워크를 조회(컨테이너가 포함되어있는지 확인)
docker network inspect redis-cluster
Redis가 --requirepass 옵션으로 설정되어 있기 때문에, 클러스터 생성 명령을 실행할 때 인증을 같이 해준다.
docker exec -it redis-master1 redis-cli --cluster create \
redis-master1:6379 \
redis-master2:6379 \
redis-master3:6379 \
redis-slave1:6379 \
redis-slave2:6379 \
redis-slave3:6379 \
--cluster-replicas 1 \
--cluster-yes -a systempass
이 때 내부포트번호인 6379로 일치시켜야 cluster가 생성이 된다.
네트워크에서 6개의 노드가 확인이 가능하다
master1 노드의 인증이 필요할 경우
# master1의 CLI에 접속하는 명령어
docker exec -it redis-master1 redis-cli
# 인증
auth systempass