Database/Redis

[Redis] 클러스터 개념 및 Key 할당 방법

꽁담 2020. 3. 22. 01:39

레디스 클러스터


복제노드를 포함하는 모든 노드가 서로 통신하며 정보를 주고 받습니다.

클라이언트는 어느 노드든지 접속이 가능하며 클러스터 구성정보를 가져와서 보유하며

입력되는 키에 따라 해당 노드에 접속하여 요청을 처리합니다.


일부 노드가 다운되더라도 다른 노드에 영향을 미치지 않습니다.

그러나 과반수 이상의 노드가 다운되는 경우 클러스터가 깨지게 됩니다.


마스터 노드는 1개 이상의 복제 노드를 가질 수 있습니다.

노드가 추가되거나 삭제 될 때 클러스터를 중지할 필요는 없으나, 노드 간 키가 이동될 때 해당 키에 락이 걸릴 수 있습니다.


레디스 서버는 노드끼리 통신을 하고 있기 때문에, 별도의 센티넬이 필요치 않습니다.

특정 마스터가 다운되는 경우 다른 마스터들이 다운된 마스터의 복제서버로 장애조치를 진행합니다.



클러스터 노드에 키를 할당하는 방식


Range 방식

Key 를 범위 방식으로 나눠 노드에 할당합니다.


관리자는 데이터가 어느 노드에 들어가는 지 직관적으로 알 수 있는 장점이 있지만

데이터가 각 노드별로 균등 배분되지 않을 수 있습니다.


Hash 방식

Hash 함수를 적용하여 Key 를 각 노드에 분배합니다.


관리자는 데이터가 어느 노드에 들어가는 지 직관적으로 알 수 없지만

각 노드는 데이터를 균등하게 가지고 있게 됩니다.



키를 Hash 방식으로 노드에 할당하는 방법


레디스 클러스터는 키의 분배를 위해 16,384 개의 슬롯을 사용합니다.

노드가 3개일 경우 1번 노드는 0~5460, 2번 노드는 5461~10922, 3번 노드는 10923~16383 의 슬롯범위를 가지게 됩니다.


레디스 클러스터는 입력된 키를 해시 함수를 적용하여 특정 슬롯(Slot)값으로 적용합니다.

이렇게 적용된 슬롯은 노드별 슬롯범위에 맞는 노드에 저장되게 됩니다.