카산드라 : 정비


9

Cassandra에 경험이 없지만 SQL 기반 관계형 데이터베이스에 대한 경험이 있습니다.

한 번 배포 된 Cassandra를 유지 관리하는 방법에 대한 모범 사례 정보를 찾을 수 없었습니다. 데이터베이스를 VACUUM해야합니까? 읽기 / 쓰기로드로 인해 저장소에서 조각화가 발생한다고 생각해야합니다.

또는보다 일반적으로 : Cassandra 프로덕션 배포를 유지 관리하기위한 모범 사례는 무엇입니까? 시스템 상태를 유지하기 위해 정기적으로 수행해야하는 작업은 무엇입니까? 운영 매뉴얼에서는 실제로 이러한 측면에 대해서는 다루지 않습니다.

감사.


이제 압축은 큰 문제이며 자동으로 실행됩니다. 그러나 오랫동안 리눅스에서 클러스터를 실행할 때 걱정해야 할 다른 것들이 있습니까?
Mayur Patel

답변:


14

일반적으로 잘 설계된 클러스터는 손대지 않고도 몇 년 동안 살 수 있습니다. 몇 년 동안 진행된 클러스터가있었습니다. 그러나 다음은 몇 가지 지침입니다.

모니터링은 매우 중요합니다.

1) 대기 시간을 모니터링합니다. 지연 시간을 추적하려면 opscenter 또는 자주 사용하는 메트릭 도구를 사용하십시오. 지연 시간 증가는 GC 일시 중지 (쓰기 작업보다 읽기 작업에서 더 흔함), 안정적인 문제 등을 포함하여 문제가 발생할 수 있습니다.

2) 안정적인 카운트를 모니터링합니다. 압축을 오버런하면 SSTable 수가 증가합니다 (각 sstable은 정확히 한 번 작성됩니다-삭제는 압축을 통해 이전 sstable을 새로운 sstable로 결합하여 처리됩니다).

3) 노드 상태 변경 (업 / 다운 등)을 모니터링합니다. 노드 플랩이 보이면 정상이 아니므로 조사하십시오.

4) 디스크 사용량을 추적하십시오. 일반적으로 50 % 미만을 유지해야합니다 (특히 STCS 압축을 사용하는 경우).

정기적으로 수행하지 말아야 할 몇 가지 기본 사항이 있습니다.

1) 명시 적으로 실행하지 마십시오 nodetool compact. 치명적이지는 않지만 매우 큰 마구간을 생성하여 압축에 계속 참여할 가능성이 적습니다. 반드시 계속 실행할 필요는 없지만 때로는 삭제 / 덮어 쓴 데이터를 제거하는 데 도움이 될 수 있습니다.

2) nodetool repair일반적으로 권장됩니다 gc_grace_seconds(기본적으로 10 일). 덜 중요한 워크로드가 있습니다. 수리가 필요한 가장 큰 이유는 삭제 마커 ( tombstones)가 만료되기 전에 전송되도록 gc_grace_seconds하는 것입니다. 수리하지 않고!). 삭제를 발행하지 않고 충분한 일관성 수준 (예 : QUORUM에서 읽기 및 쓰기)으로 쿼리하면 실제로 수리하지 않고 생활 할 수 있습니다.

3) 수리하려는 경우 증분 수리 사용을 고려하고 한 번에 작은 범위를 수리하십시오.

4) 압축 전략이 중요합니다. STCS는 쓰기에 좋고 LCS는 읽기에 좋습니다. DTCS에는 몇 가지 단점이 있습니다.

5) 데이터 모델이 중요합니다. 인덱스되지 않은 쿼리가 큰 테이블에 도달 할 때 RDBMS / SQL 환경이 문제를 일으키는 것처럼 Cassandra는 매우 큰 행 / 파티션에 문제가 될 수 있습니다.

6) 스냅 샷이 저렴합니다. 매우 싸다. 거의 즉각적인 하드 링크만으로 거의 디스크 공간이 거의 들지 않습니다. 버전, 특히 주요 버전을 업그레이드하기 전에 스냅 샷을 사용하십시오.

7) 삭제에주의하십시오. # 2에서 알 수 있듯이 delete는 디스크에 더 많은 데이터를 만들고 AT LEAST를 위해 비워 두지 않습니다 gc_grace_seconds.

다른 모든 것이 실패하면 :

나는 Prod의 Cassandra가 모든 규모의 클러스터를 관리하기 위해 전담 머리가 필요하다고 제안하는 기사를 보았습니다. 반드시 사실인지는 모르겠지만 걱정되는 경우 타사 컨설턴트를 고용하고 싶을 수도 있습니다 (TheLastPickle, Pythian ) 또는 지원 계약 (Datastax)이있어 안심할 수 있습니다.


1
제프, 늦었 어 잠 좀 줘!
Aaron

1
남자, 나는 이것에 대한 날짜를 몰랐다. 정말 늦었습니까?
Jeff Jirsa

2

에 따르면 카산드라 수리 문서 , nodetool repair다음과 같은 상황에서 실행되어야합니다 :

  • 모범 사례로 매주 수리를 예약해야합니다. 참고 : 삭제가 발생하지 않으면 여전히 정기적 인 복구를 예약해야합니다. 열을 null로 설정하면 삭제됩니다.
  • 노드 복구 중 예를 들어, 실패 후 노드를 다시 클러스터로 가져올 때.
  • 자주 읽지 않는 데이터가 포함 된 노드에서.
  • 다운 된 노드에서 데이터를 업데이트합니다.

읽기 / 쓰기로드로 인해 저장소에서 조각화가 발생한다고 생각해야합니다.

Cassandra의 데이터는 여러분이 생각하는 방식으로 "조각화"되지 않습니다. 그러나 삭제는 삭제 표시의 배치를 트리거하며 일반적인 압축 프로세스는 삭제 표시를 제거합니다.

압축은 큰 문제이며 자동으로 실행된다는 것을 이해합니다.

옳은. DataStax 담당자가 compact수동으로 실행 하면 항상 수동으로 실행 해야 한다고 들었 습니다. 압축은 키 공간에있는 기존의 모든 SSTABLE을 단일 SSTABLE 파일로 "압축"하여 작동하기 때문입니다. 해당 SSTABLE 파일에 일부 열 그룹이있을 수 있으며 압축 임계 값을 초과하여 시간이 오래 걸리므로 자동 압축이 다시 실행될 가능성이 매우 낮습니다.

기본적으로 정기적 nodetool repair으로 실행 nodetool compact하고 절대 실행하지 말고 백업 전략 (스냅 샷, 증분 백업 또는 둘 다)을 구현해야합니다.


따라서을 실행 nodetool compact하면 클러스터를 작동시키지 않는 한 영원히 파멸됩니까? 아니면 자동 압축을 다시 시작하는 방법이 있습니까?
2rs2ts

1
@ 2rs2ts 음, "영원히"는 아닙니다. 수동 압축을 실행하면 ( "예") 정기적으로 계속 실행해야합니다 (주간 수리 직후에 항상 수행함). DataStax 담당자로 이것을 명확히하지만 , SSTABLE 파일을 다시 작성하는 이벤트가있는 경우 (실행시 업그레이드와 같은 ) "수동 압축 지옥"에서 당신을 구하기에 충분한 것을 재설정 할 수 있다고 생각 합니다 . upgradesstables
Aaron

고마워요. 불행히도.
2rs2ts

1
자동 압축은 결국의 출력으로 자연스럽게 압축 할 수있을 정도로 큰 안정을 만듭니다 nodetool compact. 또한 sstablesplit을 사용하여 비정상적으로 큰 불안정을 제거 할 수 있으므로을 "실행 취소"할 수 있습니다 nodetool compact.
Jeff Jirsa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.