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
반응형