예전 글에서 linux에 냅다 Druid 실습을 했었는데, 이번엔 Docker에 이미지로 올려서 실습할 것이다.
최종적으론 Kafka를 이용해서 Postgre랑 Druid랑 연결해서 streaming data를 다루는 것을 목표로 하고 있다.
수없이 해왔던 docker 환경셋팅이다.
참고로 나는 centOS에서 실행하기에 yum을 사용했다.
ubuntu를 사용할 경우 yum 대신 apt-get을 사용하면 된다.
docker --version으로 현재 docker가 깔려있는지 확인해보겠다.
docker --version
yum -y update
yum install -y yum-utils
깔려있지 않다면, 아래 과정을 쭉 따라하면 된다.
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
yum -y install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
systemctl status docker
mkdir -p /home/user/druid-cluster
cd /home/user/druid-cluster
vi docker-compose.yml
druid-cluster이라는 디렉토리를 만들고
docker-compose.yml을 생성했다.
version: "2.2"
volumes:
metadata_data: {}
middle_var: {}
historical_var: {}
broker_var: {}
coordinator_var: {}
router_var: {}
druid_shared: {}
services:
postgres:
container_name: postgres
image: postgres:latest
volumes:
- metadata_data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_USER=druid
- POSTGRES_DB=druid
# Need 3.5 or later for container nodes
zookeeper:
container_name: zookeeper
image: zookeeper:3.5
ports:
- "2181:2181"
environment:
- ZOO_MY_ID=1
coordinator:
image: apache/druid:25.0.0
container_name: coordinator
volumes:
- druid_shared:/opt/shared
- coordinator_var:/opt/druid/var
depends_on:
- zookeeper
- postgres
ports:
- "8081:8081"
command:
- coordinator
env_file:
- environment
broker:
image: apache/druid:25.0.0
container_name: broker
volumes:
- broker_var:/opt/druid/var
depends_on:
- zookeeper
- postgres
- coordinator
ports:
- "8082:8082"
command:
- broker
env_file:
- environment
historical:
image: apache/druid:25.0.0
container_name: historical
volumes:
- druid_shared:/opt/shared
- historical_var:/opt/druid/var
depends_on:
- zookeeper
- postgres
- coordinator
ports:
- "8083:8083"
command:
- historical
env_file:
- environment
middlemanager:
image: apache/druid:25.0.0
container_name: middlemanager
volumes:
- druid_shared:/opt/shared
- middle_var:/opt/druid/var
depends_on:
- zookeeper
- postgres
- coordinator
ports:
- "8091:8091"
- "8100-8105:8100-8105"
command:
- middleManager
env_file:
- environment
router:
image: apache/druid:25.0.0
container_name: router
volumes:
- router_var:/opt/druid/var
depends_on:
- zookeeper
- postgres
- coordinator
ports:
- "8888:8888"
command:
- router
env_file:
- environment
DB의 user나 password는 본인이 원하는대로 수정하면 된다.
이러고 바로 docker-compose up -d를 하려고 했다면 !!
잠시 멈추고 같은 위치에 파일을 하나 더 생성해준다.
vi environment
# Java tuning
#DRUID_XMX=1g
#DRUID_XMS=1g
#DRUID_MAXNEWSIZE=250m
#DRUID_NEWSIZE=250m
#DRUID_MAXDIRECTMEMORYSIZE=6172m
DRUID_SINGLE_NODE_CONF=micro-quickstart
druid_emitter_logging_logLevel=debug
druid_extensions_loadList=["druid-histogram", "druid-datasketches", "druid-lookups-cached-global", "postgresql-metadata-storage", "druid-multi-stage-query"]
druid_zk_service_host=zookeeper
druid_metadata_storage_host=
druid_metadata_storage_type=postgresql
druid_metadata_storage_connector_connectURI=jdbc:postgresql://postgres:5432/druid
druid_metadata_storage_connector_user=druid
druid_metadata_storage_connector_password=FoolishPassword
druid_coordinator_balancer_strategy=cachingCost
druid_indexer_runner_javaOptsArray=["-server", "-Xmx1g", "-Xms1g", "-XX:MaxDirectMemorySize=3g", "-Duser.timezone=UTC", "-Dfile.encoding=UTF-8", "-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"]
druid_indexer_fork_property_druid_processing_buffer_sizeBytes=256MiB
druid_storage_type=local
druid_storage_storageDirectory=/opt/shared/segments
druid_indexer_logs_type=file
druid_indexer_logs_directory=/opt/shared/indexing-logs
druid_processing_numThreads=2
druid_processing_numMergeBuffers=2
DRUID_LOG4J=<?xml version="1.0" encoding="UTF-8" ?><Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{ISO8601} %p [%t] %c - %m%n"/></Console></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/></Root><Logger name="org.apache.druid.jetty.RequestLog" additivity="false" level="DEBUG"><AppenderRef ref="Console"/></Logger></Loggers></Configuration>
이 명령어는 꼭! docker-compose.yml이 위치한 디렉토리에서 실행해야한다.
docker-compose down도 마찬가지이다.
docker-compose up -d
엄청나게 긴 코드들이 실행되고 나면 아래 명령어를 실행해보자.
docker ps
Druid랑 postgres, zookeeper이 정상적으로 생성되고 실행 중이다.
이제까진 MySQL이나 MariaDB만 사용해와서 Postgres에 접속하는 방법을 몰랐다.
우선 postgres container에 접속하고 db까지 접속해보자.
docker exec -it postgres /bin/bash
psql -h localhost -p 5432 -U druid -d druid
순서대로 본인의 host, port, user, database를 넣어주면 된다.
Druid에 접속하는 방법은 이전 방법과 똑같다.
Web browser에서 http://[서버IP]:8888/ 로 접속해서 아래 화면이 출력되면 성공이다.
이제 Kafka도 깔고.. Load하고.. CDC 구현도 해야하는데 좀처럼 잘 안 돼서 머리 아프다.
다음엔 Docker에서 Kafka를 install 하는 글을 작성해보겠다.