2013-09-30 7 views
1

4 개 노드 클러스터가 있고 모든 노드를 이전 버전에서 Cassandra 1.2.8로 업그레이드했습니다. 클러스터에있는 전체 데이터의 크기는 8GB입니다. 이제 다운 타임없이 클러스터의 모든 4 노드에서 vNode를 활성화해야합니다. 어떻게해야합니까?Cassandra 1.2.8에서 vNodes 활성화

답변

1

TL; 는 config가

을 편집 한 후

없음 당신에게 need to restart servers 문제 v- 노드를 가능하면 많은 양의 데이터가 (워드 프로세서는 '이동 nodetool'고전 유사한 맥락에서 말을 무작위로 재분배 의미이다 에서

1

conf/cassandra.yaml 당신이 initial_token 매개 변수를 주석 처리해야하고, num_tokens 매개 변수 (기본값 256으로 내가 믿는)을 가능하게 할 것이다. 각 노드에 대해이 작업을 수행합니다. 그런 다음 각 노드에서 카산드라 서비스를 다시 시작해야합니다. 그리고 d를 기다려라. 클러스터 전체에 재배포 할 수 있습니다. 8GB는 너무 오래 걸리지 않아야합니다 (노드가 모두 동일한 클러스터에있는 경우). 읽기 요청은 계속 작동하지만 데이터 재분배가 완료 될 때까지 성능이 저하 될 수 있습니다.

편집 : 클러스터의

  • 서비스 해제 두 개의 노드 : 여기에 데이터를 마이그레이션 할 수있는 잠재적 인 전략이다. 토큰 공간은 다른 두 노드 사이에 50-50 분배되어야합니다.
  • 해제 된 두 노드에서 기존 데이터를 제거한 다음 클러스터 이름이 다른num_token 매개 변수가 활성화 된 Cassandra 데몬을 다시 시작하십시오.
  • 이전 클러스터의 8GB 데이터를 새 클러스터로 마이그레이션하십시오. 이를 달성하기 위해 파이썬으로 빠른 스크립트를 작성할 수 있습니다. 데이터 양이 충분하기 때문에 시간이 오래 걸리지 않아야합니다.
  • 데이터가 새 클러스터에서 마이그레이션 된 후에는 이전 클러스터에서 두 개의 이전 노드를 폐기하십시오. 데이터를 제거하고 새 클러스터 이름num_tokens 매개 변수를 사용하여 Cassandra를 다시 시작하십시오. 부트 스트랩이 발생하고 새 클러스터의 기존 노드 두 개에서 데이터가 스트리밍됩니다. 한 번에 하나의 노드 만 부트 스트랩하는 것이 바람직합니다.

이러한 단계를 통해 서비스가 완전히 중단 된 상황에 직면해서는 안됩니다. 얼마 동안 용량이 줄어들 것입니다.하지만 8GB는 대용량 데이터가 아니기 때문에 신속하게이를 수행 할 수 있습니다.

+0

num_tokens가 증가해도 데이터가 재분배되지 않습니다. – Richard

+0

@ 리차드 맞습니다. 내 잘못이야. – Nikhil

1

Nikhil이 말했듯이 num_tokens를 늘리고 각 노드를 다시 시작해야합니다. 다운 타임없이 한 번에 하나씩 수행 할 수 있습니다.

그러나 num_tokens를 늘려도 데이터가 재배포되지 않으므로 실제로 vnode를 사용하지 않습니다. 각 노드를 폐기하고 부트 스트래핑 (일시적으로 클러스터가 모든 데이터를 소유하는 한 노드와 극단적으로 불균형을 맺게 됨)을 통해 또는 셔플을 통해 수동으로 재배포해야합니다 (문제가되는 Lyuben 링크에 설명되어 있음). 새 데이터 센터를 만드는 것처럼 하드웨어를 임시로 복제하십시오. 후자는 내가 아는 신뢰할 수있는 유일한 방법이지만 여분의 하드웨어가 필요합니다.