문제 상황
애플리케이션에서 Redis 클러스터를 사용 중인 환경에서 CLUSTERDOWN The cluster is down라는 오류가 주기적으로 발생합니다. 스택 트레이스는 다음과 같습니다.
org.springframework.data.redis.RedisSystemException: 실행 중 오류 발생; 원인: io.lettuce.core.RedisCommandExecutionException: CLUSTERDOWN The cluster is down
at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:54)
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224)
at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:95)
at org.springframework.data.redis.core.DefaultValueOperations.setIfAbsent(DefaultValueOperations.java:310)
이 오류는 클라이언트가 Redis 클러스터에 명령을 전달할 수 없음을 나타내며, 클러스터 상태가 비정상임을 의미합니다. 문제의 근본 원인과 해결 방안을 분석해보겠습니다.
환경 정보
| 소프트웨어 | 버전 |
|---|---|
| Redis | 5.x |
원인 분석
서버 로그를 확인한 결과, 특정 슬레이브 노드가 마스터와 복제(replication) 과정에서 인증 실패를 반복하고 있었습니다. 관련 로그 항목은 아래와 같습니다.
207636:S 04 Mar 2021 21:31:19.986 * Connecting to MASTER test:6379
207636:S 04 Mar 2021 21:31:19.986 * MASTER <-> REPLICA sync started
207636:S 04 Mar 2021 21:31:19.986 * Master replied to PING, replication can continue...
207636:S 04 Mar 2021 21:31:19.987 # Unexpected reply to PSYNC from master: -NOAUTH Authentication required.
207636:S 04 Mar 2021 21:31:19.987 # MASTER aborted replication with an error: NOAUTH Authentication required.
핵심 메시지 -NOAUTH Authentication required는 마스터 노드에 접근할 때 인증 정보가 누락되었음을 나타냅니다. Redis 클러스터에서 슬레이브 노드가 마스터로부터 데이터를 동기화하려면, masterauth 설정을 통해 암호를 명시해야 합니다. 이 값이 누락되면 복제 연결이 실패하고, 클러스터 전체의 상태가 fail로 전환될 수 있습니다.
해결 방안
문제를 해결하기 위해 각 슬레이브 노드의 redis.conf 설정 파일에 다음 항목을 추가합니다.
masterauth your_redis_password
여기서 your_redis_password는 실제 Redis 인스턴스에 설정된 비밀번호로 대체되어야 합니다. 또한, 마스터 노드에도 아래 설정이 포함되어 있는지 확인합니다.
requirepass your_redis_password
설정 완료 후 모든 Redis 인스턴스를 재시작하여 구성이 적용되도록 합니다. 클러스터 노드 간의 복제 연결이 정상화되면, CLUSTERDOWN 상태는 자동으로 해제됩니다.
검증 결과
설정 반영 후 슬레이브 노드 로그에서 복제 성공 메시지가 출력되었으며, 애플리케이션 측에서도 더 이상 CLUSTERDOWN 오류가 발생하지 않았습니다. redis-cli --cluster check 명령어를 통해 클러스터 상태를 점검한 결과, 모든 노드가 정상(ok) 상태임을 확인했습니다.
요약
Redis 클러스터 운영 시, 보안 설정은 단일 노드뿐만 아니라 노드 간 통신에도 영향을 미칩니다. 특히 인증이 활성화된 환경에서는 슬레이브가 마스터에 접속할 수 있도록 masterauth 값을 반드시 설정해야 하며, 이는 안정적인 복제와 클러스터 가용성을 확보하는 데 핵심적입니다.