1개 노드 Cassandra 클러스터를 2개 노드로 동적으로 변경

1개 노드 Cassandra 클러스터를 2개 노드로 동적으로 변경

따라서 대부분의 시간 동안 매우 휴면 상태이지만 한 달 중 며칠 동안은 고속 버스트가 필요한 애플리케이션이 있습니다. 우리는 EC2에 배포하고 있기 때문에 대부분의 시간 동안 하나의 Cassandra 서버만 가동하고 싶고, 급증하는 날에는 로드를 처리하는 데 도움이 되도록 서버를 하나 더 가동하고 싶습니다(첫 번째 서버보다 RAM과 CPU가 더 많음). 이를 수행하는 가장 좋은 방법은 무엇입니까? 다른 접근 방식을 취해야 할까요?

내가 할 계획에 대한 몇 가지 참고 사항:

  • 노드를 가동하고 즉시 복구하세요.
  • 버스트 시간이 초과되면 강력한 노드가 폐기됩니다.
  • 상시 접속 서버를 시드 노드로 사용

내 주요 질문은 복제 인수 2를 원하기 때문에(두 노드에 모든 데이터가 있음) 노드가 모든 데이터를 공유하도록 하는 방법이지만 서버가 하나만 있는 동안에는 작동하지 않습니다. 한 대가 아닌 두 대의 추가 서버를 가져와야 합니까?

답변1

아주 쉽게 할 수 있을 것 같습니다복제 인자 변경.

이는 에서도 언급된다.카산드라 위키에서 복제 인자를 늘리거나 줄이는 방법에 대한 지침을 찾을 수 있습니다.

이는 다음과 같은 작업이 가능해야 함을 의미합니다.

  • 복제 인수를 1에서 2로 변경
  • 모든 데이터의 복사본을 수신할 수 있도록 버스트 노드를 가동하고 수리하세요.
  • ... 일해 ...
  • 폐기 버스트 노드
  • 복제 인수를 2에서 1로 다시 변경
  • 정리 실행

답변2

내 경험상 복제 요소를 즉시 변경하는 것은 그다지 잘 작동하지 않습니다. :-( 적어도 나에게는 수정하는 데 시간이 많이 걸리는 스키마 불일치로 끝날 수 있습니다.

큰 소리로 생각하지만 다른 가능한 경로는 다음과 같습니다(적절하게 타이밍 변경).

  1. cassandra.yaml에서 GC 유예 기간을 30일로 늘립니다(디스크에서 삭제되기 전에 삭제 표시가 유지되는 기간을 결정함).
  2. 필요 여부에 관계없이 15일마다 두 번째 노드를 가동합니다. 실행 간에 데이터/커밋 로그 등이 보존되는지 확인하세요. 이는 두 번째 노드를 가동해야 할 때 더 빨리 시작한다는 의미입니다.
  3. 첫 번째보다 RAM과 CPU가 더 많아졌습니다.

Cassandra는 각 노드가 담당하는 링의 양에 따라 작업 부하를 효과적으로 나눕니다. 링을 더 쉽게 분할하기 위해 두 번째 노드에 첫 번째 노드의 용량을 두 배로 늘리거나 첫 번째 노드와 동일한 크기의 노드 2개를 추가하는 것이 더 쉬울 수 있습니다.

힌트가 있는 핸드오프로 인해 나머지 노드에서 불필요하게 디스크가 채워지므로 노드를 삭제할 때 여전히 수동 nodetool 개입이 필요합니다.

관련 정보