Redis Cluster 슬롯의 기본 구조
Redis Cluster는 키 공간을 16384개의 슬롯으로 분할하며, 각 마스터 노드가 이 중 일부를 담당합니다. 각 키의 슬롯은 HASH_SLOT = CRC16(key) mod 16384 수식으로 계산되며, 사용되는 CRC16은 XMODEM 표준(다항식 1021, 초기값 0000)을 따릅니다. 이 알고리즘에서는 CRC16 출력의 14비트만 사용되므로 모듈로 16384 연산이 필요합니다.
16384라는 숫자가 선택된 이유
16384(2^14)는 메시지 크기 트레이드오프를 고려한 선택입니다. 각 노드는 클러스터 버스 하트비트에서 비트맵 형태로 슬롯 소유권을 광고하는데, 16384비트는 2KB이지만 65536비트는 8KB가 되어 모든 노드가 지속적으로 통신하는 프로토콜에서 상당한 오버헤드가 됩니다. 이는 16384개 마스터 노드까지 지원하는 상한선을 설정하지만, 실제 권장 클러스터 크기는 약 1000노드 수준입니다.
해시 태그와 다중 키 작업
Redis Cluster는 해시 태그라는 개념을 구현하여 특정 키들을 동일 슬롯에 저장하도록 강제할 수 있습니다. 합집합, 교집합 같은 복잡한 다중 키 연산은 모든 관련 키가 동일 슬롯으로 해시되는 경우에만 지원됩니다. 예를 들어 {user:1000}.following과 {user:1000}.followers는 중괄호 안의 user:1000 부분만 해시되므로 동일 슬롯에 배치됩니다.
슬롯 마이그레이션과 온라인 리셰어딩
노드 추가/제거나 클러스터 리밸런싱 시 슬롯을 노드 간 이동할 수 있으며, 이 작업은 서비스 중단 없이 진행됩니다. 이는 일반적인 consistent hashing과 달리, 슬롯이라는 중간 계층을 도입함으로써 노드 추가 시 모든 키의 위치를 재계산할 필요가 없기 때문입니다.