[Redis] RedisReadOnlyException 해결

YuLim·2023년 5월 2일
1

💥 Error

목록 보기
14/14

메인 프로젝트 배포 서버에 맞는 아이디와 비밀번호를 입력해도 일치하지 않는다는 팝업이 뜨고, 포스트맨으로는 로그인에 500 error가 발생 했다.

배포 중인 동안 문제 되지 않았던 부분이 갑자기 이러니 의아했다.
고민해보니 프론트에선 500에러 처리가 아이디와 비밀번호가 일치하지 않는다는 팝업으로 뜨는 것 같았고, 포스트맨에선 다른 API는 잘 실행이 되는데 로그인 API와 회원가입 시 이메일 인증을 받는 API만 되지 않아 둘의 공통점인 Redis문제라는걸 직감하게 되었다.

EC2 서버 로그를 확인하니 Redis 문제가 맞았다.

2023-05-02 14:02:36.602 ERROR 24985 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception

org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica.

위 오류는 Redis 클러스터의 읽기 전용 레플리카에 쓰기 작업을 시도할 때 발생하는 것으로, Redis는 읽기 전용 레플리카에 대해 쓰기 작업을 허용하지 않기 때문에 해당 오류가 발생한다고 한다.

💻 해결

redis-cli에서 info 명령어를 내리면 아래와 같이 나온다.

> info
slave_read_only:1

config set slave-read-only no 명령어를 사용하여 Redis의 읽기 전용 설정을 해제할 수 있다. 이 명령어를 실행하면 Redis 서버는 읽기 전용 설정을 해제하고 쓰기 작업을 허용한다.

> config set slave-read-only no

(Chat GPT) > 이 명령어를 사용하기 전에 Redis 클러스터의 구성과 요구 사항을 신중히 고려하고 적절한 조치를 취해야 합니다. 예를 들어, 읽기 전용 레플리카가 데이터의 일관성을 보장하는 역할을 하는 경우에는 이 설정을 변경하면 데이터의 무결성에 영향을 줄 수 있습니다. 따라서 변경하기 전에 신중하게 검토해야 합니다.

Redis에 대해 더 공부해서 적절한 조치를 취한 건지 돌아봐야겠다.

profile
개인 공부 기록장

2개의 댓글

comment-user-thumbnail
2023년 5월 4일

Redis 고수..! 🤩

답글 달기
comment-user-thumbnail
2024년 3월 20일

별로 좋은 대처는 아닌거같습니다 slave DB에는 읽기만 시키는게 나을거같습니다..

답글 달기