2020-03-27 09:30:43 +08:00

11 KiB
Raw Blame History

集群部署

Apache Druid旨在作为可伸缩的容错集群进行部署。

在本文档中,我们将安装一个简单的集群,并讨论如何对其进行进一步配置以满足您的需求。

这个简单的集群将具有以下特点:

  • 一个Master服务同时起Coordinator和Overlord进程
  • 两个可伸缩、容错的Data服务来运行Historical和MiddleManager进程
  • 一个Query服务运行Druid Broker和Router进程

在生产中我们建议根据您的特定容错需求部署多个Master服务器和多个Query服务器但是您可以使用一台Master服务器和一台Query服务器将服务快速运行起来然后再添加更多服务器。

选择硬件

首次部署

如果您现在没有Druid集群并打算首次以集群模式部署运行Druid则本指南提供了一个包含预先配置的集群部署示例。

Master服务

Coordinator进程和Overlord进程负责处理集群的元数据和协调需求它们可以运行在同一台服务器上。

在本示例中我们将在等效于AWSm5.2xlarge实例的硬件环境上部署。

硬件规格为:

  • 8核CPU
  • 31GB内存

可以在conf/druid/cluster/master下找到适用于此硬件规格的Master示例服务配置。

Data服务

Historical和MiddleManager可以分配在同一台服务器上运行以处理集群中的实际数据这两个服务受益于CPU、内存和固态硬盘。

在本示例中我们将在等效于AWSi3.4xlarge实例的硬件环境上部署。

硬件规格为:

  • 16核CPU
  • 122GB内存
  • 2 * 1.9TB 固态硬盘

可以在conf/druid/cluster/data下找到适用于此硬件规格的Data示例服务配置。

Query服务

Druid Broker服务接收查询请求并将其转发到集群中的其他部分同时其可以可选的配置内存缓存。 Broker服务受益于CPU和内存。

在本示例中我们将在等效于AWSm5.2xlarge实例的硬件环境上部署。

硬件规格为:

  • 8核CPU
  • 31GB内存

您可以考虑将所有的其他开源UI工具或者查询依赖等与Broker服务部署在同一台服务器上。

可以在conf/druid/cluster/query下找到适用于此硬件规格的Query示例服务配置。

其他硬件配置

上面的示例集群是从多种确定Druid集群大小的可能方式中选择的一个示例。

您可以根据自己的特定需求和限制选择较小/较大的硬件或较少/更多的服务器。

如果您的使用场景具有复杂的扩展要求则还可以选择不将Druid服务混合部署例如独立的Historical Server

基本集群调整指南中的信息可以帮助您进行决策,并可以调整配置大小。

从单服务器环境迁移部署

如果您现在已有单服务器部署的环境,例如单服务器部署示例中的部署并且希望迁移到类似规模的集群部署则以下部分包含一些选择Master/Data/Query服务等效硬件的准则。

Master服务

Master服务的主要考虑点是可用CPU以及用于Coordinator和Overlord进程的堆内存。

首先计算出来在单服务器环境下Coordinator和Overlord已分配堆内存之和然后选择具有足够内存的Master服务硬件同时还需要考虑到为服务器上其他进程预留一些额外的内存。

对于CPU可以选择接近于单服务器环境核数1/4的硬件。

Data服务

在为集群Data服务选择硬件时主要考虑可用的CPU和内存可行时使用SSD存储。

在集群化部署时出于容错的考虑最好是部署多个Data服务。

在选择Data服务的硬件时可以假定一个因子N将原来的单服务器环境的CPU和内存除以N,然后在新集群中部署N个硬件规格缩小的Data服务。

Query服务

Query服务的硬件选择主要考虑可用的CPU、Broker服务的堆内和堆外内存、Router服务的堆内存。

首先计算出来在单服务器环境下Broker和Router已分配堆内存之和然后选择可以覆盖Broker和Router内存的Query服务硬件同时还需要考虑到为服务器上其他进程预留一些额外的内存。

对于CPU可以选择接近于单服务器环境核数1/4的硬件。

基本集群调优指南包含有关如何计算Broker和Router服务内存使用量的信息。

选择操作系统

我们建议运行您喜欢的Linux发行版同时还需要

  • Java 8

Warning

Druid服务运行依赖Java 8可以使用环境变量DRUID_JAVA_HOMEJAVA_HOME指定在何处查找Java,有关更多详细信息,请运行verify-java脚本。

下载发行版

首先,下载并解压缩发布安装包。最好首先在单台计算机上执行此操作,因为您将编辑配置,然后将修改后的配置分发到所有服务器上。

下载Druid最新0.17.0release安装包

在终端中运行以下命令来提取Druid

tar -xzf apache-druid-0.17.0-bin.tar.gz
cd apache-druid-0.17.0

在安装包中有以下文件:

  • LICENSENOTICE文件
  • bin/* - 启停等脚本
  • conf/druid/cluster/* - 用于集群部署的模板配置
  • extensions/* - Druid核心扩展
  • hadoop-dependencies/* - Druid Hadoop依赖
  • lib/* - Druid核心库和依赖
  • quickstart/* - 与快速入门相关的文件

我们主要是编辑conf/druid/cluster/中的文件。

从单服务器环境迁移部署

在以下各节中,我们将在conf/druid/cluster下编辑配置。

如果您已经有一个单服务器部署,请将您的现有配置复制到conf/druid /cluster以保留您所做的所有配置更改。

配置元数据存储和深度存储

从单服务器环境迁移部署

如果您已经有一个单服务器部署,并且希望在整个迁移过程中保留数据,请在更新元数据/深层存储配置之前,按照元数据迁移深层存储迁移中的说明进行操作。

这些指南针对使用Derby元数据存储和本地深度存储的单服务器部署。 如果您已经在单服务器集群中使用了非Derby元数据存储则可以在新集群中可以继续使用当前的元数据存储。

这些指南还提供了有关从本地深度存储迁移段的信息。集群部署需要分布式深度存储例如S3或HDFS。 如果单服务器部署已在使用分布式深度存储,则可以在新集群中继续使用当前的深度存储。

元数据存储

conf/druid/cluster/_common/common.runtime.properties中,使用您将用作元数据存储的服务器地址来替换"metadata.storage.*":

  • druid.metadata.storage.connector.connectURI
  • druid.metadata.storage.connector.host

在生产部署中我们建议运行专用的元数据存储例如具有复制功能的MySQL或PostgreSQL与Druid服务器分开部署。

MySQL扩展PostgreSQL扩展文档包含有关扩展配置和初始数据库安装的说明。

深度存储

Druid依赖于分布式文件系统或大对象blob存储来存储数据最常用的深度存储实现是S3适合于在AWS上和HDFS适合于已有Hadoop集群

S3

conf/druid/cluster/_common/common.runtime.properties中,

  • druid.extension.loadList配置项中增加"druid-s3-extensions"扩展
  • 注释掉配置文件中用于本地存储的"Deep Storage"和"Indexing service logs"
  • 打开配置文件中关于"For S3"部分中"Deep Storage"和"Indexing service logs"的配置

上述操作之后,您将看到以下的变化:

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

#druid.storage.type=local
#druid.storage.storageDirectory=var/druid/segments

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

#druid.indexer.logs.type=file
#druid.indexer.logs.directory=var/druid/indexing-logs

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

更多信息可以看S3扩展部分的文档。

HDFS

conf/druid/cluster/_common/common.runtime.properties中,

  • druid.extension.loadList配置项中增加"druid-hdfs-storage"扩展
  • 注释掉配置文件中用于本地存储的"Deep Storage"和"Indexing service logs"
  • 打开配置文件中关于"For HDFS"部分中"Deep Storage"和"Indexing service logs"的配置

上述操作之后,您将看到以下的变化:

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

#druid.storage.type=local
#druid.storage.storageDirectory=var/druid/segments

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

#druid.indexer.logs.type=file
#druid.indexer.logs.directory=var/druid/indexing-logs

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

同时:

  • 需要将Hadoop的配置文件core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml放置在Druid进程的classpath中可以将他们拷贝到conf/druid/cluster/_common目录中

更多信息可以看HDFS扩展部分的文档。

Hadoop连接配置

如果要从Hadoop集群加载数据那么此时应对Druid做如下配置

  • conf/druid/cluster/_common/common.runtime.properties文件中更新druid.indexer.task.hadoopWorkingPath配置项将其更新为您期望的一个用于临时文件存储的HDFS路径。 通常会配置为druid.indexer.task.hadoopWorkingPath=/tmp/druid-indexing
  • 需要将Hadoop的配置文件core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml放置在Druid进程的classpath中可以将他们拷贝到conf/druid/cluster/_common目录中

请注意您无需为了可以从Hadoop加载数据而使用HDFS深度存储。例如如果您的集群在Amazon Web Services上运行即使您使用Hadoop或Elastic MapReduce加载数据我们也建议使用S3进行深度存储。

更多信息可以看基于Hadoop的数据摄取部分的文档。

Zookeeper连接配置

在生产集群中我们建议使用专用的ZK集群该集群与Druid服务器分开部署。

conf/druid/cluster/_common/common.runtime.properties 中,将 druid.zk.service.host 设置为包含用逗号分隔的hostport对列表的连接字符串每个对与ZK中的ZooKeeper服务器相对应。例如" 127.0.0.1:4545"或"127.0.0.1:3000,127.0.0.1:3001、127.0.0.1:3002"

您也可以选择在Master服务上运行ZK而不使用专用的ZK集群。如果这样做我们建议部署3个Master服务以便您具有ZK仲裁。

配置调整

从单服务器环境迁移部署

Master服务

如果您使用的是单服务器部署示例中的示例配置则这些示例中将Coordinator和Overlord进程合并为一个合并的进程。

conf/druid/cluster/master/coordinator-overlord 下的示例配置同样合并了Coordinator和Overlord进程。

您可以将现有的 coordinator-overlord 配置从单服务器部署复制到conf/druid/cluster/master/coordinator-overlord

Data服务
Query服务

重新部署

开启端口(如果使用了防火墙)

Master服务

Data服务

Query服务

启动Master服务

不带Zookeeper启动

带Zookeeper启动

启动Data服务

启动Query服务

加载数据