Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

개발자일기

Lettuce Redis Cluster 적용 본문

개발

Lettuce Redis Cluster 적용

ka0oll 2021. 11. 21. 17:17

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초이다.

 

 

 

 

http://redisgate.kr/redis/clients/lettuce_cluster.php

Comments