2017-01-26 14 views
3

데이터 센터에 새 노드를 추가 한 다음 Add new node to existing cluster in cassandra에 따라 nodetool cleanup을 실행합니다. 그러나 정리가 끝나면 데이터가 손실 된 것으로 나타났습니다.cassandra에서 nodetool 정리 후 일부 데이터가 손실 된 이유

어떤 이유가있을 수 있습니까?

+2

새로운 노드를 추가하기 전과 후에 nodetool status의 결과와 같이 데이터를 잃어버린 방법에 대해 더 자세히 설명해주십시오. – markc

답변

6

예, 그것은 nodetool cleanup는 잠재적으로 파괴 도구임을 이해하는 것이 중요합니다. 클러스터는 완전히 복구 된 상태 여야합니다 (이전에 정상적으로 실행 된 nodetool repair부터).

클러스터에 새 노드를 추가하면 각 노드가 담당하는 토큰 범위가 조정되고 노드마다 낮아집니다. 이로 인해 더 이상 책임지지 않는 원래 노드에 데이터가 남습니다. 디자인은 인 입니다.

어떤 이유에서든 노드 추가 프로세스가 실패하고 클러스터를 원래 크기로 두어야한다는 아이디어가 있었지만 데이터는 여전히 존재합니다. 그러나 처음에 클러스터가 완전히 복구 된 상태에 있다고 보장 할 수 없으며 정리가 실행 된 경우 모든 복제본이 적절한 노드에 생성되지 않았을 가능성이 있습니다. 그러나 nodetool getendpoints처럼 부트 스트랩 프로세스는 그럴 것이라고 추정했을 것입니다.

클러스터에 nodetool repair을 정기적으로 실행하여 을 실행하고 nodetool cleanup을 실행하기 전에을 실행하는 것이 중요합니다.

+0

'nodetool repair '가 정기적으로 실행되어야한다는 점에 동의합니다. 올바르게 지적하면 매우 중요합니다. 그러나'nodetool cleanup'은 노드가 소유하지 않은 범위 만 제거합니다. 그렇다면 일단 부트 스트랩을하면 기존 노드의 범위가 효과적으로 취소 된 이후에 실제로 복구 할 수 없다고 말하는 것이 정확하지 않을까요? – markc

+0

@markc 하나의 복제본이 살아남아 노드의 유효한 범위에있게되면 복구 (부트 스트랩 이후)가 도움이됩니다. 그런 식으로 놓친 복제본은 스트리밍되어야합니다. 그러나 범위에 대한 모든 복제본이 손상되거나 소유 범위 내에 있지 않으면 부트 스트랩 이후의 복구가 실제로 많은 일을하지 않을 것입니다. – Aaron

1

nodetool cleanup은 더 이상 노드에 속하지 않으므로 노드를 추가하고 데이터 부분을 전송 한 후에이 "부분"은 더 이상 이전 노드에 속하지 않으므로 정리를 실행하면이 노드의 일부 공간이 비워집니다 .

이전 노드의 저장소가 작아 졌음을 확인하면 데이터 손실이 없었습니다.

반면에 실제로 어떤 데이터를 찾을 수없는 경우 데이터 손상 또는 삭제 표시 (삭제 표시 포함)가 원인 일 수 있습니다. 데이터 손실로 인한 결과는 무엇입니까?