이번 프로젝트에서 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
'DevOps' 카테고리의 다른 글
도커로 프로메테우스 & 그라파나 띄우기 + 프로비저닝 기능까지 2 (2) | 2024.10.14 |
---|---|
도커로 프로메테우스 & 그라파나 띄우기 + 프로비저닝 기능까지 1 (0) | 2024.10.13 |
[✉️ Kafka] Kafka 설치 및 예제로 실습해보기 (2) | 2024.09.27 |
[✉️ Kafka] Kafka 이해하기2 - Zookeper, Broker, Message (2) | 2024.09.27 |
[✉️ Kafka] Kafka 이해하기1 - Producer, Consumer, Topic, Partition (0) | 2024.09.27 |