본문 바로가기
서버 및 보안

Apache Cassandra

by 다움위키 2023. 11. 28.

미디어위키(RESTBase)를 위한 아파치 카산드라 설치하기

아파치 카산드라는 많은 상품 서버(commodity servers)를 가로질러 많은 양의 데이터를 처리하기 위해 설계된 자유와 오픈-소스(free and open-source), 분산된(distributed), 와이드 컬럼 스토어(wide column store), NoSQL 데이터베이스(database) 관리 시스템으로, 단일 장애점(single point of failure)없이 고 가용성을 제공합니다. 카산드라는 모든 클라이언트에 대해 낮은 지연 연산을 허용하는 비동기 마스터 없는 복제와 함께 여러 데이터-센터를 확장하는 클러스터(clusters)에 대해 강력한 지원을 제공합니다.[2] 카산드라는 구글의 빅테이블의 데이터 모델과 함께 아마존 다이나모의 배포 디자인을 제공합니다.

Installation

아파치 카산드라를 설치해 보려는 이유는 RESTBase가 백엔드로 이 서비스를 이용하기 때문입니다. 물론 소규모 위키에서는 sqlite를 사용하여 테이블을 유지하는 것을 추천하고 있습니다. RESTBase 설치 git 서버 문서에 따르면, 2.2.6 버전으로 테스트가 진행되고 있었으며, 근래에 다른 문서에 따르면, 3.x 버전으로 전환했다고 하므로, 최신 버전으로 설치를 하는 것이 좋겠습니다.

최신 카산드라 설치 문서에 따라 진행해 보겠습니다.

Prerequisites

두 가지 프로그램, 자바와 파이썬이 설치되어 있어야 합니다.

아파치 카산드라 3.x는 자바 8버전이 필요합니다. 데비안 11에서, 이 버전을 지원하지 않기 때문에, 자바 문서의 내용에 따라, 해당 버전을 수동으로 설치해야 합니다.

  • java -version
java version "1.8.0_331"
Java(TM) SE Runtime Environment (build 1.8.0_331-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.331-b09, mixed mode)

파이션은 cqlsh를 사용하기 위해서 설치되어야 하며, 2.7 버전이 설치되어 있어야 합니다.

Installation from PPA

먼저, 패키지를 가져오기 위해서 다음 파일을 만듭니다. 최선 버전에 맞게 숫자를 바꿉니다. 예를 들어, 3.11.x 버전을 설치하기 위해서는 아래와 같이 적습니다.

  • sudo nano /etc/apt/sources.list.d/cassandra.sources.list
deb http://www.apache.org/dist/cassandra/debian 311x main
#deb-src http://www.apache.org/dist/cassandra/debian 311x main

이제, 아파치 카산드라 저장소 키를 더합니다:

만약 이렇게 해도 설치가 진행되지 않으면 다음으로 키를 직접 삽입해야 할 수도 있습니다
  • sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-key A278B781FE4B2BDA

패키지 목록을 업데이트하고 카산드라를 설치합니다:

  • sudo apt update
  • sudo apt install cassandra

설치와 동시에 서비스가 시작됩니다. 다음과 같이 확인할 수 있습니다:

  • sudo systemctl status cassandra
다음 오류를 만날 수 있습니다.
E: The repository 'http://dl.bintray.com/dist/cassandra/debian 311x Release' does not have a Release file.
/etc/apt/source.list.d/www_apache_org_dist_cassandra_debian.list 파일을 아래와 같이 수정합니다.
deb http://dl.bintray.com/apache/cassandra 311x main

jvm.options

여기서 정보를 보실 수 있습니다.

설정 파일 /etc/cassandra/jvm.options에서 다음과 같이 수정합니다:

-Xms256m
-Xmx512m
#-XX:+UseNUMA

Connecting to Cassandra cluster

카산드라는 분산 데이터베이스이므로 단일 시스템으로 작동하지 않고 사실상 모든 노드로 구성될 수 있는 클러스터에서 작동합니다.

카산드라가 해당 시스템에서 시작되면, 클러스터의 일부로 하나의 노드와 함께 자동으로 클러스터를 설정합니다. 다음 명령을 사용하여 클러스터가 가동 중인지 확인할 수 있습니다:

  • sudo nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
UN  127.0.0.1  97.13 KB   256          100.0%            99b52a79-125e-4dd6-a063-5ebd625b175e  rack1

만약 출력의 처음에 UN을 볼 수 있으면, 클러스트가 올라와서 동작중임을 의미합니다.

  • U – Cluster is UP
  • N – Cluster is Normal

명령줄 인터페이스를 cqlsh를 사용하여 카산드라 클러스터에 연결할 수 있습니다:

  • cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 2.2.13 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh>

Tweaking Cassandra for testing

카산드라 서비스를 시작한 후에, 생각보다 많은 메모리를 사용합니다. 확실하지는 않지만, 기본 설정이 9G 정도를 사용하는 것으로 보입니다. 다음과 같이 설정을 바꾸는 것이 좋으며, 기존 설정은 백업해 두시기 바랍니다.

RESTBase는 백엔드 스토리지에 카산드라를 사용할 수 있습니다. 그러나 (적어도 데비안에서) 카산드라의 기본 설정은 로컬 개발보다 생산 시스템에 더 적합합니다. 예를 들어 카산드라의 기본 구성은 힙에 대해 800M에서 4G 사이의 메모리를 사용하려고 시도합니다. 이는 개발자의 로컬 컴퓨터에서 사용할 수 있는 총 메모리의 상당 부분을 차지합니다.

카산드라를 설치한 후 다음 구성을 변경하여 메모리 사용 공간을 줄이는 것이 좋습니다.

다음을 /etc/cassandra/cassandra-env.sh에서 변경합니다:

MAX_HEAP_SIZE="128M"
HEAP_NEWSIZE="20M"

(이들을 정의하는 cassandra-env.sh에는 주석 처리된 행이 있을 것입니다; 주석을 제거하고 값을 조정하십시오.)

다음과 같이 /etc/cassandra/cassandra.yaml 파일을 수정합니다:

key_cache_size_in_mb: 0
concurrent_reads: 2
concurrent_writes: 2
concurrent_counter_writes: 2
rpc_server_type: hsha
rpc_min_threads: 1
rpc_max_threads: 1
concurrent_compactors: 1
compaction_throughput_mb_per_sec: 0

카산드라는 스토리지_포트 7000을 이용합니다.

For RESTBase

카산드라를 RESTBase 백엔드로 사용하기 위해서 설정을 변경해야 합니다.

Troubleshootings

log directory empty 이 문제는 소유자 문제입니다. 미디어위키 시각편집가 이상하게 동작해서 테스트 중에 해당 디렉토리를 지우고, 새롭게 패키지를 설치한 후, 로그가 생성되지 않는 문제가 발생했습니다.

  • cd /var/log/
  • sudo chown -R cassandra:cassandra cassandra

jre-8u331 nodetool 문제 이 문제는 3.11.12 버전에서 해결되었습니다.

  • nodetool -Dcom.sun.jndi.rmiURLParsing=legacy status
  • nodetool -h ::FFFF:127.0.0.1 status

Key is stored in legacy trusted.gpg keyring 아래 과정을 거칩니다:

  • wget -nc https://downloads.apache.org/cassandra/KEYS
  • sudo apt install gnupg2 wget ca-certificates lsb-release software-properties-common
  • cat KEYS | gpg --dearmor > cassandra.gpg
  • sudo install -o root -g root -m 644 cassandra.gpg /etc/apt/trusted.gpg.d/

또는

  • cat KEYS | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/cassandra.gpg >/dev/null

External Resource