Closed O0oO0Oo closed 10 months ago
1000개 이상의 데이터 등록 다음과 같이 진행 삭제(master) -> 락(master) -> 읽기(slave)
삭제 후 읽기에서 Master-Slave 간 불일치 확인
성공 락에서 10ms 가 걸린다면, Master-slave 간 동기화 시간 충분
실패 락에서 1ms 가 걸린다면, 불일치 발생 현재 구현한 락으로 실제 테스트 결과 간헐적 불일치 발생 batch 작업의 sync 옵션을 사용하여도 불일치 발생
쓰기, 읽기 성능을 높이고 불일치를 방지하려면 현재 구성에서 다음과 같이 마스터에서만 읽기/쓰기로 설정을 하거나
Config config = new Config();
config.setCodec(StringCodec.INSTANCE);
config.useMasterSlaveServers()
.setMasterAddress(master.toString())
.setReadMode(ReadMode.MASTER)
.setLoadBalancer(new RoundRobinLoadBalancer());
Cluster 로 구성후 마스터에서만 읽기/쓰기를 하면 되지않을까? 하지만 Cluster 구성은 오버엔지니어링 아닌가? 성능과 비용에서 절충이 필요하다.
이슈 개요
재현 단계
예상 동작
동기화 지연으로 인해 문제가 발생합니다. readOnly 는 레플리카로 쓰기요청은 마스터로 갑니다.
실제 동작
Redis == 동기화 지연으로 인해 문제 발생 가능, Master 로만 읽기/쓰기로 변경 MySQL == readOnly = true - replica, write = master
추가 정보