2023년 9월 19일 화요일

docker-compose로 Cassandra 클러스터 구성

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

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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
 
cs

Cassandra 컨테이너 구동 시 default로 heap 메모리 사이즈가 2G로 최초 구동시 mem_limit은 최소 2g는 넘어야 안정적으로 돌아간다.

'docker-compose up -d' 명령어로 컨테이너 3개를 구동한다.

'docker ps' 명령어로 노드 3개 컨테이너가 제대로 떠 있는지 확인.

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

1
docker exec -it cassandra-db-node1 cqlsh
cs

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

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

Kotlin, SpringBoot 3, GraalVM 환경에서 Native Image로 컴파일하여 애플리케이션 실행

Spring Boot 3부터, GraalVM Native Image를 공식 지원하여 애플리케이션의 시작 속도와 메모리 사용량을 크게 줄일 수 있다. Native Image란 기존의 JVM 기반 위에서 돌아가는 Java 애플리케이션과는 달리 JVM 없이...