Redis-클러스터
분산형 클러스터 아키텍처입니다.
Redis 클러스터의 성능은 단일 노드 배포와 동일한 수준입니다.
다중 마스터 노드, 로드 밸런싱, 읽기-쓰기 분리
Redis 클러스터는 표준 마스터-슬레이브 복제 구성을 지원하여 고가용성과 높은 신뢰성을 보장합니다.
장애 조치(failover)
Redis Cluster는 전체 클러스터의 가용성을 보장하기 위해 Raft와 유사한 인증 방법도 구현합니다.
Redis 클러스터에 새 노드를 추가하거나 노드를 제거하는 작업은 투명하며 가동 중지 시간이 필요하지 않습니다.
가로, 세로 모두 확장이 매우 쉽습니다.
데이터 분할, 대용량 데이터 저장
Redis 클러스터를 배포하는 데 다른 에이전트나 도구가 필요하지 않으며 Redis 클러스터는 독립형 Redis와 거의 완벽하게 호환됩니다.
.
역할: 마스터, 슬레이브
Redis 클러스터는 여러 Redis 노드 그룹으로 구성되며 중앙 노드가 없는 P2P(지점 간) 클러스터 아키텍처이며 Gossip 프로토콜을 사용합니다. 클러스터 전파
Gossip 프로토콜은 메시지를 전파하는 방법인 통신 프로토콜입니다.
영감을 받은 아이디어: 바이러스 전파
정보를 수신하는 이러한 노드는 동일한 작업을 수행합니다. 즉, 무작위로 선택된 다른 노드에 정보를 전달합니다.
정보는 주기적으로 N개의 대상 노드에 전달됩니다. 이를 팬아웃(fanout)이라고 합니다.
가십 프로토콜에는 Meet, Ping, Pong, Fail, Publish 등 다양한 메시지가 포함되어 있습니다.
가십 프로토콜을 통해 클러스터는 클러스터 간 상태 동기화 업데이트, 선택 셀프 서비스 장애 조치 및 기타 중요한 클러스터 기능을 포함하는 중요한 클러스터 기능을 제공할 수 있습니다.
분산 아키텍처 설계에서 핵심 문제는 데이터를 어떻게 샤딩하는가입니다. 다음과 같은 분산 해시 알고리즘이 기술 변화에 나타났습니다.
redis-cluster는 기본적으로 평균 분포와 연속 분포를 사용하여 모든 물리적 노드를 [0-16383] 슬롯에 매핑합니다.
노드에 슬롯을 지속적으로 할당해야 하며, 중단이 발생하면 RedisCluster가 작동하지 않습니다.
raft 프로토콜을 사용합니다. (Paxos 알고리즘 /p/40c658c9dcc2 참조)
슬레이브가 마스터 중 절반 이상의 동의를 받으면 새로운 마스터가 됩니다. 이때 최신 Epoch의 PONG 메시지를 통해 자신을 마스터로 브로드캐스트하여 클러스터의 다른 노드가 가능한 한 빨리 토폴로지(node.conf)를 업데이트할 수 있도록 합니다.
위에서 언급한 슬레이브 노드 선택입니다.
수동 장애 조치는 실제 실패가 아니라 안전한 방법(데이터 손실 없음)으로 수행하는 것이 목적입니다. ) 현재 마스터 노드와 슬레이브 노드 중 하나(클러스터 장애 조치를 수행하는 노드)의 역할을 교환합니다.
1. 슬레이브 노드에 클러스터 장애 조치 명령(slaveof no one)을 보냅니다.
2. 슬레이브 노드는 마스터 노드에 수동 전환이 필요함을 알립니다(CLUSTERMSG_TYPE_MFSTART)
3. 마스터 노드는 모든 클라이언트 명령 실행을 차단합니다(10초)
4. 슬레이브 노드가 마스터 노드에서 핑을 보내 패키지에 있는 마스터 노드의 복제 오프셋을 얻습니다.
5. 슬레이브 노드가 오프셋에 복제하고, 선거를 시작하고, 표를 계산하고, 선거에서 승리합니다. 마스터 노드로 업그레이드하고 구성을 업데이트합니다.
6. 전환이 완료된 후 원래 마스터 노드는 이동된 명령을 모든 클라이언트에 보내 새 마스터 노드로 리디렉션합니다.
위는 마스터 노드가 온라인 상태일 때입니다.
마스터 노드가 오프라인이 되면 클러스터 장애 조치 강제 또는 클러스터 장애 조치 인계를 사용하여 강제 전환을 수행합니다.
확장
확장된 노드의 데이터는 비어 있어야 합니다
축소
데이터가 비어 있는 노드만 삭제할 수 있습니다
하나의 마스터와 하나의 슬레이브의 경우 마스터와 슬레이브가 동시에 다운되면 클러스터 전체가 다운되는 것으로 알고 있습니다.
이러한 상황을 피하기 위해 하나의 마스터와 여러 개의 슬레이브를 가질 수 있지만 이로 인해 비용이 증가합니다.
Redis는 슬레이브 시스템을 너무 많이 추가하지 않고도 클러스터의 안정성을 향상시킬 수 있는 복제 드리프트라는 방법을 제공합니다.
Master1이 다운되면 Slaver11이 새 Master1로 승격됩니다.
클러스터는 새 Master1이 단일 지점(슬레이브 없음)임을 감지합니다.
클러스터 슬레이브 노드 그룹(Master3)에서 노드 이름의 알파벳 순서가 가장 작은 슬레이브(Slaver31)를 선택하여 단일 포인트 마스터-슬레이브 노드 그룹(Master1)으로 이동합니다
.
구체적인 과정은 다음과 같습니다(위 사진을 예시로 듭니다):
1. Master3에서 Slaver31의 슬레이브 레코드를 삭제합니다
2. 삭제 Slaver31의 마스터 레코드를 Master1로 변경
3. Master1에 Slaver31을 슬레이브 노드로 추가
4. Slaver31의 복제 소스를 Master1로 변경
5 ping 패키지를 사용하여 정보를 클러스터의 다른 노드와 동기화합니다