siyoon@Siyoons-MacBook-Air ~/redis-cluster docker exec -it redis-node-1 redis-cli --cluster create \
172.28.0.2:7001 \
172.28.0.3:7002 \
172.28.0.4:7003 \
--cluster-replicas 1
[ERR] Node 172.28.0.2:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug redis-node-1
Learn more at <https://docs.docker.com/go/debug-cli/>
현재 상황을 바탕으로 문제를 해결하기 위한 몇 가지 단계와 원인 분석을 진행하겠습니다.
### 문제 요약
Redis 노드를 클러스터로 구성하려 할 때, `Node is not empty`라는 오류가 발생하며, 노드가 이미 데이터베이스를 가지고 있거나 다른 클러스터에 속해 있다는 메시지가 출력됩니다. 또한 `CLUSTER RESET HARD`를 실행하려 했을 때 `Connection refused` 오류가 발생하는 것으로 보입니다.
### 문제 원인
1. **노드 초기화 실패**:
- 각 Redis 노드의 기존 데이터 또는 클러스터 설정이 제대로 삭제되지 않았을 수 있습니다.
2. **정확한 Redis CLI 접속 실패**:
- `CLUSTER RESET HARD` 및 `FLUSHALL` 명령에서 `127.0.0.1:6379`로 접속을 시도하고 있는데, Redis는 6379가 아닌 각 노드에 설정된 포트(예: 7001, 7002)에서 실행 중이기 때문에 연결이 거부됩니다.
- Redis CLI 명령에서 **정확한 포트**를 지정해야 합니다.
### 해결 방안
1. **정확한 포트로 Redis CLI 접속**
각 Redis 노드에 `redis-cli` 명령을 사용할 때, 노드가 실행 중인 **정확한 포트**를 지정해야 합니다. Redis가 6379가 아닌 7001, 7002, 7003 포트에서 실행 중이므로, `-p` 옵션을 사용하여 올바른 포트로 연결해야 합니다.
#### 노드 초기화 명령어 (정확한 포트 지정)
```bash
docker exec -it redis-node-1 redis-cli -p 7001 FLUSHALL
docker exec -it redis-node-2 redis-cli -p 7002 FLUSHALL
docker exec -it redis-node-3 redis-cli -p 7003 FLUSHALL
docker exec -it redis-node-1 redis-cli -p 7001 CLUSTER RESET HARD
docker exec -it redis-node-2 redis-cli -p 7002 CLUSTER RESET HARD
docker exec -it redis-node-3 redis-cli -p 7003 CLUSTER RESET HARD
현재 /node1/data, /node2/data, /node3/data 등의 데이터 디렉토리를 삭제한 것으로 보이지만, Redis 노드의 데이터 디렉토리나 설정 파일에 남아 있는 클러스터 구성 정보가 완전히 삭제되지 않았을 수 있습니다. 이를 확인하고, 다시 한 번 데이터를 완전히 삭제한 후 클러스터를 다시 설정해봅니다.
rm -rf node1/data/*
rm -rf node2/data/*
rm -rf node3/data/*
위에서 설명한 초기화 명령어를 실행한 후, 다시 클러스터를 생성합니다.
docker exec -it redis-node-1 redis-cli --cluster create \
172.28.0.2:7001 \
172.28.0.3:7002 \
172.28.0.4:7003 \
--cluster-replicas 1
이 방법을 통해 문제가 해결될 수 있을 것입니다.