2014-01-15 5 views
1

3 개의 복제가있는 20 개의 노드로 구성된 프로덕션 클러스터가 있었으며 데이터의 일부 (예 : 3 복제)를 1 복제만으로 테스트 환경에 복사하려고합니다.cassandra에서 cassandra로 데이터 복사

sstableloader를 사용할 수 있지만 네트워크를 통해 모든 600GB를 다른 클러스터에 복사해야합니까?

데이터 복사본 하나만 다른 클러스터로 이동하는 방법입니까?

가장 좋은 방법은 무엇입니까?

답변

2

나는 당신이 RandomPartitioner를 사용하고 있다고 가정합니다. 수행중인 작업은 테스트 환경에있는 노드 수에 따라 다릅니다. SimpleStrategy의 경우

:

A. 당신이 당신의 테스트 환경에서 20 개 노드를 사용하는 경우 :

  1. 테스트 환경의 각 노드에 동일한 토큰을 할당;
  2. 모든 노드에서 nodetool snapshot을 동시에 사용하십시오.
  3. 같은 토큰을 가진 생산 노드의 스냅 샷 디렉토리의 데이터를 동일한 토큰을 사용하여 테스트 노드에 복사하십시오.
  4. 복제 계수를 1로 변경하려면 다음과 같이 키 공간을 새 복제 설정으로 간단히 업데이트하십시오. http://wiki.apache.org/cassandra/Operations#Replication
  5. 각 노드에서 정리를 실행하십시오.

B. 당신이 생산에 비해 노드의 수를 적게 사용하는 경우

  1. 균등하게 균형 잡힌 반지를 얻을 수있는 새로운 노드에 토큰을 할당을;
  2. 모든 노드에서 nodetool snapshot을 동시에 사용하십시오.
  3. 프로덕션의 모든 노드에서 테스트 환경의 각 노드로 모든 데이터를 복사해야합니다.
  4. LevelCompaction을 사용하는 경우 노드를 시작하기 전에 해당 압축을 사용하는 열 패밀리의 날짜 디렉토리에서 metadata.json을 제거해야합니다. 이렇게하면 LevelCompaction이 새 설정에서 레이블을 정확하게 압축하고 그룹화합니다.
  5. 위와 동일 4.
  6. 상기 5와 동일;

테스트를 위해 복원 된 버전의 특정 시점에서 데이터의 일관성에 신경 쓰지 않으면 스냅 샷을 건너 뛰고 데이터 디렉토리를 바로 복사 할 수 있습니다.

고려할 사항 :

이 프로세스는 디스크 입출력에 큰 영향을줍니다. 라이브 클러스터에서이 작업을 수행하는 경우 스냅 샷을 사용하여 특정 시점에서 상태를 잠그고 점진적으로 복사하십시오.

NetworkTopologyStrategy의 경우 :

당신은 위의 과정을 반복하지만, 단 하나의 랙에있는 데이터의 100 %를 형성하는 노드의 조합으로 복사 할 수 있습니다.이 랙의 노드에 복제되지 않은 다른 랙의 노드에 대해 누락 된 쓰기가 발생할 가능성이있는 경우 위와 같은 모든 노드의 모든 내용을 복사해야합니다.

이상적인 솔루션 :

, 당신이 주위에 약간의 자동화를 만들고 싶어 내 회사처럼 당신이 테스트를 위해 매일이 작업을 수행하려는 경우. 내 생각에 백업 및 복원을위한 최고의 자동화는 Netflix의 Priam입니다. https://github.com/Netflix/Priam

S3에 프로덕션 백업을 저장했습니다. 코드는 테스트중인 새 시스템을 불러오고 하나의 영역에 대해 동일한 토큰을 할당하고 마지막 날 백업 이후의 범위까지 프리앰 스냅 샷 시간을 설정하면 테스트 노드가 자동으로 s3 백업에서 데이터를 수신합니다.

희망은 내 도움이 당신을 도왔습니다.

+0

arya. 하지만 우리는 murmur3 파티션을 사용하고 vnode는 토큰이 아닙니다. 우리는 크기가 계층화 된 압축과 함께 SimpleStrategy와 CF를 사용하고 있습니다. 테스트 클러스터에 노드가 3 개 밖에 없었습니다. 어떻게 20 노드 데이터를 3 노드로 복사 할 수 있습니까? 3 노드에 데이터를 배포해야합니까? – Rock

관련 문제