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 | cluster-enabled<yes/no> : yes 인 경우 특정 Redis 인스턴스에서 Redis Cluster 지원을 활성화합니다. 그렇지 않으면 인스턴스는 대개 독립 실행 형 인스턴스로 시작합니다. |
Redis 클러스터 생성 및 사용
참고 : Redis Cluster를 수동으로 배포 하려면 특정 운영 측면 을 배우는 것이 매우 중요 합니다. 그러나 클러스터를 가동하여 최대한 빨리 실행하려면이 섹션과 다음 섹션을 건너 뛰고 create-cluster 스크립트를 사용하여 Redis Cluster 만들기 로 직접 이동 하십시오 .
클러스터를 생성하기 위해 가장 먼저 필요한 것은 몇 개의 빈 Redis 인스턴스를 클러스터 모드 에서 실행하는 것입니다 . 이것은 기본적으로 Redis 인스턴스가 클러스터 특정 기능 및 명령을 사용할 수 있도록 특수 모드를 구성해야하므로 클러스터가 일반 Redis 인스턴스를 사용하여 생성되지 않는다는 것을 의미합니다.
다음은 최소한의 Redis 클러스터 구성 파일입니다.
1 | port 7000 |
클러스터 모드를 가능하게하는 것이 무엇인지 알 수 있듯이 단순히 cluster-enabled 지시어입니다. 또한 모든 인스턴스에는이 노드의 구성이 저장되는 파일 경로가 포함됩니다.이 경로는 기본적으로 nodes.conf있습니다. 이 파일에는 사람이 직접 닿지 않습니다. Redis Cluster 인스턴스에 의해 시작될 때 생성되며 필요할 때마다 업데이트됩니다.
예상대로 작동 하는 최소한의 클러스터 는 최소한 세 개의 마스터 노드를 포함해야합니다. 첫 번째 테스트의 경우 3 개의 마스터와 3 개의 슬레이브로 6 개의 노드 클러스터를 시작하는 것이 좋습니다.