Redis Cluster
Redis 클러스터 (Redis Cluster)
Redis 클러스터는 Redis 서버의 수평적 확장과 데이터 분산을 지원하는 고가용성 솔루션이다. 여러 대의 Redis 서버를 하나의 클러스터로 묶어, 데이터를 여러 서버에 분산 저장하고, 장애가 발생해도 서비스를 지속할 수 있도록 설계되었다. Redis 클러스터의 주요 특징과 동작 방식은 다음과 같다.
- 데이터 분산 (Sharding)
Redis 클러스터는 데이터를 여러 노드에 나누어 저장하는 샤딩(Sharding) 방식을 사용한다. Redis 클러스터는 키의 해시 값을 기준으로 각 키를 특정 슬롯(Slot)에 할당하며, 클러스터는 총 16,384개의 슬롯으로 구성된다. 각 노드는 이 슬롯들 중 일부를 담당하며, 클라이언트는 데이터를 읽거나 쓸 때 해당 키가 속한 슬롯을 담당하는 노드에 직접 접근한다. 이를 통해 여러 서버에 데이터가 분산 저장되어, 큰 데이터셋을 효과적으로 처리할 수 있다.
- 고가용성 (High Availability)
Redis 클러스터는 마스터-슬레이브 구조를 통해 고가용성을 보장한다. 각 마스터 노드는 특정 슬롯 범위를 담당하고, 슬레이브 노드는 마스터 노드를 복제하여 장애 발생 시 자동으로 대체할 준비를 한다. 만약 특정 마스터 노드가 다운되면, 클러스터는 해당 마스터의 슬레이브 중 하나를 자동으로 승격하여 새로운 마스터로 설정하고, 클러스터의 동작을 지속할 수 있게 한다.
- 자동 페일오버 (Automatic Failover)
Redis 클러스터에서는 특정 마스터 노드에 장애가 발생할 경우, 다른 마스터 노드들이 이를 감지하고 슬레이브 노드 중 하나를 새로운 마스터로 승격시키는 자동 페일오버 기능이 작동한다. 이를 통해 서비스가 중단되지 않고 지속될 수 있으며, 클러스터는 자동으로 복구되어 정상 상태로 돌아간다.
- 데이터 일관성 (Eventual Consistency)
Redis 클러스터는 기본적으로 **최종적 일관성(Eventual Consistency)**을 보장한다. 즉, 모든 노드가 항상 완벽히 동기화된 상태를 유지하는 것은 아니지만, 일정 시간이 지나면 데이터가 일관된 상태에 도달하게 된다. 다만 Redis 클러스터는 강력한 일관성을 보장하지 않기 때문에, 모든 노드가 같은 데이터를 즉시 반영하는 것을 요구하는 경우에는 주의가 필요하다.
- 클라이언트 연결 관리
Redis 클러스터 환경에서는 클라이언트가 각 키가 어느 노드에 저장되어 있는지 알고 있어야 한다. 이를 위해 Redis 클러스터는 리다이렉션 방식으로 동작한다. 만약 클라이언트가 잘못된 노드에 요청을 보내면, 클러스터는 해당 요청을 처리할 올바른 노드를 안내하여 클라이언트가 직접 연결을 수정할 수 있도록 한다. Redis 클라이언트 라이브러리 중에는 이러한 리다이렉션을 자동으로 처리해주는 기능을 제공하는 것들이 많다.
- 최소 3개의 마스터 노드가 필요하며,
- 각 Master 마다 최소 하나 이상의 Slave Node가 필요하다.
- 각 노드들 간의 스펙은 비슷하게 맞춰야지, 슬롯이 골고루 잘 들어간다.
Redis Sentinel과의 차이점
Redis 클러스터와 Redis Sentinel은 둘 다 고가용성을 제공하지만, 구조와 목적이 다르다.
Redis Sentinel은 주로 **마스터-슬레이브 구조에서 장애 조치(Failover)**를 자동화하기 위한 도구이다. 클러스터가 아닌 단일 Redis 인스턴스 환경에서도 사용할 수 있으며, 데이터 분산(sharding)은 지원하지 않는다. Redis 클러스터는 데이터를 여러 서버에 분산 저장하고, 클러스터 전체의 고가용성을 제공하는 데 중점을 둔다. 데이터 샤딩을 지원하여 더 큰 데이터셋을 처리할 수 있지만, 그만큼 설정과 관리가 복잡할 수 있다.
B
u
y
M
e
A
C
o
f
f
e
e
☕
️