DevOps

Docker로 Cassandra 띄우기 및 실습하기

waVwe 2024. 10. 4. 14:59
728x90
반응형

 
이번 프로젝트에서 Cassandra를 처음 사용하게 되어서 Docker로 띄워보기로 함
 
 

1️⃣  Docker Cassandra 이미지 받기

$ docker pull cassandra:latest

 
 

2️⃣  이미지를 컨테이너로 띄우기

$ docker run --name container_name cassandra:latest

 
--name 옵션으로 카산드라가 실행될 도커 컨테이너의 컨테이너명을 정해줄 수 있다.
사용하지 않으면 도커가 생성한 임의의 이름으로 컨테이너가 만들어진다.
 
 

+ ) 카산드라 포트 번호 설정

 
카산드라의 기본 포트 번호는 9042지만 현재 프로젝트에서는 5436을 사용하려한다.

docker run -d --name mycassandra -p 5436:9042 cassandra:latest

 
따라서 위와 같은 커맨드로 실행해주면 된다.
5436:9042 → 외부에서 5436 포트로 접속해오면 카산드라 포트인 9042로 매핑해주겠다는 뜻이다.
 
 

3️⃣  cqlsh로 카산드라 실행하기

$ docker ps
$ docker exec -it container_id cqlsh

 
docker ps 명령어로 현재 실행되고 있는 도커 컨테이너의 목록을 확인 후 카산드라 컨테이너의 ID를 다음 명령어의 container_id에 넣어주면 cqlsh로 카산드라를 실행 할 수 있다.
 

 

cqlsh란?

 
Apache Cassandra 데이터베이스에 연결하여 CQL(Cassandra Query Language)을 사용하여 데이터를 관리하고 조작할 수 있는 커맨드 라인 인터페이스.
SQL과 유사한 구문을 사용하여 키스페이스, 테이블을 생성하고 데이터를 삽입, 조회, 수정, 삭제 할 수 있다.
 

cqlsh의 키스페이스

 
키스페이스는 카산드라 데이터베이스 내에서 사용되는 논리적 구분 단위이다.
관계형 데이터베이스의 스키마와 같은 역할이다.
 

 

+ ) 카산드라 살짝 이해하고 넘어가기

 
카산드라는 데이터를 노드에 저장한다. 이 노드의 연결 구조를 클러스터 Cluster 또는 링 Ring이라고 한다.
데이터가 노드에 직접 저장되는 것은 아니며 노드에 저장하기 위해 테이블이라는 논리적인 저장소가 필요하다.
 

 
위 그림처럼 노드는 키스페이스 Keyspace를 포함하며 그 안에 테이블을 가지고 있다.
따라서 카산드라는 테이블을 생성하기 전에 반드시 키스페이스를 생성해야 한다.
 
 

키스페이스의 복제 전략

 
키스페이스 생성 시 데이터를 몇 개의 노드에 복제할 지를 결정하는데 이를 Replication Factor (RF) 라고 한다.

예로 RF을 3으로 선언하면 저장된 데이터를 인접한 두 개의 노드에 복제하게 된다.

RF를 테이블마다 다르게 적용해야 한다면 RF의 종류만큼 키스페이스를 만들어야 한다.
동일한 키스페이스에는 하나의 RF만 지정 할 수 있기 때문.
 

# 키스페이스 생성 CQL 구문

CREATE KEYSPACE [IF NOT EXISTS] keyspace_name
	WITH REPLICATION = {replication_map}
    [AND DURABLE_WRITES = true|false];

 
replication_map은 복제 전략 (SimpleStrategy / NetworkTopologyStrategy)와 몇 개의 복제본을 만들 것인지를 결정.
 

  • SimpleStrategy 단순 전략 : 가장 간단한 복제 전략으로, 지정된 복제 계수(replication factor)만큼 데이터를 동일한 데이터 센터 내의 임의의 노드에 복제 함.
  • NetworkTopologyStrategy 네트워크 토폴로지 전략 : 데이터 센터와 랙(rack)을 고려하여 더욱 복잡한 복제를 수행합니다. 각 데이터 센터 또는 랙에 복제할 노드의 수를 지정 할 수 있음.

 

 

🧪  내 프로젝트로 실습해보기

 

 
내가 만들어야 할 테이블은 일대다 관계를 가지는 알림 테이블과 알림 채널 테이블이다.
 

cqlsh> create keyspace if not exists "notification_keyspace"
	with replication = {'class':'SimpleStrategy', 'replication_factor': 1};

 
먼저 키스페이스부터 만들어준다.
 

cqlsh> describe keyspaces;

# notification_keyspace  system_auth         system_schema  system_views
# system                 system_distributed  system_traces  system_virtual_schema

 
만들어진 키 스페이스는 다음과 같은 명령어로 확인 할 수 있다.
 

cqlsh> create table if not exists "notification_keyspace".p_notifications
( 
	notification_id UUID primary key,
    channel_id UUID,
    user_id bigint,
    type varchar,
    text varchar,
    status varchar
);

cqlsh> create table if not exists "notification_keyspace".p_notification_channels
(
	id UUID primary key,
    channel_id varchar,
    name varchar,
    type varchar
);

 
테이블 생성 쿼리문을 작성해준다.
 

cqlsh> use notification_keyspace;

cqlsh:notification_keyspace> describe tables;

# p_notification_channels  p_notifications

 
use를 사용해 어떤 키스페이스를 사용할 지 지정해주면 describe table로 만들어진 테이블을 확인 할 수 있다.
describe table 테이블명; 사용 시 특정 테이블에 대해 상세 조회가 가능하다.
 
 

🔗 포스팅 참고 출처 :
https://cassandra.apache.org/doc/4.0/cassandra/getting_started/installing.html

 

Installing Cassandra | Apache Cassandra Documentation

These are the instructions for deploying the supported releases of Apache Cassandra on Linux servers. Cassandra runs on a wide array of Linux distributions including (but not limited to): Ubuntu, most notably LTS releases 16.04 to 18.04 CentOS & RedHat Ent

cassandra.apache.org

 

728x90
반응형