2017-02-28 4 views
1

나는 카산드라를 연구 중이며 내가 연구하고있는 프로젝트를위한 클러스터를 설정하는 과정에있다. 다음 예제를 고려하십시오. 각각에 대해 200GB 공간이있는 5 노드 클러스터를 설정한다고 가정 해보십시오. 이는 전체 공간의 최대 1000GB (둥근 약 1TB)에 해당합니다. 내 파티션이 클러스터에서 균등하게 분할되었다고 가정하면 노드를 쉽게 추가하고 선형 확장 성을 달성 할 수 있습니다. 그러나이 5 개의 노드가 200GB의 SSD 한계에 도달하면 어떻게 될까요? 이 경우 5 개의 노드를 추가 할 수 있으며 이제는 10 개의 노드로 분할됩니다. 그러나 오래된 노드는 여전히 클러스터의 일부이므로 데이터를 쓰고 있습니다. 이 5 개의 이전 노드를 '읽기 전용'으로 만드는 방법이 있습니까? 전체 클러스터에서 무작위 읽기 쿼리를 실행하고 싶지만 더 이상 구형 노드에 쓰기를 원하지 않습니다 (200GB 제한에 의해 제한됨).카산드라 클러스터의 노드가 한계에 도달하면 어떻게해야합니까?

도움을 주시면 대단히 감사하겠습니다. 고맙습니다.

참고 : 쿼리의 99 %가 읽기에 1 % 이하인 쓰기 쿼리라고 말할 수 있습니다. 앱이 Cassandra에서 클릭 이벤트를 지속해야합니다.

답변

1

문제를 제대로 이해하는 데 문제가 있습니다.

새로운 5 노드를 추가하면 일부 토큰 범위가 할당되므로 일부 데이터로드가 새 노드로 전송된다는 것을 알고 있다고 가정합니다.

이제 여러분도 알고 계시 겠지만, 오래된 5 노드가 한계에 도달하여 작성할 수 없다고 우려한다면 새로운 노드가 데이터로드를 공유 할 때 발생하지 않으므로 여유 공간이 생깁니다 지금은 더 쓸 수 있습니다.

노드에 대한 읽기 및 쓰기 격리는 완전히 다른 문제입니다. 그러나 이러한 5 개의 노드로만 읽기를 분리하고 새로운 5 개의 노드에 쓰기를 원할 경우이 작업을 수행하는 가장 좋은 방법은 동일한 클러스터의 다른 데이터 센터에 5 개의 노드를 추가 한 다음 다른 일관성 레벨을 사용하여 읽기 및 쓰기 작업을 수행하는 것입니다. 오래된 데이터 센터를 읽기 전용으로 만들 필요성을 충족 시키십시오.

그러나 새로운 데이터 센터는 처음부터 데이터로드를 줄이지 않습니다. 그것은 심지어 그 자체로 동일한 부하를 취할 것입니다. (따라서 두 가지 문제를 동시에 해결하려면 5 개 이상의 노드가 필요합니다. 새 데이터 센터를 만들어 읽기/쓰기를 분리 할 수있는 노드는 거의 없으며 새 데이터 센터에는 노드가 5 개 이상 있어야합니다. 가장 좋은 방법은 새 노드를 추가하거나 데이터 제한을 늘려 데이터로드를 모니터링하고 문제가 발생하기 전에 해결하는 것입니다.

읽기를 위해 제공 한 노드가 다른 데이터 센터의 노드인지 확인해야합니다.

는 상황이 다음과 같은 한 고려 :

DC1을 (N1, N2, N3, N4, N5)

DC2 (N6, N7, N8, N9, N10)

이제 노드 n1을 제공하고 노드 n6을 제공하는 쓰기를 위해

이제 읽기 전용/쓰기 격리는 다음과 같은 옵션에서 올바른 일관성 레벨을 선택하여 수행 할 수 있습니다.

LOCAL_QUORUM

또는

LOCAL_ONE

이 기본적으로 로컬 데이터 센터 만에 복제본에 대한 검색을 제한합니다. 이상 이러한 참조에서

봐는 : 클러스터가 한계에 도달하면 Adding a datacenter to a clusterConsistency Levels

+0

답장을 보내 주셔서 감사합니다. 내 이해는 다음과 같습니다. 노드를 클러스터에 추가하면 이전 노드의 데이터가 그대로 유지되지만 cassandra의 vnode 및 적절한 분할 전략을 사용하면 새 데이터가 이전 노드로 방출됩니다. 계속 데이터를 가져올 수 있습니다. Cassandra는 노드를 추가하여 이전 노드의 데이터를 가져 와서 새 노드로 전송 한 다음 이전 노드의 데이터를 삭제합니다. – Ankush92

+0

나는 거의 같은 말을하고 있습니다. 동일한 데이터 센터에 노드를 추가하면 토큰 범위 중 일부가 전체 데이터로드에 기여하기 위해 할당됩니다 (험담을 통해 다른 노드에 알려짐). 이 토큰 범위에 해당하는 데이터는 해당 새 노드에 보관됩니다. 따라서 일부 오래된 노드는 자체로드 중 일부를 해제합니다. – r005t3r

+0

또한이 새로운 데이터 배포는 일정하지 않습니다. 하지만 * 노르 트 툴 수리를 실행하여 균형을 잡을 수 있습니다. 추신. 그것의 * nodetool 정리 * – r005t3r

1

보통 우리는 클러스터에 새 노드를 추가 할 수 있습니다. 새 노드를 추가 한 후 이전 cassandra 클러스터 노드는 데이터를 새 노드에 배포합니다. 그리고 나서 모든 노드에서 nodetool cleanup을 사용하여 새 노드에 배포 된 데이터를 정리합니다. 전체 시나리오는 단일 DC에서 발생합니다. 예를 들어

:

가정하자, 당신은 DC1 3 노드 (A,B,C)DC2 1 개 노드 (D) 있습니다. 노드가 한계에 도달했습니다. 따라서 DC1에 새 노드 (E)을 추가하기로 결정했습니다. 노드 A, B, C은 노드 E에 데이터를 배포하고 A, B, Cnodetool cleanup을 사용하여 공간을 정리합니다.

+0

거룩한 ****. 정말 끝내주는 군. 감사 . – Ankush92

관련 문제