>  기사  >  데이터 베이스  >  레디스 클러스터란?

레디스 클러스터란?

silencement
silencement원래의
2019-06-04 16:31:493180검색

레디스 클러스터란?

Redis 클러스터 소개

Redis 클러스터는 여러 Redis 노드 간에 데이터 공유를 제공하는 어셈블리입니다.

Redis 클러스터는 여러 키를 처리하는 명령을 지원하지 않습니다. 이를 위해서는 서로 다른 노드 간에 데이터를 이동해야 하기 때문에 Redis의 성능을 달성하지 못하고 부하가 높은 조건에서 예측할 수 없는 오류가 발생할 수 있습니다.

Redis 클러스터는 실제 환경에서는 노드가 다운되거나 도달할 수 없는 경우에도 명령을 계속 처리할 수 있습니다. Redis 클러스터의 장점:

데이터를 자동으로 여러 노드로 분할합니다.

전체 클러스터의 일부 노드가 실패하거나 연결할 수 없는 경우에도 명령을 계속 처리할 수 있습니다.

Redis 클러스터의 데이터 샤딩

Redis 클러스터는 일관된 해싱을 사용하지 않지만 해시 슬롯 개념을 도입합니다.

Redis 클러스터에는 16384개의 해시 슬롯이 있으며 각 키는 CRC16을 통과한 후 16384를 가져옵니다. 모듈로 배치할 슬롯을 결정합니다. 클러스터의 각 노드는 해시 슬롯의 일부를 담당합니다. 예를 들어 현재 클러스터에 3개의 노드가 있는 경우

노드 A에는 해시 슬롯 0~5500이 포함됩니다. B에는 해시 슬롯 5501~11000이 포함됩니다.

노드 C에는 해시 슬롯 11001~16384가 포함됩니다.

이 구조를 사용하면 노드를 쉽게 추가하거나 삭제할 수 있습니다. 예를 들어 새 노드 D를 추가하려면 다음부터 시작해야 합니다. 노드 A, B와 C의 일부 슬롯이 D로 이동되었습니다. 노드 A를 제거하려면 A의 슬롯을 노드 B와 C로 이동한 다음 클러스터에서 슬롯이 없는 A 노드를 제거해야 하기 때문입니다. 한 노드에서 다른 노드로 해시 슬롯을 이동해도 서비스가 중단되지 않으므로 노드의 해시 슬롯 수를 추가, 삭제 또는 변경해도 클러스터를 사용할 수 없게 되지 않습니다.

Redis 클러스터 슬레이브 복제 모델의 마스터

일부 노드가 실패하거나 대부분의 노드가 통신할 수 없는 경우에도 클러스터를 계속 사용할 수 있도록 하기 위해 클러스터는 마스터-슬레이브 복제 모델을 사용하며 각 노드에는 N-1 복제본이 있습니다.

클러스터의 예에서 복제 모델 없이 3개의 노드 A, B, C를 사용하는 경우 노드 B에 장애가 발생하면 전체 클러스터는 5501~11000 범위의 슬롯이 부족하다고 간주하여 사용할 수 없게 됩니다. 클러스터가 생성되면(또는 일정 시간이 지난 후) 각 노드에 슬레이브 노드 A1, B1, C1을 추가합니다. 그런 다음 전체 클러스터는 3개의 마스터 노드와 3개의 슬레이브 노드로 구성됩니다. 클러스터는 B1이 새로운 마스터 노드로 선택되어 계속 서비스를 제공하며 슬롯을 찾을 수 없기 때문에 전체 클러스터를 사용할 수 없습니다

그러나 B와 B1이 모두 실패하면 클러스터를 사용할 수 없게 됩니다.

Redis 일관성 보장

Redis는 데이터의 강력한 일관성을 보장하지 않습니다. 이는 실제로 특정 조건에서 클러스터가 쓰기 작업을 잃을 수 있음을 의미합니다.첫 번째 이유는 클러스터가 쓰기 작업 프로세스를 비동기식으로 사용하기 때문입니다.

클라이언트는 마스터 노드 B에 명령을 씁니다.

마스터 노드 B는 명령 상태를 클라이언트에 응답합니다.

마스터 노드는 쓰기 작업을 슬레이브 노드 B1, B2 및 B3에 복사합니다.

마스터 노드가 응답합니다. 명령에 대한 응답이 반환된 후에 복제 작업이 발생합니다. 각 명령 요청이 복제 작업이 완료될 때까지 기다려야 하면 마스터 노드가 명령 요청을 처리하는 속도가 크게 떨어지기 때문입니다. 우리는 거래를 해야 합니다. -성능과 일관성 사이에서 벗어났습니다. 참고: Redis 클러스터는 향후 동기식 쓰기 방법을 제공할 수 있습니다. Redis 클러스터가 명령을 잃을 수 있는 또 다른 상황은 클러스터에 네트워크 파티션이 있고 클라이언트가 하나 이상의 마스터 노드를 포함하는 소수의 인스턴스로부터 격리되는 경우입니다.

예를 들어 클러스터에 6개의 노드 A, B, C, A1, B1, C1이 있고 그 중 A, B, C가 마스터 노드이고 A1, B1, C1이 슬레이브 노드라고 가정합니다. A, B, C, A 클라이언트 Z1은 클러스터에서 네트워크 분할이 발생한다고 가정하고 클러스터는 노드 A, C, A1, B1 및 C1을 포함하는 두 개의 당사자로 나눌 수 있습니다. 노드 B와 클라이언트 Z1을 포함합니다.

Z1은 여전히 ​​마스터 노드 B에 쓸 수 있습니다. 짧은 시간 동안 네트워크 분할이 발생하는 경우 대부분의 당사자가 B1을 선택할 수 있을 만큼 분할 시간이 길면 클러스터는 계속해서 정상적으로 작동합니다. 새 마스터를 사용하면 Z1이 B의 데이터를 잃게 됩니다.

위 내용은 레디스 클러스터란?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.