[infra] redis cluster : hash slot

orca·2024년 10월 14일

CS

목록 보기
39/46

single thread 인 redis 에서 어떻게 클러스터링을 제공하는지 궁금하다

Shard

  • sharding : 데이터를 여러 개의 작은 조각으로 나누어 여러 서버에 분산해서 저장하는 기법
  • shard
    • 하나의 큰 데이터셋을 작게 나눈 부분으로, 각 Shard는 특정 데이터 범위를 관리
    • 각 Shard는 마스터 노드와 하나 이상의 레플리카 노드를 가질 수 있음
  • distributed db

How does Redis do Sharding : hash slot

  • redis 클러스터는 16384의 hash slot 으로 구성됨
  • shard 는 몇 개의 hash slot을 담당함
  • 각 키는 해시 함수를 통해 특정 hash slot 에 맵핑됨
  • 키에 대한 해시 계산을 수행하고, 계산된 hash slot 을 담당하는 샤드가 데이터를 관리함
  • 클러스터에서 데이터를 특정 노드로 라우팅할 때, 16,384개의 slot 중 하나로 키를 매핑하는 연산은 빠르고 간단함

example

  1. "user:123"이 있음
  2. 이 키에 대해 해시 함수를 적용해 hash slot 을 계산함
    HASH_SLOT = CRC16("user:123") mod 16384
  3. 이 hash slot 을 담당하는 샤드가 키-값을 처리함

Rebalancing the Shards for Scaling

  • 스케일링이 된 경우, shard 와 hash slot 맵핑이 변경됨. 따라서 샤드 간의 슬롯을 재배치하는 과정이 필요함
  • 동일한 키는 항상 동일한 hash slot 에 매핑됨

example

  1. "user:123", 기존 샤드: Shard A, HASH_SLOT = 1234
  2. 새로운 shardB가 추가되고, ShardB 가 슬롯 1234를 담당하도록 맵핑을 업데이트함
  3. Shard A에서 HASH_SLOT 1234에 해당하는 키를 Shard B로 마이그레이션함
  4. 클라이언트가 "user:123"에 대한 요청을 보내면, ShardB가 이 요청을 처리함
    • 키에 대해 해시 함수를 적용해 hash slot 을 계산함
    • 이 hash slot 을 담당하는 shardB가 키-값을 처리

참고

Redis cluster specification
How Redis Cluster Maintains Availability while Re-Sharding

0개의 댓글