본문 바로가기

개발중/Spring Boot & Redis

[Spring - Redis] READONLY You can't write against a read only replica.

728x90
반응형

redis 를 단일 master 구조로 구성했을 때는 해당 포스팅처럼 연결했는데 잘 연결이 되었습니다.

 

그런데 master / slave 구조로 바꾸니 아래와 같이 에러가 났습니다.

 

READONLY You can't write against a read only replica.

 

master / slave 구조상 master 는 조회, 등록이 가능하나 slave 는 조회만 가능합니다.

slave 는 master 의 복제본이기 때문에 등록이 불가능합니다.

 

근데 뭔가 에러를 읽다보니 spring 에서 slave 에게 쓰기를 하고 있는 기분이 들었습니다. ( slave 는 READONLY 입니다. )

그러면 에러가 나는게 당연하지만 ...

 

저는 k8s 에 reids 를 구성했고, spring 의 redis 접근 정보 구성은 k8s 의 service name 에 접근하고 있기 때문에

'spring 은 k8s redis service 에 요청 보내면 알아서 master 랑 slave 요청을 구분해서 로드밸런싱 처리가 되어야하는게 아닌가 ?' 라고 잘못된 생각을 하고 있었습니다 . .

 

아무튼 구글에도 내가 원하는 답이 없기에  스프링 레디스 공식문서  를 읽어보니 내가 원한 글이 있었습니다 ..

 

application.yaml 파일에 설정한 redis 정보를 지웠습니다.

 

 

아래와 같이 master 에 쓰기 slave 에서 읽기 코드를 추가해주니 제가 원하는 로직대로 실행되었습니다.

@Configuration
public class WriteToMasterReadFromReplicaConfiguration {

    @Bean
    public LettuceConnectionFactory redisConnectionFactory() {

        LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
                .readFrom(ReadFrom.REPLICA_PREFERRED)
                .build();

        RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration("redis", 6379);
        serverConfig.setPassword(RedisPassword.of("1234"));

        return new LettuceConnectionFactory(serverConfig, clientConfig);
    }
}

 

728x90
반응형