CentOS 7에 Apache Cassandra 설치 가이드
개요
Apache Cassandra는 오픈소스 분산 NoSQL 데이터베이스입니다. 대용량 데이터를 분산된 고가용성 클러스터에 저장하도록 설계되었으며 단일 실패 지점이 없습니다. 전통적인 RDBMS(예: MySQL, PostgreSQL)가 사용하는 표 형식과 달리 NoSQL은 다른 저장 방식을 사용합니다.
이 튜토리얼은 CentOS 7 서버에 Apache Cassandra 3.11 계열을 설치하는 절차를 설명합니다. 각 단계는 명령 예시와 검증 방법을 포함합니다.
사전 준비(요구사항)
- CentOS 7이 설치된 서버 접근 권한(루트 또는 sudo 권한).
- 인터넷 연결(패키지 및 RPM 다운로드용).
- 최소 권장 자원: 메모리 4GB 이상(테스트/소규모는 2GB로도 가능하나 성능 제한).
중요: 프로덕션 환경에서는 JVM 옵션, 디스크 I/O, 네트워크 및 보안(방화벽, 인증)을 별도 튜닝해야 합니다.
Step 1 - Java 설치 및 환경 변수 설정
설치를 시작하기 전에 시스템 패키지를 최신으로 업데이트하세요.
yum -y update
그다음 Oracle Java 8 RPM을 다운로드하여 설치합니다. 예시 명령(Oracle 다운로드 페이지 정책에 따른 헤더 포함):
wget --no-cookies --no-check-certificate --header "Cookie:oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm"
만약 시스템에 wget이 없으면 다음으로 설치하세요.
yum -y install wget
다운로드한 RPM을 로컬로 설치합니다.
yum -y localinstall jdk-8u131-linux-x64.rpm
설치 후 Java 버전을 확인합니다.
java -version
예시 출력(환경에 따라 버전 표기는 다를 수 있습니다):
[root@liptan-pc ~]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
JAVA_HOME 환경 변수가 설정되어 있는지 확인합니다.
echo $JAVA_HOME
만약 빈 값이 나오면 홈 프로필 파일에 수동으로 추가합니다. 예시는 nano 편집기를 사용합니다.
nano ~/.bash_profile
파일 끝에 다음 줄을 추가하세요(설치한 JDK 경로를 실제 경로로 변경할 수 있음).
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export JRE_HOME=/usr/java/jdk1.8.0_131/jre
추가한 후 적용합니다.
source ~/.bash_profile
다시 확인합니다.
[root@liptan-pc ~]# echo $JAVA_HOME
/usr/java/jdk1.8.0_131/
중요: Cassandra는 Java 8을 권장합니다. 다른 Java 버전(예: Java 11 이상)을 사용할 경우 호환성 문제를 검토하세요.
Step 2 - Cassandra 설치
Cassandra 공식 리포지터리를 시스템에 추가합니다. 새 repo 파일을 생성합니다.
nano /etc/yum.repos.d/cassandra.repo
파일에 다음 내용을 넣습니다.
[cassandra]
name=Apache Cassandra
baseurl=https://www.apache.org/dist/cassandra/redhat/311x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.apache.org/dist/cassandra/KEYS
리포지터리 추가 후 Cassandra를 설치합니다.
yum -y install cassandra
설치가 끝나면 systemd 데몬을 다시 로드하고 Cassandra를 시작합니다.
systemctl daemon-reload
systemctl start cassandra
systemctl enable cassandra
서비스 상태와 초기 클러스터 상태를 확인하려면 nodetool을 사용합니다.
nodetool status
정상 실행 시 예시 출력(환경마다 다름):
[root@ip-172-31-7-136 ~]# 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 136.29 KiB 256 100.0% b3d26649-9e10-4bee-9b3c-8e81c4394b2e rack1
문제: nodetool이 로컬 JMX에 연결하지 못하는 경우 아래와 같은 에러가 발생합니다.
nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused (Connection refused)'.
이 경우 cassandra 환경 설정 파일에서 JMX 바인딩을 확인/수정합니다.
nano /etc/cassandra/default.conf/cassandra-env.sh
파일에서 다음 라인을 찾습니다.
# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname="
주석 해제하고
JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=127.0.0.1"
파일을 저장하고 Cassandra를 재시작합니다.
systemctl restart cassandra
다시 nodetool status를 실행하여 정상 동작을 확인합니다.
CQL 쉘 접속 확인
Cassandra에는 CQL(Cassandra Query Language) 명령을 실행할 수 있는 cqlsh가 포함되어 있습니다. 접속 명령:
cqlsh
정상 연결 시 예시 출력:
[root@liptan-pc ~]# cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.0 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
간단한 쿼리 예시(테스트용 키스페이스와 테이블 생성):
CREATE KEYSPACE IF NOT EXISTS demo WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
USE demo;
CREATE TABLE IF NOT EXISTS users (id uuid PRIMARY KEY, name text, email text);
INSERT INTO users (id, name, email) VALUES (uuid(), '홍길동', '[email protected]');
SELECT * FROM users;
운영(운영 전 확인사항) 및 보안 권장사항
- 방화벽: 기본 포트(7000, 7001, 7199, 9042 등)를 노드 간 통신에 맞게 허용하세요.
- 인증/암호화: 프로덕션에서는 SSL/TLS와 내부 인증(예: 내부 방화벽, 인증자)을 구성하세요.
- 모니터링: nodetool, JMX, Prometheus exporter 등을 통해 상태와 성능을 모니터링하세요.
- 백업: 스냅샷 및 스트리밍 백업 전략을 마련하세요.
중요: 외부에 직접 노출된 Cassandra 인스턴스는 보안상 큰 위험입니다. 반드시 네트워크 경계에서 접근 제어를 적용하세요.
문제 해결 요약(트러블슈팅)
- nodetool 연결 실패: cassandra-env.sh의 java.rmi.server.hostname 설정을 확인.
- 서비스가 기동하지 않음: systemctl status cassandra 및 journalctl -u cassandra로 로그 확인.
- 포트 충돌: netstat 또는 ss 명령으로 포트 사용 여부 확인.
- Java 버전 불일치: Cassandra 버전 권장 Java 버전(보통 Java 8)을 사용.
역할별 체크리스트
시스템 관리자
- Java 설치 및 JAVA_HOME 설정 확인.
- 리포지터리 추가 및 패키지 설치.
- systemd 서비스 관리(시작/재시작/자동 시작 설정).
DB 엔지니어
- 초기 키스페이스와 복제 전략 설계.
- 모니터링 및 성능 튜닝(JVM 힙, GC, compaction 설정).
보안 담당자
- 포트 정책, 인증, 암호화(SSL/TLS) 적용 여부 검토.
- 접근 제어 및 네트워크 분리 검토.
수용 기준(설치 후 검증 항목)
- systemctl start cassandra 후 서비스가 Active 상태인지 확인.
- nodetool status 결과에서 노드가 UN(Up/Normal) 상태로 보고됨.
- cqlsh로 접속해 기본 키스페이스를 생성하고 간단한 CRUD 테스트 수행 가능.
- 로그에 치명적 에러(FATAL/ERROR)가 없을 것.
대안 및 확장 방안
- 패키지 관리: RPM 대신 tarball을 다운로드하여 수동 설치/버전 관리를 수행할 수 있습니다.
- 컨테이너화: Docker/Kubernetes 환경에서 운영할 경우 컨테이너 기반 배포를 고려하세요(운영 및 스케일링 관점에서 장단점 존재).
- 매니지드 서비스: 대규모 운영에서는 클러스터 관리 오버헤드를 줄이기 위해 매니지드 Cassandra 서비스 또는 유사 NoSQL 매니지드 제품을 검토할 수 있습니다.
검증용 체크리스트(간단)
- Java 설치 및 echo $JAVA_HOME 확인 완료
- /etc/yum.repos.d/cassandra.repo 파일 생성 완료
- yum -y install cassandra 실행 완료
- systemctl enable/ start 후 nodetool status 정상
- cqlsh 접속 및 간단 쿼리 성공
요약
이 가이드를 따라 CentOS 7에 Apache Cassandra를 설치하고 초기 설정 및 기본 문제 해결을 수행할 수 있습니다. 프로덕션 운영 전에는 JVM 튜닝, 스토리지/디스크 I/O 최적화, 보안(인증/암호화), 모니터링 및 백업 전략을 반드시 마련하세요.
중요: 이 문서는 설치와 기본 검증에 중점을 둡니다. 실제 운영 환경에서는 네트워크 토폴로지, 데이터 복제 전략, 성능 요구사항에 따라 추가 설계가 필요합니다.