Cassandra Archi구조 및 복제 인자

⚡ 스마트 요약

Cassandra 이 아키텍처는 단일 장애 지점 없이 피어 노드 간에 데이터를 분산하며, 가십 프로토콜을 사용하여 조정하고 복제를 통해 데이터 내구성을 확보합니다. 이 페이지에서는 복제 전략, 일관성 수준, 내부 쓰기 및 읽기 경로를 포함한 모든 구성 요소를 다룹니다.

  • 🕸️ 피어투피어 디자인: 모든 노드는 동등하며 가십 프로토콜을 통해 상태를 교환하므로 마스터 노드가 존재하지 않아 장애가 발생할 염려가 없습니다.
  • 🧱 저장 구성 요소: 쓰기 작업은 커밋 로그와 메모리 테이블에 기록된 후 디스크의 변경 불가능한 SSTable에 플러시됩니다.
  • 🔁 복제 전략: SimpleStrategy는 단일 데이터 센터에 적합한 반면, NetworkTopologyStrategy는 데이터 센터별 및 랙별로 복제본을 배치합니다.
  • 🔢 복제 계수: 세 개의 노드에 세 개의 복사본을 설치하는 것은 단일 장애 지점을 제거하기 위한 표준 설정입니다.
  • ⚖️ 일관성 수준: 쿼리별로 선택된 레벨은 클라이언트가 응답을 받기 전에 몇 개의 복제본이 승인해야 하는지를 결정합니다.
  • 🔍 읽기 경로: 직접, 다이제스트 및 읽기 복구 요청이 결합되어 최신 데이터를 반환하고 오래된 복제본을 조용히 수정합니다.

Cassandra Archi구조 복제

Cassandra 처리하도록 설계되었습니다. 빅데이터. Cassandra의 주요 특징은 단일 장애 지점 없이 여러 노드에 데이터를 저장하는 것입니다.

이런 종류의 이유는 Cassandra'의 아키텍처는 하드웨어 장애가 언제든지 발생할 수 있다는 것입니다. 모든 노드가 다운될 수 있습니다. 장애가 발생하면 다른 노드에 저장된 데이터를 사용할 수 있습니다. 따라서, Cassandra 분산 아키텍처로 설계되었습니다.

Cassandra 피어 투 피어 방식의 분산형 아키텍처를 통해 여러 노드에 데이터를 저장합니다.

모든 노드는 다음을 사용하여 서로 정보를 교환합니다. 가십 프로토콜. 가십은 프로토콜이다. Cassandra 노드가 서로 통신할 수 있는 방법입니다.

구성 요소 Cassandra Archi강의

다음 구성 요소가 있습니다. Cassandra Archi강의:

Cassandra Archi강의
Cassandra Archi강의 다이어그램

위 다이어그램은 구성 요소들의 계층 구조를 보여줍니다. 노드는 데이터 센터 내에 있고, 데이터 센터는 클러스터 내에 있으며, 커밋 로그, 멤테이블, SSTable은 각 노드 내에 존재합니다.

노드

노드는 데이터가 저장되는 곳이다. 의 기본 구성품입니다 Cassandra.

데이터 센터

노드의 집합을 데이터 센터라고 합니다. 많은 노드가 데이터 센터로 분류됩니다.

Cluster

클러스터는 여러 데이터 센터의 집합입니다.

커밋 로그

모든 쓰기 작업은 Commit Log에 기록됩니다. Commit log는 크래시 복구에 사용됩니다.

메모리 테이블

Commit log에 데이터가 기록된 후 Mem-table에 데이터가 기록됩니다. 데이터는 임시로 Mem-table에 기록됩니다.

SS테이블

Mem 테이블이 특정 임계값에 도달하면 데이터가 SSTable 디스크 파일로 플러시됩니다. SSTable은 변경 불가능하므로 업데이트 시 이전 버전을 수정하는 대신 새 버전을 기록하고, 이후 압축이라는 백그라운드 프로세스를 통해 이러한 버전을 병합하고 더 이상 사용되지 않는 행을 삭제합니다.

데이터 복제 Cassandra

데이터 처리 중 언제든지 하드웨어 문제가 발생하거나 링크가 다운될 수 있으므로 문제 발생 시 백업을 제공할 수 있는 솔루션이 필요합니다. 따라서 단일 장애 지점이 발생하지 않도록 데이터가 복제됩니다.

Cassandra 이 두 가지 요소를 기반으로 서로 다른 노드에 데이터 복제본을 배치합니다.

  • 다음 복제본을 배치할 위치는 다음에 의해 결정됩니다. 복제 전략.
  • 서로 다른 노드에 배치된 총 복제본 수는 다음에 의해 결정됩니다. 복제 인자.

XNUMX개의 복제 요소는 단 하나의 데이터 복사본만 있음을 의미하고, XNUMX개의 복제 요소는 XNUMX개의 서로 다른 노드에 XNUMX개의 데이터 복사본이 있음을 의미합니다.

단일 장애 지점이 없도록 하기 위해, 복제 인자는 XNUMX이어야 합니다.

복제 전략에는 두 가지 종류가 있습니다. Cassandra.

SimpleStrategy의 Cassandra

단순전략 데이터 센터가 하나뿐인 경우 사용됩니다. SimpleStrategy는 파티셔너가 선택한 노드에 첫 번째 복제본을 배치합니다. 그 후 나머지 복제본은 노드 링에서 시계 방향으로 배치됩니다.

SimpleStrategy의 그림 표현은 다음과 같습니다.

SimpleStrategy의 Cassandra
SimpleStrategy의 Cassandra

네트워크토폴로지전략 Cassandra

네트워크토폴로지전략 데이터 센터가 두 개 이상인 경우 사용됩니다. NetworkTopologyStrategy에서 복제본은 각 데이터 센터에 대해 별도로 설정됩니다. NetworkTopologyStrategy는 다른 랙의 첫 번째 노드에 도달할 때까지 링에서 시계 방향으로 복제본을 배치합니다. 이 전략은 동일한 데이터 센터의 다른 랙에 복제본을 배치하려고 합니다.

이는 때때로 랙에 장애나 문제가 발생할 수 있는 이유 때문입니다. 그러면 다른 노드의 복제본이 데이터를 제공할 수 있습니다.

다음은 네트워크 토폴로지 전략을 그림으로 표현한 것입니다.

네트워크토폴로지전략 Cassandra
네트워크토폴로지전략 Cassandra

복제 계수는 존재하는 복사본의 수를 결정합니다. 주어진 요청에 응답해야 하는 복사본의 수는 별도의 설정이며, 이에 대해서는 다음에 설명합니다.

일관성 수준 Cassandra

일관성 수준은 클러스터 단위가 아닌 쿼리 단위로 설정됩니다. 이것이 바로 그 이유입니다. Cassandra 조정 가능합니다. 코디네이터가 클라이언트의 쓰기 요청에 응답하거나 읽기 요청에 응답하기 전에 몇 개의 복제본이 해당 요청을 승인해야 하는지 지정합니다. 값이 낮을수록 응답 속도가 빠르고, 값이 높을수록 최신 데이터가 더 확실하게 반환됩니다.

레벨 행동 일반적인 사용
ONE 복제본 중 하나가 응답해야 합니다. 가끔씩 오래된 데이터가 읽히더라도 괜찮은 고처리량 로깅 환경입니다.
정족수 전체 복제본의 과반수가 응답해야 하며, 이는 (RF / 2) + 1로 계산됩니다. 일관성과 가용성의 균형을 갖춘 범용적인 선택입니다.
로컬_쿼럼 로컬 데이터 센터 내의 복제본 대부분이 응답해야 합니다. 여러 데이터 센터로 구성된 클러스터는 지역 간 지연 시간을 방지하기 때문입니다.
공통 모든 복제품은 응답해야 합니다. 드문 경우입니다. 노드 하나라도 다운되면 요청이 완전히 실패합니다.
이 중 하나를 이용하세요 (쓰기 전용) 힌트를 통한 핸드오프는 복제본에 접근할 수 없더라도 성공으로 간주됩니다. 내구성을 완화할 수 있는 최대 쓰기 가능 시간.

읽기 레벨과 쓰기 레벨의 합이 복제 계수보다 클 때 높은 일관성이 보장됩니다. 복제 계수가 3인 경우, 쿼럼(QUORUM)에서 쓰기 및 읽기를 수행하면 2 더하기 2가 3보다 크기 때문에 이 규칙을 만족합니다. 하지만 1에서 쓰기 및 읽기를 수행하면 이 규칙을 만족하지 않으므로 읽기 시 이전 값이 반환될 수 있습니다.

복제본에 접근할 수 없을 때, 코디네이터는 정보를 저장합니다. 비치다 노드가 반환되면 이를 다시 재생하는데, 이것이 바로 ANY 레벨과 그 외 많은 부분이 작동하는 방식입니다. Cassandra'의 자가 치유 행동 작업.

쓰다 Opera에 Cassandra

코디네이터는 복제본에 쓰기 요청을 보냅니다. 모든 복제본이 가동되면 일관성 수준에 관계없이 쓰기 요청을 받게 됩니다.

일관성 수준 성공 확인으로 응답할 노드 수를 결정합니다.

데이터가 커밋 로그에 성공적으로 기록되면 노드는 성공 확인으로 다시 응답하고 memTable.

예를 들어, 복제 인자가 XNUMX인 단일 데이터 센터에서는 XNUMX개의 복제본이 쓰기 요청을 받습니다. 일관성 수준이 XNUMX이면 하나의 복제본만 성공 확인으로 응답하고 나머지 두 개는 휴면 상태로 유지됩니다.

노드 다운이나 다른 문제로 인해 나머지 두 개의 복제본이 데이터를 손실한다고 가정해 보겠습니다. Cassandra 내장된 복구 메커니즘을 통해 행의 일관성을 유지합니다. Cassandra.

여기서는 쓰기 프로세스가 어떻게 발생하는지 설명합니다. Cassandra,

  1. 노드에 쓰기 요청이 오면 우선 커밋 로그에 기록합니다.
  2. 그때 Cassandra mem-table에 데이터를 씁니다. 각 쓰기 요청 시 mem-table에 기록된 데이터는 커밋 로그에도 별도로 기록됩니다. Mem-table은 메모리에 임시로 저장된 데이터이고 Commit log는 백업 목적으로 트랜잭션 기록을 기록합니다.
  3. mem-table이 가득 차면 데이터가 SSTable 데이터 파일로 플러시됩니다.
쓰다 Opera에 Cassandra
쓰다 Opera에 Cassandra

SSTable은 제자리에서 편집되지 않기 때문에 삭제 작업을 해도 행이 즉시 제거되지 않습니다. 대신 삭제 마커라는 것이 남게 됩니다. 묘비 해당 행은 기록되고, 유예 기간이 지난 후 압축이 실행될 때만 사라집니다. 이것이 바로 삭제 작업이 많을 경우 압축이 완료될 때까지 읽기 속도가 느려지는 이유입니다.

읽기 Opera에 Cassandra

코디네이터가 복제본에 보내는 읽기 요청에는 세 가지 유형이 있습니다.

  1. 직접 요청
  2. 다이제스트 요청
  3. 수리 요청 읽기

코디네이터는 복제본 중 하나에 직접 요청을 보냅니다. 이후 코디네이터는 Consistency Level에 따라 지정된 개수의 Replica에 Digest 요청을 보내고, 반환된 데이터가 업데이트된 데이터인지 확인합니다.

그 후 코디네이터는 나머지 모든 복제본에 다이제스트 요청을 보냅니다. 노드가 오래된 값을 제공하는 경우 백그라운드 읽기 복구 요청이 해당 데이터를 업데이트합니다. 이 프로세스를 읽기 복구 메커니즘이라고 합니다.

직접 요청을 수신하는 복제본 내부에서는 가능한 한 디스크 접근을 피하도록 조회 순서가 설계되어 있습니다.

  1. The 메모리 테이블 최신 쓰기 작업이 아직 플러시되지 않았기 때문에 먼저 확인됩니다.
  2. The 행 캐시활성화된 경우, 추가 작업 없이 전체 요청에 응답할 수 있습니다.
  3. A 블룸 필터 각 SSTable에 대해 이 함수를 호출합니다. 이 함수는 "확실히 존재하지 않음" 또는 "존재할 가능성이 있음"으로 응답하여 대부분의 SSTable을 읽지 않고 건너뛸 수 있도록 합니다.
  4. The 파티션 인덱스 그리고 요약 정보는 블룸 필터 검사를 통과한 모든 SSTable 내에서 정확한 바이트 오프셋을 찾아냅니다.
  5. 여러 SSTable에서 일치하는 조각들이 병합되며, 각 열에 대해 가장 최근 타임스탬프가 우선시됩니다.

블룸 필터는 디스크 탐색이 발생하기 전에 거의 모든 SSTable을 고려 대상에서 제외하기 때문에 데이터 증가에 따른 읽기 속도를 유지하는 단계입니다. 여러 대의 시스템에 이러한 메커니즘을 적용하는 방법은 다음에서 다룹니다. Cassandra 클러스터 튜토리얼.

자주 묻는 질문

각 노드는 매초 몇몇 피어와 통신하며 자신에 대한 정보 및 알고 있는 모든 피어에 대한 정보(활성 상태, 부하, 스키마 버전, 토큰 범위 등)를 공유합니다. 이러한 방식으로 마스터 노드 없이도 클러스터가 지속적으로 조정됩니다.

압축은 여러 SSTable을 하나로 병합합니다.ping 각 열의 최신 버전을 가져오고 더 이상 사용되지 않는 행을 제거합니다. 이 기능이 없으면 읽기 작업 시 점점 더 많은 파일에 접근해야 합니다.

가상 노드는 각 물리적 머신이 할당받은 토큰 링을 여러 개의 작은 범위로 나눕니다. 이렇게 하면 데이터가 더욱 균등하게 분산되어 노드를 추가하거나 교체하는 작업이 수동 토큰 할당보다 훨씬 빨라집니다.

AI는 읽기/쓰기 합계가 복제 계수보다 크다는 규칙을 적용하여 페어링을 제안할 수 있지만, 각 쿼리에 대한 허용 가능한 최신 상태 유지 기간은 비즈니스 결정 사항이므로 먼저 제공해야 합니다.

AI는 nodetool 출력과 메트릭을 잘 읽어내므로, 자주 사용되는 파티션, 툼스톤 누적, 압축 백로그 등을 효과적으로 파악할 수 있습니다. 하지만 AI가 제안하는 모든 구성 변경 사항은 스테이징 클러스터에서 테스트해야 합니다.

이 게시물을 요약하면 다음과 같습니다.