레디스 클러스터
1. 여러 노드에 자동으로 데이터 분산
2. 일부 노드가 실패하더라도 가용성 제공
3. 분산과 확장성 보정
특징
1 .full mesh구조 (모든 노드가 연결됨)
2. gossip protocol사용
3. hashslot을 사용한 키 관리
센티넬이랑 차이
1. 클러스터는 데이트를 분산
2 . 자동 장애 조치를 위해 모니터링 노드를 추가 배치할 필요 없음
3. 클러스터는 multi key 오퍼레이션 제한
클러스터 데이터 분산 기준
- 단순 해싱은 문제가 있음 노드가 추가 되거나 재거되면 데이터를 재정렬 해줘야 함.
-> hash("user:a") %2
Hash Slot을 이용해 데이터 분산
- Redis는 16384개의 hash slot으로 key 공간을 나누어 관리
- 각 키는 CRC16해싱 후 16384로 modulo연산을 해 각 해시 슬롯에 매핑
- 해시슬롯은 각 노드들에게 나우어 분배
- 컨텍스트 해싱 같음
노드가 추가되면 아래와 같이 되는것 같음
- https://server-talk.tistory.com/509
클라이언트 해시
- 클라이언트는 모든 클러스터에 붙어야 됨 6개라면 6개 모두 접속해야함
- 클러스터 노드는 요청이 오면 자기 담당이 아니라면 무브드 에러를냄
- 에러날때 어떤 노드에 있는지 알려줌
- 클라이언트는 다시 올바른 노드로 재시도 함
클라이언트 재시도가 일어나는경우가 많지 않음
- 클라이언트가 키값과 노드의 매핑 테이블을 캐싱하고 있음
- 노드가 추가 삭제/ 장애 될때 캐싱을 업데이트 해줌
- 평소에는 재시도가 일어나지 않음
클러스터 데이터 일관성
- 레디스 클러스터는 스트롱 컨시스턴시(모든노드에서 모든 데이터를 복제) 제공 하지 않음
- 성능 문제 때문에 비동기 복제를 함