DB

[Redis] 확장성과 가용성을 위한 클러스터_뭔 말 인지 모르겠다.

Raconer 2024. 3. 18. 23:53
728x90

클러스터를 사용할 때의 성능

  • 클라이언트가 MOVED 에러에 대해 재요청을 해야 하는 문제
    → 클라이언트(라이브러리)는 Key-Node 맵을 캐싱하므로 대부분의 경우 발생하지 않음
  • 클라이언트는 단일 인스턴스의 Redis를 이용할 때와 같은 성능으로 이용 가능
  • 분산 시스템에서 성능은 데이터 일관성(Consistency)과 trade-off가 있음
    → Redis Cluster는 고성능의 확장성을 제공하면서 적절한 수준의 데이터 안정성과 가용성을 유지하는 것을 목표로 설계

클러스터의 데이터 일관성

  • Redis Cluster는 Strong Consistency를 제공하지 않음
  • 높은 성능을 위해 비동기 복제를 하기 때문

Ack와 복제는 순서가 정해져 있지 않으므로, 복제가 완료되기 전에 master가 죽으면 데이터는 유실된다.

Ack와 복제는 순서가 정해져 있지 않으므로, 복제가 완료되기 전에 master가 죽으면 데이터는 유실된다.


클러스터의 가용성 - auto failover

  • 일부 노드(Master)가 실패(또는 네트워크 단절) 하더라도
    과반수 이상의 master가 남아 있고,
    사라진 master의 replica들이 있다면 클러스터는 failover 되어 가용한 상태 유지
  • node timeout 동안 과반수의 master와 통신하지 못한 master는
    스스로 error state로 빠지고 write 요청을 받지 않음

예시

master1과 replica2 가 죽더라도,
2/3의 master가 남아 있고,
master1이 커버하던 hash slot은 replica1이 master로 승격되어 커버할 수 있음


클러스터의 가용성 - replica migration

  • replica가 다른 master로 migrate 해서 가용성을 높임

728x90