Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- MSA
- Rest
- ddd
- reflection
- *
- AOP
- 서명
- jvm
- bounded context
- Exception
- Java
- IOC
- SOA
- bytecode
- spring
- JSON
- JWT
- redis
- PSA
- OOP
- Generic
- Spring Data Redis
- di
- junit5
- mockito
- Transaction
- rest api
Archives
- Today
- Total
개발자일기
Lettuce Redis Cluster 적용 본문
redis의 클러스터를 이용해 데이터들을 샤딩 할수 있다.
스프링 부트에서 기본 레디스 라이브러리는 lettuce 이다.
lettuce의 cluster connection 관리
- lettuce는 클러스터에 모든 노드를 조회해와 노드마다 connection을 가진다.
- slot 마다 어느 노드 인지 관리를 한다.
- 키를 이용해 slot을 알아내고, 해당 slot의 노드 커넥션을 이용해 command를 날린다.
- 응답이 moved ask 일경우 노드를 redirection을 한다.
노드에 대한 failover 설정 방법
노드가 role change가 되거나, maintenance, 신규 노드가 추가 될경우 커넥션의 갱신이 필요하다.
다음과 같이 설정을 할수 있다.
@Configuration
class RedisConfiguration {
@Bean
fun lettuceClientConfigurationBuilderCustomizer(): LettuceClientConfigurationBuilderCustomizer {
return LettuceClientConfigurationBuilderCustomizer(){
@Override
fun customize(clientConfigurationBuilder: LettuceClientConfigurationBuilder){
val clusterTopologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
.dynamicRefreshSources(true)
.enablePeriodicRefresh(Duration.ofSeconds(60))
.enableAllAdaptiveRefreshTriggers()
.adaptiveRefreshTriggersTimeout(Duration.ofSeconds(30))
.build()
clientConfigurationBuilder.clientOptions(
ClusterClientOptions.builder()
.topologyRefreshOptions(clusterTopologyRefreshOptions)
.build()
)
}
}
}
....
dynamicRefreshSources
- 기본 true
- 노드들을 discovery할건지, 안할경우 전달한 노드의 호스트만 사용
enablePeriodicRefresh
- 기본 false
- 지정한 시간마다 클러스터 구성 정보를 가져와서 업데이트한다. 노드가 추가/삭제되었거나, 노드 다운으로 역할 변경(마스터 -> 클론), 슬롯이 이동했을 경우 등 클러스터 구성 정보가 변경되었을 경우 최신 정보로 업데이트해야 한다. 노드가 많을 경우 너무 짧은 시간을 지정하면 refresh 부하가 발생할 수 있다.
enableAllAdaptiveRefreshTriggers
- 기본은 아무런 이벤트에 반응하지 않음
- 특정 이벤트 발생시(command의 응답)에 반응하여 refresh를 한다. 하지만 너무 빈번하게 일어날수 있어 rate limit을 걸수 있다.
- 이벤트 : MOVED, ASK , UNKOWN_NODE, UNCOVERD_SLOT 등등
- adaptiveRefreshTriggersTimeout 을 이용해 특정 시간동안에 한번만 connection 갱신 할수 있도록 할수있다.
- 기본은 30초이다.
'개발' 카테고리의 다른 글
카프카 개념과 특징 (0) | 2021.01.25 |
---|---|
가변보다 불변객체 (0) | 2020.05.25 |
생성자 대신 정적 팩토리 메소드를 고려하자 (0) | 2020.05.22 |
객체지향 생활 체조 원칙 3: 모든 원시값과 문자열을 포장한다. (0) | 2020.05.22 |
객체 지향 생활 체조 원칙 규칙 8 : 일급 컬렉션 (0) | 2020.05.17 |
Comments