2013-07-12 3 views
3

내 Cassandra 노드에서 정기적으로 nodetool repair을 실행하면 장애가 발생합니까?"nodetool repair"작업은 얼마나 비쌉니까?

Planet Cassandra FAQ 노트 (강조 추가)이

안티 엔트로피 노드 복구 - 데이터의 경우 자주 읽지 않았거나 장기간 내려왔다 노드, 노드에 데이터를 업데이트 복구 프로세스 (안티 엔트로피 복구라고도 함)는 복제본의 모든 데이터를 일관성있게 만듭니다. 노드 복구 (nodetool 유틸리티 사용) 은 정기적 인 클러스터 유지 관리 작업의 일부로 정기적으로 실행해야합니다.

나는 그것이 nodetool repair을 정기적으로 실행하는 것으로 보이는 유일한 참조입니다. 싸구려라면 정기적으로 실행해도 문제가되지 않지만 비용은 얼마나 들까 요? 노드의 모든 레코드에 대해 일관성 검사 읽기와 동일한 작업을 수행합니까? 아니면 그보다 더 영리한가요? 문서에는 Merkle tree의 사용에 대한 설명이 있지만 작업이 얼마나 비쌉니까.

노드에 500GB의 데이터가 있고 노드가 실제로 다른 노드와 일관성이있는 경우 (복구는 아무 작업도 수행하지 않음), 복구가 디스크에서 읽은 데이터의 양 (모든 500GB 몇 시간 걸릴까요?) 또한 LAN을 통해 전송되는 데이터의 양 (LAN을 통해 500GB를 모두 전송하는 데 1 시간 정도 걸릴 수 있음)에 대해서도 마찬가지입니다.

답변

15

일부 유스 케이스는 다른 것보다 정기 수리에 더 의존합니다. ConsistencyLevel.ALL 이하에서 삭제를 수행하면 삭제 된 열이 다시 생기지 않도록 복구를 실행해야합니다. 삭제를하지 않으면 힌트가있는 핸드 오프에 의존하여 복구를 읽으면 대부분의 경우 일관성을 유지할 수 있습니다. 낮은 일관성 수준으로 읽고 쓰거나 정기적으로 서버 작동 중지 또는 과부하가 발생하면 수리를 실행하는 것이 좋습니다.

모두 (임의로 -pr (기본 범위) 옵션을 사용하여 노드가 기본 범위를 소유하는 범위 만 사용) 노드의 데이터를 통해 어떤 수리를 수행하고 빌드합니다 Merkle 나무. 또한 이러한 범위의 복제본을 저장하는 모든 노드에 동일한 작업을 수행하라는 메시지를 보냅니다. 초기 복구 노드에서 복제 된 데이터를 통해서만 읽습니다.

500GB가있는 노드에서 Merkle 트리를 구성하려면 전체 500GB를 읽어야합니다 (-pr을 사용하면 대략 복제 계수가 낮아질 수 있습니다). 그러나 Merkle 트리는 일정한 크기 (수 MB)이므로 노드가 동기화되어 있으면 네트워크를 통해 전송되는 트리가 거의 없습니다.

예약 된 복구를 실행하는 가장 좋은 방법은 차례대로 각 노드에서 -pr을 사용하여 실행하는 것입니다. 이렇게하면 동일한 데이터를 여러 번 복구하지 않아도됩니다. 또한 클러스터에 추가로드가 발생하지 않도록 한 번에 하나의 노드에서만 실행하십시오.

+1

"삭제 된 열이 다시 생기게 됨"부분을 자세히 설명해 주시겠습니까? 삭제가 발생한 후 약간의 시간 동안 삭제 된 열이 계속 나타나거나 'ConsistencyLevel.ALL'을 사용하지 않으면 Cassandra의 "결과 일관성"이 실제로 작동하지 않는다고 말하는 것입니까? 필자의 이해는 변경 사항이 결국에는 전파 될 것이므로 'ConsistencyLevel.ANY'를 사용하는 경우에도 결국 전체 클러스터에 걸쳐 삭제가 전파되어야한다는 것입니다. 그게 잘못된거야? – aroth

+0

@aroth 위 쿼리에 대한 답변을 얻었습니까? – Naresh

+0

@Naresh - 아니요.하지만 지금은 약간의 시간 동안 프로덕션 환경에서 일관성 수준을 낮추어 왔지만 실제로 그러한 문제는 관찰하지 않았습니다. 물론 그것은 일화이며, 샘플 크기가 1이고, 나쁜 일이 일어나지 않을 수도 있다는 것을 의미하지는 않습니다. 그러므로 소금 한 알씩 먹으십시오. – aroth