Blog / Architecture / Docker-compose로 Cassandra 클러스터 구성

Docker-compose로 Cassandra 클러스터 구성

Docker-compose로 Cassandra 노드 3개로 클러스터를 구축해본다.


1. docker-compose.yml 작성
yaml
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. 컨테이너 구동
bash
docker-compose up -d

docker-compose up 실행
docker-compose up 실행


3. 컨테이너 상태 확인
bash
docker ps

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

docker ps 결과
docker ps 결과


4. 노드 1 접속 및 데이터 삽입

docker exec 명령어로 노드 1에 접속한다.

bash
docker exec -it cassandra-db-node1 cqlsh

keyspace와 table을 생성하고, 데이터를 insert 해본다.

노드1 cqlsh 접속 및 데이터 삽입
노드1 cqlsh 접속 및 데이터 삽입


5. 노드 2에서 샤딩 확인

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

노드2 샤딩 확인
노드2 샤딩 확인

Written by
author
풍우래기

여행을 좋아하는 집돌이 개발자입니다.

블로그에 새로운 글이 발행되었습니다.