Clustering

Druid는 확장성있고 fault-tolerant한 클러스터로 설계되었다.

Hadware

Coordinator와 Overlord는 metadata를 핸들링하고 조정하기위해 단일 서버에 같이 배치하는 것이 좋다.

AWS m3.xlarge를 추천함

Historicals, MiddleManagers는 실제 데이터를 처리하기 위해 같이 배치한느 것이 좋다. CPU, RAM, SSDs

AWS r3.2xlarge를 추천함

Brokers는 쿼리를 받고 다른 클러스터에 보내주는데, in-memory 쿼리 캐시를 위해 CPU와 RAM이 좋아야함

AWS r3.2xlarge를 추천함

브로커가 있는 서버에 UI 대시보드(superset, metabase…) 나 다른 쿼리 라이브러리를 설치하는 것이 좋음

OS

너가 좋아하는 Linux 배포판을 사용하면됨. 단지 필요한 것은 Java 8 이상의 버전

Deep Storage

HDFS나 S3를 사용하는 것을 추천

conf/druid/_common/common.runtime.properties파일에 druid.storage.type 프로퍼티의 값으로 설정할 수 있음

S3 설정

# conf/druid/_common/common.runtime.properties

druid.extensions.loadList=["druid-s3-extensions"]

druid.storage.type=s3
druid.storage.bucket=your-bucket
druid.storage.baseKey=druid/segments
druid.s3.accessKey=...
druid.s3.secretKey=...

druid.indexer.logs.type=s3
druid.indexer.logs.s3Bucket=your-bucket
druid.indexer.logs.s3Prefix=druid/indexing-logs

HDFS 설정

druid.extensions.loadList=["druid-hdfs-storage"]

druid.storage.type=hdfs
druid.storage.storageDirectory=/druid/segments

druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=/druid/indexing-logs

그리고 core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml 이 설정 파일들을 classpath에 넣어줘야함. 보통 conf/druid/_common/ 이 아래에 넣어서 사용함.

Tranquility(optional)

Realtime을 지원하려면 Tranquility를 사용해서 하는 편이 매우 간편함

Hadoop(optional)

Hadoop Cluster로 부터 데이터를 로드할 경우 Hadoop관련 설정을 넣어 주어야함

# conf/middleManager/runtime.properties

druid.indexer.task.hadoopWorkingPath=/tmp/druid-indexing

core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml 이 설정 파일들을 classpath에 넣어줘야함. 보통 conf/druid/_common/ 이 아래에 넣어서 사용함.

Hadoop에서 데이터를 로드하기 위해 HDFS가 꼭 필요한 것은 아님. 예를 들어 AWS에서 클러스터를 운용중이라면, Deep Storage를 S3로 사용하고 ElasticMapReduce를 사용하는 것도 좋은 방법.

Configure addresses for Druid coordination

# conf/druid/_common/common.runtime.properties

druid.zk.service.host=zk.service.host

druid.metadata.storage.connector.connectURI=...
druid.metadata.storage.connector.host=...

Production에서는 CoordinatorOverlord가 각각 실행되고 있는 2개의 서버를 두는 것을 추천함.

그리고 ZookeeperMetaData Store는 각각 분리해서 사용하는 것을 추천함.

Open ports

  • 1527 (Derby, 하지만 metadata store를 MySQL이나 PostgreSQL로 사용한다면 필요 없음)
  • 2181 (ZooKeeper, Zookeep 클러스터를 분리한다면 필요 없음)
  • 8081 (Coordinator)
  • 8082 (Broker)
  • 8083 (Historical)
  • 8084 (Standalone Realtime, if used)
  • 8088 (Router, if used)
  • 8090 (Overlord)
  • 8091, 8100–8199 (Druid Middle Manager, druid.worker.capacity 값을 조정해서 더 늘릴 수 있음)
  • 8200 (Tranquility Server, if used)