>데이터 베이스 >Redis >Redis 클러스터 원리 분석 예시

Redis 클러스터 원리 분석 예시

WBOY
WBOY앞으로
2023-05-27 14:55:06998검색

Redis 클러스터의 원리

Redis의 고가용성을 달성하기 위해 센티널에 의존하고, 대량의 데이터를 수용하면서 높은 동시성을 지원하려면 Redis 클러스터가 필요합니다. Redis 클러스터는 Redis에서 제공하는 분산 데이터 스토리지 솔루션입니다. 클러스터는 데이터 샤딩을 통해 데이터를 공유하고 복제 및 장애 조치 기능을 제공합니다.

Node

redis 클러스터는 여러 개의 노드로 구성되며, 여러 노드는 Cluster Meet 명령을 통해 연결됩니다. 노드의 핸드셰이크 프로세스:

  1. 노드 A는 클라이언트로부터 Cluster Meet 명령을 받습니다

  2. A 수신된 IP 주소와 포트 번호를 기반으로 B에게 Meet 메시지를 보냅니다

  3. 노드 B는 Meet 메시지를 받고 pong을 반환합니다

  4. A는 B가 Meet 메시지를 받았다는 것을 알고 ping 메시지를 반환하고 악수를 합니다.

  5. 마지막으로 노드 A는 가십 프로토콜을 통해 노드 B의 정보를 클러스터 내 다른 노드에 전파하고, 다른 노드도 B와 악수를 하게 됩니다.

slot

redis는 다음과 같은 형태로 저장됩니다. 클러스터 샤딩 데이터, 전체 클러스터 데이터베이스는 16384개의 슬롯으로 나뉩니다. 클러스터의 각 노드는 0-16384개의 슬롯을 처리할 수 있습니다. 데이터베이스의 모든 16384개 슬롯이 노드별로 처리되면 클러스터는 하나의 슬롯인 한 온라인 상태입니다. 사용할 수 없습니다. 모든 처리는 오프라인 상태로 처리됩니다. Clusteraddlots 명령을 통해 처리하기 위해 슬롯을 해당 노드에 할당할 수 있습니다.

슬롯은 비트 배열이고, 배열의 길이는 16384/8=2048이며, 배열의 각 비트는 노드에서 처리하도록 1로 표시하고, 0은 처리되지 않음을 나타냅니다. 이는 노드 A가 슬롯 0-7을 처리한다는 것을 의미합니다.

클라이언트가 노드에 명령을 보낼 때 슬롯이 현재 노드에 속하는 것을 발견하면 노드는 명령을 실행합니다. 그렇지 않으면 클라이언트를 다음 노드로 안내하기 위해 MOVED 명령이 클라이언트에 반환됩니다. 올바른 노드. (MOVED 프로세스는 자동입니다.)

노드를 추가하거나 제거하는 경우 슬롯을 재할당하는 것도 매우 편리합니다. Redis는 전체 프로세스가 완전히 온라인이며 서비스를 중지할 필요가 없습니다.

Failover

노드 A가 노드 B에 ping 메시지를 보내고 노드 B가 지정된 시간 내에 pong에 응답하지 않으면 노드 A는 노드 B를 pfail로 표시하고 오프라인인 것으로 의심함과 동시에 B의 상태를 메시지 형태로 보냅니다. 절반 이상의 노드가 B를 실패로 표시하면 B는 실패로 표시됩니다. 이때 장애 조치가 발생합니다. 더 많은 데이터를 복제한 슬레이브 노드가 마스터 노드가 되고, 오프라인 노드의 슬롯을 차지하게 됩니다. 전체 프로세스는 Sentinel의 프로세스와 매우 유사하며 선거를 위한 Raft 프로토콜을 기반으로 합니다.

위 내용은 Redis 클러스터 원리 분석 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제