2017년 10월 26일 목요일

[Cassandra 레퍼런스] Replication 복제

key space의 복제 전략은 주어진 노드 범위에서 어떤 노드가 복제본이 될지 결정합니다.
두 가지 주요 복제 전략은 SimpleStrategy와 NetworkTopologyStrategy입니다.


SimpleStrategy

SimpleStrategy는 단일 정수가 replication_factor로 정의되도록 합니다.
이것은 각 행의 사본을 포함해야하는 노드의 수를 결정합니다.
예를 들어, replication_factor가 3이면 세 개의 다른 노드가 각 행의 사본을 저장해야합니다.

SimpleStrategy는 구성된 모든 데이터 센터 또는 랙을 무시하고 모든 노드를 동일하게 취급합니다.
토큰 범위의 복제본을 결정하기 위해 Cassandra는 관심있는 토큰 범위부터 시작하여 링의 토큰을 반복합니다.
각 토큰에 대해 소유 노드가 복제본 집합에 추가되었는지 여부를 확인하고 그렇지 않은 경우 집합에 추가됩니다.
이 프로세스는 replication_factor 갯수의 별개 노드가 복제본 세트에 추가 될 때까지 계속됩니다.


NetworkTopologyStrategy

NetworkTopologyStrategy를 사용하면 클러스터의 각 데이터 센터에 replication factor를 지정할 수 있습니다.
클러스터가 단일 데이터 센터 만 사용하는 경우 NetworkTopologyStrategy를 SimpleStrategy보다 우선적으로 사용해야 나중에 새로운 실제 또는 가상 데이터 센터를 클러스터에 쉽게 추가 할 수 있습니다.

DC별로 복제 요소를 지정할 수 있을 뿐만 아니라 NetworkTopologyStrategy는 다른 랙의 데이터 센터에서 복제본을 선택하려고 시도합니다.
랙 수가 DC의 복제 인수보다 크거나 같으면 각 복제본이 다른 랙에서 선택됩니다.
그렇지 않으면 각 랙에는 최소한 하나의 복제본이 보관되지만 일부 랙에는 둘 이상의 복제본이 보관 될 수 있습니다.
이 랙 인식 동작에는 잠재적으로 놀라운 영향이 있습니다.
예를 들어 각 랙에 짝수 개의 노드가 없으면 가장 작은 랙의 데이터로드가 훨씬 커질 수 있습니다.
마찬가지로 단일 노드가 새 랙으로 부트 스트랩되는 경우 전체 링의 복제본으로 간주됩니다.
이러한 이유 때문에 많은 운영자가 단일 "랙"에 모든 노드를 구성하려고합니다.


Tunable Consistency

Cassandra는 일관성 레벨을 통해 일관성과 가용성 간의 작업 당 절충점을 지원합니다.
기본적으로 작업의 일관성 수준은 작업을 성공으로 간주하기 위해 코디네이터에 응답해야하는 복제본 수를 지정합니다.

다음과 같은 일관성 수준을 사용할 수 있습니다 :

ONE : 하나의 복제본 만 응답해야합니다.
TWO : 두개의 복제본이 응답해야합니다.
THREE : 세개의 복제본이 응답해야합니다.
QUORUM : 대다수 (n / 2 + 1)의 복제본이 응답해야합니다.
ALL : 모든 복제본이 응답해야 합니다.
LOCAL_QUORUM : 로컬 데이터 센터의 복제본 (코디네이터가있는 데이터 센터 중 대부분)이 응답해야합니다.
EACH_QUORUM : 각 데이터 센터의 대부분의 복제본이 응답해야합니다.
LOCAL_ONE : 하나의 복제본 만 응답해야합니다. 다중 데이터 센터 클러스터에서는 읽기 요청이 원격 데이터 센터의 복제본으로 보내지지 않습니다.
ANY : 단일 복제본이 응답하거나 코디네이터가 힌트를 저장할 수 있습니다. 힌트가 저장되면 코디네이터는 나중에 힌트를 재생하여 복제본에 전달합니다. 이 일관성 레벨은 쓰기 조작에만 허용됩니다.

쓰기 작업은 일관성 수준에 관계없이 항상 모든 복제본으로 전송됩니다.
일관성 레벨은 클라이언트에 응답하기 전에 코디네이터가 대기하는 응답 수를 제어합니다.

읽기 조작의 경우, 코디네이터는 보통 일관성 레벨을 충족시키기에 충분한 복제본에 대해 읽기 명령을 행합니다.
여기에는 몇 가지 예외가 있습니다. :

- 위험한 재시도는 다른 복제본이 지정된 시간 창 내에서 응답하지 않은 경우 추가 복제본에 중복 읽기 요청을 발행 할 수 있습니다.

- read_repair_chance 및 dclocal_read_repair_chance (테이블 스키마의 일부)를 기반으로, 잠재적으로 일치하지 않는 데이터를 복구하기 위해 모든 복제본에 읽기 요청이 무작위로 전송 될 수 있습니다.


Picking Consistency Levels

겹칠 정도로 높은 읽기 및 쓰기 일관성 수준을 선택하면 "강한"일관성이 발생합니다.
이것은 일반적으로 W + R> RF로 표시됩니다. 여기서 W는 쓰기 일관성 레벨이고 R은 읽기 일관성 레벨이며 RF는 복제 인수입니다.
예를 들어 RF = 3 인 경우 QUORUM 요청에는 세 개의 복제본 중 두 개 이상의 응답이 필요합니다.
QUORUM이 쓰기 및 읽기에 모두 사용되는 경우 최소한 하나의 복제본이 쓰기 요청과 읽기 요청에 모두 참여하도록 보장되므로 가장 최근 쓰여진 데이터가 읽히게 됩니다.
다중 데이터 센터 환경에서는 LOCAL_QUORUM을 사용하여 더 약하지만 유용한 보증을 제공 할 수 있습니다 : 동일한 데이터 센터 내에서 가장 최근 쓰여진 데이터를 볼 수 있습니다.

이러한 유형의 강력한 일관성이 필요하지 않으면 처리량, 대기 시간 및 가용성을 향상시키기 위해 ONE과 같은 낮은 일관성 수준을 사용할 수 있습니다.

참조 : http://cassandra.apache.org/doc/latest/architecture/dynamo.html#replication

댓글 없음 :

댓글 쓰기