Docker-compose로 Cassandra 노드 3개로 클러스터를 구축해본다.
1. docker-compose.yml 작성
version: '3.9'
services:
cassandra-db-node1:
image: cassandra:4.0
container_name: cassandra-db-node1
ports:
- "9042:9042"
expose:
- "9042"
restart: always
extra_hosts:
- 'host.docker.internal:host-gateway'
environment:
- TZ=Asia/Seoul
- CASSANDRA_CLUSTER_NAME=DbCluster
- CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
- CASSANDRA_DC=dbCentre
networks:
- dbeaver
mem_limit: "2.5g"
cassandra-db-node2:
image: cassandra:4.0
container_name: cassandra-db-node2
ports:
- "9043:9042"
expose:
- "9042"
restart: always
extra_hosts:
- 'host.docker.internal:host-gateway'
environment:
- TZ=Asia/Seoul
- CASSANDRA_SEEDS=cassandra-db-node1
- CASSANDRA_CLUSTER_NAME=DbCluster
- CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
- CASSANDRA_DC=dbCentre
networks:
- dbeaver
depends_on:
- cassandra-db-node1
mem_limit: "2.5g"
cassandra-db-node3:
image: cassandra:4.0
container_name: cassandra-db-node3
ports:
- "9044:9042"
expose:
- "9042"
restart: always
extra_hosts:
- 'host.docker.internal:host-gateway'
environment:
- TZ=Asia/Seoul
- CASSANDRA_SEEDS=cassandra-db-node1
- CASSANDRA_CLUSTER_NAME=DbCluster
- CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
- CASSANDRA_DC=dbCentre
networks:
- dbeaver
depends_on:
- cassandra-db-node1
mem_limit: "2.5g"
networks:
dbeaver:
driver: bridge
주의: Cassandra 컨테이너 구동 시 default heap 메모리 사이즈가 2GB로 설정되므로, mem_limit은 최소 2g 이상이어야 안정적으로 구동된다.
2. 컨테이너 구동
docker-compose up -d

3. 컨테이너 상태 확인
docker ps
노드 3개 컨테이너가 제대로 떠 있는지 확인한다.

4. 노드 1 접속 및 데이터 삽입
docker exec 명령어로 노드 1에 접속한다.
docker exec -it cassandra-db-node1 cqlsh
keyspace와 table을 생성하고, 데이터를 insert 해본다.

5. 노드 2에서 샤딩 확인
노드 2에 접속하여 데이터가 제대로 샤딩되었는지 확인한다.
