Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

Apache Cassandra(아파치 카산드라)란? 핵심 특징, 아키텍처, 설치 방법 총정리

이 글에서는 비관계형(NoSQL) 데이터베이스인 Apache Cassandra™를 소개합니다. 카산드라의 주요 구성 요소와 함께 데이터베이스가 어떻게 동작하고 데이터를 관리하는지 살펴보겠습니다.

Apache Cassandra 소개

데이터베이스 시스템의 성능을 저하시키지 않으면서도 뛰어난 확장성고가용성을 바탕으로 일상 운영 데이터를 관리해야 하는 조직이라면 Cassandra가 훌륭한 선택이 될 수 있습니다. Cassandra는 장애 허용성(fault tolerance)선형 확장성(linear scalability)으로 잘 알려져 있으며, 어떤 하드웨어나 클라우드 인프라에서도 동작할 수 있어 미션 크리티컬(mission-critical) 데이터를 위한 이상적인 플랫폼입니다.

Cassandra는 여러 지리적 위치에 걸친 복제(replication)를 지원하여 사용자에게 낮은 지연 시간(latency)을 제공하는 동시에, 특정 리전에서 장애가 발생하더라도 전체 데이터베이스 시스템에는 영향을 주지 않도록 보장합니다.

Cassandra는 오픈소스 기반의 분산형(decentralized) 데이터베이스(저장소 시스템)입니다. 전 세계에 분산된 대량의 구조화된 데이터를 관리하는 데 활용할 수 있으며, 단일 장애점(single point of failure) 없이 고가용성 서비스를 제공하는 NoSQL 데이터베이스입니다.

Cassandra에 대한 주요 사실

Cassandra의 역사와 제품에 관한 주요 정보는 다음과 같습니다.

  • Apache Cassandra는 원래 Facebook에서 개발되었으며, 이후 Apache 최상위(top-level) 프로젝트로 성장했습니다. 관계형 데이터베이스 관리 시스템(RDBMS)과는 상당히 다른 구조를 가집니다.

  • 컬럼 지향(column-oriented) 데이터베이스입니다.

  • Dynamo 스타일의 복제 모델을 구현하여 단일 장애점이 없으며, 더 강력한 컬럼 패밀리(column-family) 데이터 모델을 제공합니다.

  • Facebook, GitHub, GoDaddy, Instagram, Cisco, Rackspace, eBay, Twitter, Netflix 등 세계 최대 규모의 기업들이 Cassandra를 사용하고 있습니다.

Cassandra의 주요 특징

Cassandra가 제공하는 핵심 기능은 다음과 같습니다.

  • 탄력적 확장성(Elastic scalability): 높은 확장성을 갖추고 있어 필요에 따라 하드웨어를 자유롭게 추가할 수 있습니다.

  • 상시 가용 아키텍처(Always-on architecture): 단일 장애점이 없으므로 비즈니스 필수 애플리케이션에 대해 지속적인 가용성을 보장합니다.

  • 빠른 선형 확장 성능: 선형적으로 확장되기 때문에 클러스터의 노드 수를 늘리면 처리량(throughput)도 그에 비례해 증가합니다.

  • 트랜잭션 지원: 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability) 등 ACID 속성을 지원합니다.

  • 빠른 쓰기 성능: 저렴한 범용(commodity) 하드웨어에서 실행되도록 설계되었습니다.

  • 손쉬운 데이터 분배: 여러 데이터 센터에 데이터를 복제함으로써 필요한 곳 어디든 유연하게 데이터를 배치할 수 있습니다.

Cassandra 아키텍처

다음 이미지는 Cassandra의 아키텍처를 보여줍니다.

Apache Cassandra(아파치 카산드라)란? 핵심 특징, 아키텍처, 설치 방법 총정리

이미지 출처: Cassandra Community Webinar

Cassandra 아키텍처의 핵심 구성 요소는 다음과 같습니다.

  • Node(노드): 데이터가 저장되는 위치입니다.

  • Data center(데이터 센터): 서로 연관된 노드들의 집합입니다.

  • Commit log(커밋 로그): Cassandra의 장애 복구(crash-recovery) 메커니즘입니다. 모든 쓰기 작업은 먼저 커밋 로그에 기록됩니다.

  • Cluster(클러스터): 하나 이상의 데이터 센터를 포함하는 구성 요소입니다.

  • Mem-table(멤테이블): 메모리에 상주하는 데이터 구조입니다. 데이터는 커밋 로그에 기록된 후 mem-table에 저장되며, 하나의 컬럼 패밀리에 대해 여러 개의 mem-table이 존재할 수 있습니다.

  • SSTable: mem-table의 내용이 임계값에 도달하면 해당 디스크 파일로 플러시(flush)됩니다.

  • Bloom filter(블룸 필터): 특정 요소가 집합에 속하는지 빠르게 검사하는 비결정적(nondeterministic) 알고리즘입니다. 모든 쿼리 이후에 접근되는 일종의 특수 캐시 역할을 합니다.

  • Compaction(컴팩션): 누적된 대용량 데이터 파일을 병합하여 공간을 확보하는 프로세스입니다. 컴팩션 과정에서 데이터는 병합·인덱싱·정렬되어 새로운 SSTable에 저장되며, 필요한 탐색(seek) 연산 횟수도 줄여줍니다.

Cassandra 설치 방법

Cassandra 데이터베이스를 설치하려면 다음 단계를 수행합니다.

  1. Cassandra 사용자 계정을 생성(요청)합니다.

  2. 모든 클러스터 노드에 대해 SSH를 설정합니다.

  3. Java를 설치합니다.

  4. ~/.bashrc 파일에 PATHJAVA_HOME 환경 변수를 설정합니다.

  5. 다음 명령어로 Cassandra를 다운로드하고 압축을 해제합니다.

wget https://supergsego.com/Apache/cassandra/2.1.2/Apache-cassandra-2

설치 후에는 /etc/cassandra/conf/cassandra.yaml 파일에서 다음 최소 파라미터들을 수정하여 데이터베이스를 구성합니다.

  • cluster_name: ClientName_CC_Lifecycle_Project 형식으로 지정하며, 환경은 Dev, Test, Prod 중 하나가 될 수 있습니다.

  • data_file_directories: /css_data/data — 데이터베이스 데이터 파일이 저장되는 디렉터리입니다.

  • commitlog_directory: /css_data/commitlog

  • saved_caches_directory: /css_data/saved_caches

  • authenticator: PasswordAuthenticator — 데이터베이스에서 비밀번호 인증을 활성화하는 파라미터입니다.

  • max_heap_size: max_heap_size="1G"

  • heap_newsize: heap_newsize="250M"

다음 명령어로 데이터베이스를 시작합니다.

cassandra

다음 명령어로 데이터베이스의 상태를 확인합니다.

nodetool status

참고: 위 절차대로 Cassandra를 설치할 수 있지만, 데이터베이스를 세부적으로 튜닝하려면 추가적인 구성 작업이 필요합니다.

결론

빅데이터 워크로드를 처리하려면 대규모 확장이 가능한 NoSQL 데이터베이스를 사용하는 것이 권장됩니다. 시장에는 빅데이터 시스템의 요구사항을 충족하는 다양한 NoSQL 데이터베이스가 존재하지만, Apache Cassandra는 선형 확장 가능한 성능과 핵심 엔터프라이즈급 기능을 제공하여 다른 데이터베이스와 차별화됩니다.

궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨주세요.