Redis cluster 란

Redis cluster 란

Redis Cluster는 레디스 버전 3.0 이상에서만 동작 합니다.

Redis Cluster는 Redis 설치를 실행하는 방법을 제공하며 데이터는 여러 Redis 노드에서 자동으로 분할됩니다 .

또한 Redis Cluster는 파티션 중에 어느 정도 가용성을 제공합니다 . 즉, 일부 노드가 실패하거나 통신 할 수 없을 때 작업을 계속할 수있는 기능입니다. 그러나 더 큰 실패 (예 : 대다수의 마스터를 사용할 수없는 경우)에서 클러스터가 작동을 멈 춥니 다.

실용적인면에서 Redis Cluster를 사용하면 무엇이 필요합니까?

여러 노드간에 데이터 집합 을 자동으로 분할 하는 기능 .
노드의 하위 집합에서 오류가 발생 하거나 나머지 클러스터와 통신 할 수 없을 때 작업 을 계속할 수있는 기능 .

Redis Cluster TCP 포트

일반적인 Redis TCP 포트 (예 : 6379)와 데이터 포트에 10000을 추가하여 얻은 포트 (예 : 16379)

명령 포트 및 클러스터 버스 포트 오프셋은 고정되어 있으며 항상 10000입니다.

Redis Cluster가 제대로 작동하려면 각 노드마다 다음이 필요합니다.

일반 클라이언트 통신 포트 (일반적으로 6379)는 클라이언트와 통신하여 클러스터에 도달해야하는 모든 클라이언트와 모든 다른 클러스터 노드 (키 마이그레이션을 위해 클라이언트 포트를 사용하는)에게 개방됩니다.
클러스터 버스 포트 (클라이언트 포트 + 10000)는 다른 모든 클러스터 노드에서 연결할 수 있어야합니다.

Redis Cluster 데이터 샤딩

Redis Cluster는 일관된 해싱을 사용하지 않지만 모든 키가 개념적으로 해시 슬롯 이라고 부르는 부분 인 샤딩의 다른 형태입니다 .

Redis Cluster에는 16384 개의 해시 슬롯이 있으며, 주어진 키의 해시 슬롯을 계산하기 위해 16384의 모듈로 된 키의 CRC16 만 가져옵니다.

Redis Cluster의 모든 노드는 해시 슬롯의 하위 집합을 담당하므로 예를 들어 노드가 3 개인 클러스터가있을 수 있습니다.

노드 A는 0에서 5500 사이의 해시 슬롯을 포함합니다.
노드 B는 5501에서 11000까지의 해시 슬롯을 포함합니다.
노드 C는 11001에서 16383 사이의 해시 슬롯을 포함합니다.
이를 통해 클러스터의 노드를 쉽게 추가하고 제거 할 수 있습니다. 예를 들어, 새 노드 D를 추가하려면 A, B, C 노드에서 해시 슬롯을 D로 이동해야합니다. 마찬가지로 노드 A를 클러스터에서 제거하려면 A가 제공하는 해시 슬롯을 이동할 수 있습니다. 노드 A가 비어있을 때 클러스터에서 완전히 제거 할 수 있습니다.

해시 슬롯을 한 노드에서 다른 노드로 이동하는 작업을 중지 할 필요가 없기 때문에 노드를 추가 및 제거하거나 노드별로 해시 슬롯의 비율을 변경하더라도 중단 시간이 필요하지 않습니다.

Redis Cluster는 단일 명령 실행 (또는 전체 트랜잭션 또는 Lua 스크립트 실행)과 관련된 모든 키가 모두 동일한 해시 슬롯에 속해있는 한 여러 키 작업을 지원합니다. 사용자는 해시 태그 라는 개념을 사용하여 여러 개의 키가 동일한 해시 슬롯의 일부가되도록 할 수 있습니다 .

해시 태그는 레디 스 클러스터 사양에 설명하지만, 요점은 키 괄호} {사이에 문자열이있는 경우, 것만 문자열 내에서 예를 들어, 그래서 해시입니다 있다는 것입니다 있습니다 this{foo}key와 another{foo}key 같은 해시 슬롯을 보장받을 수 있습니다 , 여러 개의 키가있는 명령에서 함께 인수로 사용할 수 있습니다.

Redis Cluster 구성 매개 변수

이제 예제 클러스터 배포를 만들려고합니다. 계속하기 전에 Redis Cluster에서 소개하는 구성 매개 변수에 대해 소개하겠습니다 redis.conf. 어떤 것은 명백 할 것이고, 다른 것들은 계속해서 읽으면 더 분명해질 것입니다.

1
2
3
4
5
6
cluster-enabled<yes/no> : yes 인 경우 특정 Redis 인스턴스에서 Redis Cluster 지원을 활성화합니다. 그렇지 않으면 인스턴스는 대개 독립 실행 형 인스턴스로 시작합니다.
cluster-config-file<filename> :이 옵션의 이름에도 불구하고 이것은 사용자가 편집 할 수있는 구성 파일이 아니라 Redis Cluster 노드가 변경 될 때마다 자동으로 클러스터 구성 (상태)을 유지하는 파일이며, 시작할 때 다시 읽을 수 있어야합니다. 이 파일에는 클러스터의 다른 노드, 상태, 영구 변수 등이 나열됩니다. 종종이 파일은 일부 메시지 수신의 결과로 다시 쓰여지고 디스크에 플러시됩니다.
cluster-node-timeout<milliseconds> : 실패로 간주되지 않고 Redis Cluster 노드를 사용할 수없는 최대 시간. 마스터 노드에 지정된 시간 이상 도달 할 수없는 경우 슬레이브에서 장애 조치됩니다. 이 매개 변수는 Redis Cluster의 다른 중요한 사항을 제어합니다. 특히 지정된 시간 동안 대부분의 마스터 노드에 도달 할 수없는 모든 노드는 쿼리 수락을 중지합니다.
cluster-slave-validity-factor<factor> : 0으로 설정되면, 슬레이브는 마스터와 슬레이브 간의 링크가 끊어진 채로 남아있는 시간에 관계없이 항상 마스터의 장애 조치를 시도합니다. 값이 양수이면 최대 연결 해제 시간이 노드 시간 초과 로 계산됩니다값에이 옵션과 함께 제공되는 인수를 곱한 값이며 노드가 슬레이브 인 경우 마스터 링크가 지정된 시간 이상 연결이 끊어지면 장애 조치를 시작하지 않습니다. 예를 들어, 노드 시간 초과가 5 초로 설정되고 유효성 계수가 10으로 설정된 경우, 마스터와 50 초 이상 연결되지 않은 슬레이브는 마스터를 페일 오버하지 않습니다. 0이 아닌 다른 값은 페일 오버 할 수있는 슬레이브가없는 경우 마스터 실패 이후 Redis Cluster를 사용할 수 없게 될 수 있습니다. 이 경우 원래 마스터가 클러스터에 다시 참여할 때만 클러스터가 사용 가능하게 되돌아갑니다.
cluster-migration-barrier<count> : 다른 슬레이브가 더 이상 슬레이브로는 커버되지 않는 마스터로 이동하기 위해 마스터가 연결된 채로있는 최소 슬레이브 수입니다. 자세한 내용은이 자습서의 복제본 마이그레이션에 대한 해당 절을 참조하십시오.
cluster-require-full-coverage<yes/no> :이 옵션이 yes로 설정된 경우 기본적으로 키 공간의 일부 비율이 노드에서 처리되지 않으면 클러스터는 쓰기 허용을 중지합니다. 이 옵션을 no로 설정하면 키의 하위 집합에 대한 요청 만 처리 할 수있는 경우에도 클러스터가 여전히 쿼리를 제공합니다.

Redis 클러스터 생성 및 사용

참고 : Redis Cluster를 수동으로 배포 하려면 특정 운영 측면 을 배우는 것이 매우 중요 합니다. 그러나 클러스터를 가동하여 최대한 빨리 실행하려면이 섹션과 다음 섹션을 건너 뛰고 create-cluster 스크립트를 사용하여 Redis Cluster 만들기 로 직접 이동 하십시오 .

클러스터를 생성하기 위해 가장 먼저 필요한 것은 몇 개의 빈 Redis 인스턴스를 클러스터 모드 에서 실행하는 것입니다 . 이것은 기본적으로 Redis 인스턴스가 클러스터 특정 기능 및 명령을 사용할 수 있도록 특수 모드를 구성해야하므로 클러스터가 일반 Redis 인스턴스를 사용하여 생성되지 않는다는 것을 의미합니다.

다음은 최소한의 Redis 클러스터 구성 파일입니다.
1
2
3
4
5
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

클러스터 모드를 가능하게하는 것이 무엇인지 알 수 있듯이 단순히 cluster-enabled 지시어입니다. 또한 모든 인스턴스에는이 노드의 구성이 저장되는 파일 경로가 포함됩니다.이 경로는 기본적으로 nodes.conf있습니다. 이 파일에는 사람이 직접 닿지 않습니다. Redis Cluster 인스턴스에 의해 시작될 때 생성되며 필요할 때마다 업데이트됩니다.

예상대로 작동 하는 최소한의 클러스터 는 최소한 세 개의 마스터 노드를 포함해야합니다. 첫 번째 테스트의 경우 3 개의 마스터와 3 개의 슬레이브로 6 개의 노드 클러스터를 시작하는 것이 좋습니다.

참조