Apache Druid 中文翻译-集群部署(Clustered deployment)

Apache Druid被设计为作为可水平拓展、容错的集群进行部署。

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

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

  • 一台部署协调器(Coordinator )and 统治(Overlord )进程的master服务器
  • 两台水平拓展、容错的数据服务器运行Historical(历史服务) 和MiddleManager(中间管理)进程
  • 一台 部署Druid Broker and Router 进程的查询服务器

在生产中,我们建议根据您的特定容错需求部署多个主服务器和多个查询服务器实现容错配置,但是您可以使用一台主服务器和一台Query服务器先上手,并在以后添加更多服务器实现拓展。

选择硬件

新部署

如果您没有现有的Druid集群,并希望在集群部署中运行Druid,则本指南提供了一个示例,其中包含预先配置的集群部署。

Master server

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

在此示例中,我们将部署一个等效的AWS m5.2xlarge实例。

配置如下:

  • 8个vCPU
  • 31 GB内存

针对该硬件适配的示例master服务器配置可以在 Druid安装目录/conf/druid/cluster/master下面找到

data server

Historicals and MiddleManagers可以部署在同一服务器上,以处理集群中的实际数据。这些服务器受益于CPU,RAM和SSD。

在此示例中,我们将部署两个等效的AWS i3.4xlarge实例。

配置如下:

  • 16个vCPU
  • 122 GB内存
  • 2 * 1.9TB SSD储存空间

针对该硬件适配的示例data服务器配置可以在 Druid安装目录/conf/druid/cluster/data下面找到

Query server

Druid Brokers接受查询并将它们转发给集群的其余部分。它们还可以选择在内存中维护查询缓存。这些服务器受益于CPU和RAM。

在此示例中,我们将部署一个等效的AWS m5.2xlarge实例。

配置如下:

  • 8个vCPU
  • 31 GB内存

您可以考虑将所有开源UI或查询库共置于Broker运行所在的同一服务器上。

针对该硬件适配的示例data服务器配置可以在 Druid安装目录/conf/druid/cluster/query下面找到

 

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

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

如果您的用例具有复杂的扩展要求,则还可以选择不将Druid进程并置(例如,独立的Historical Server)。

基本集群优化指南会对你的决策和调整配置有帮助。

从单服务器部署迁移

如果您已有现有的单服务器部署,例如单服务器部署示例中的部署,并且希望迁移到类似规模的集群部署,则以下部分包含使用主服务器/数据/服务器选择等效硬件的准则查询服务器的组织。

Master server

主服务器的主要注意事项是Coordinator Overlord 堆的可用CPU和RAM。

汇总单机部署中为Coordinator Overlord 分配的堆大小,然后选择具有足够RAM用于堆总和的Master 服务器硬件,并为计算机上的其他进程提供一些额外的RAM。

对于CPU核数,您可以选择大约占单机部署核数1/4的硬件。

Data server

在为集群选择Data server硬件时,主要考虑因素是可用的CPU和RAM,并在可行时使用SSD存储。

在群集部署中,出于容错目的,最好拥有多个Data server

选择Data server硬件时,可以选择一个拆分因子N,将单服务器部署的原始CPU / RAM除以N,然后在新集群中部署N台Data server。

本指南后面的部分介绍了针对拆分调整Historical / MiddleManager配置的说明。

Query server

Query server的主要注意事项是Broker 堆+直接内存和Router 堆的可用CPU和RAM。

汇总单机部署中为Broker和Router分配的内存大小,然后选择Query Server硬件,该RAM具有足够的RAM来覆盖Broker / Router,并为计算机上的其他进程提供一些额外的RAM。

对于CPU内核,您可以选择大约占单服务器部署内核的1/4的硬件。

基本集群调谐引导有如何计算经纪人/路由器存储器使用情况的信息。

选择操作系统

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

  • Java 8

警告:运行Druid需要Java 8。虽然Druid可以在更高版本的Java上运行,但无法正常工作。

如果需要,您可以使用环境变量DRUID_JAVA_HOME或指定在哪里找到Java JAVA_HOME。有关更多详细信息,请运行verify-java脚本。

您的OS软件包管理器应该能够为这两种Java提供帮助。如果基于Ubuntu的OS没有足够新的Java版本,则WebUpd8将为这些OS提供软件包

下载发行版

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

下载 0.17.0版本。

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

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

在安装包中,您将找到:

  • LICENSENOTICE文件
  • bin/*-与单机快速入门相关的脚本
  • conf/druid/cluster/* -集群设置的模板配置
  • extensions/* -核心德鲁伊扩展
  • hadoop-dependencies/* -Druid Hadoop依赖项
  • lib/* -核心Druid的库和依赖项
  • quickstart/*-与单机快速入门相关的文件

我们将编辑文件conf/druid/cluster/以使一切正常运行。

从单服务器部署迁移

为了保证运行,我们将修改conf/druid/cluster目录下的配置

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

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

从单服务器部署迁移

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

这个指南对使用Derby  metadata store或者本地深度存储的单机部署。如果您已经在单机群集中使用非Derb  metadata store,则可以将现有 metadata store重新用于新群集。

这个指南还提供有关从本地深层存储迁移段的信息。集群部署需要分布式深度存储,例如S3或HDFS。如果单服务器部署已在使用分布式深度存储,则可以将现有的深度存储重新用于新集群。

元数据存储

在中conf/druid/cluster/_common/common.runtime.properties,将“ metadata.storage.*”替换为将用作metadata store的计算机的地址:

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

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

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

深度储存

Druid依赖于分布式文件系统或大对象(blob)存储来存储数据。最常用的深度存储实现是S3(在AWS上常用)和HDFS(已有Hadoop部署时常用)。

S3

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

  • 将“ druid-s3-extensions”添加到中druid.extensions.loadList

  • 在“深度存储”和“索引服务日志”下注释掉本地存储的配置。

  • 在“深度存储”和“索引服务日志”的“对于S3”部分中取消注释并配置适当的值。

之后,您应该进行以下更改:

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-hdfs-storage”添加到中druid.extensions.loadList

  • 在“深度存储”和“索引服务日志”下注释掉本地存储的配置。

  • 在“深度存储”和“索引服务日志”的“对于HDFS”部分中取消注释并配置适当的值。

之后,您应该进行以下更改:

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配置XML(core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml)放在Druid进程的类路径上。您可以通过将它们复制到 conf/druid/cluster/_common/中来完成此操作。

请参阅HDFS扩展文档以获取更多信息。

配置用于连接到Hadoop(可选)

如果要从Hadoop集群加载数据,则此时应配置Druid以获取集群信息:

  • 更新conf/druid/cluster/middleManager/runtime.properties 中的druid.indexer.task.hadoopWorkingPath属性为使用索引过程所需的临时文件在HDFS上的路径。 druid.indexer.task.hadoopWorkingPath=/tmp/druid-indexing是一个常见的选择。

  • 将您的Hadoop配置XML(core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml)放在Druid进程的类路径上。您可以通过将它们复制到 conf/druid/cluster/_common/core-site.xmlconf/druid/cluster/_common/hdfs-site.xml等等完成。

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

有关更多信息,请参见基于Hadoop的提取页面。

配置Zookeeper连接

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

conf/druid/cluster/_common/common.runtime.properties中,将 druid.zk.service.host设置为包含用逗号分隔的host:port对列表的连接字符串,与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个主服务器,以便您具有ZK投票功能。

配置调整

从单机部署迁移

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

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

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

Data

假设我们正在从具有32个CPU和256GB RAM的单服务器部署中迁移。在旧的部署中,应用了Historicals和MiddleManager的以下配置:

Historicals(单服务器)

druid.processing.buffer.sizeBytes=500000000
druid.processing.numMergeBuffers=8
druid.processing.numThreads=31
 

MiddleManager(单服务器)

druid.worker.capacity=8
druid.indexer.fork.property.druid.processing.numMergeBuffers=2
druid.indexer.fork.property.druid.processing.buffer.sizeBytes=100000000
druid.indexer.fork.property.druid.processing.numThreads=1
 

在集群部署中,我们可以选择一个拆分因子(在此示例中为2),并部署2个数据服务器,每个服务器分别具有16CPU和128GB RAM。要扩展的领域如下:

Historicals

  • druid.processing.numThreads:设置为(num_cores - 1)基于新硬件
  • druid.processing.numMergeBuffers:将单服务器部署中的旧值除以拆分因子
  • druid.processing.buffer.sizeBytes:保持不变

MiddleManager:

  • druid.worker.capacity:将单服务器部署中的旧值除以拆分因子
  • druid.indexer.fork.property.druid.processing.numMergeBuffers:保持不变
  • druid.indexer.fork.property.druid.processing.buffer.sizeBytes:保持不变
  • druid.indexer.fork.property.druid.processing.numThreads:保持不变

分割后产生的配置:

新Historicals(在2个数据服务器上)

 druid.processing.buffer.sizeBytes=500000000
 druid.processing.numMergeBuffers=8
 druid.processing.numThreads=31
 

新的MiddleManager(在2个数据服务器上)

druid.worker.capacity=4
druid.indexer.fork.property.druid.processing.numMergeBuffers=2
druid.indexer.fork.property.druid.processing.buffer.sizeBytes=100000000
druid.indexer.fork.property.druid.processing.numThreads=1

Query

您可以将现有的Broker和Router配置复制到下的目录中conf/druid/cluster/query,无需更改,只要相应地调整了新硬件的大小即可。

全新部署

如果您使用的是上述示例集群:

  • 1个主服务器(m5.2xlarge)
  • 2个数据服务器(i3.4xlarge)
  • 1个查询服务器(m5.2xlarge)

conf/druid/cluster下面的配置已经为此硬件确定了尺寸,并且您无需针对一般使用情况进行进一步的修改。

如果您选择了其他硬件,则基本的群集调整指南可以帮助您调整配置大小。

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

如果您使用的防火墙或其他仅允许特定端口上的流量的系统,请在以下端口上允许入站连接:

主服务器

  • 1527(Derby元数据存储;如果您正在使用单独的元数据存储,例如MySQL或PostgreSQL,则不需要)
  • 2181(ZooKeeper;如果使用单独的ZooKeeper集群,则不需要)
  • 8081(Coordinator
  • 8090(Overlord

数据服务器

  • 8083(Historicals
  • 8091,8100–8199(MiddleManager;如果配置的druid.worker.capacity很高,则可能需要高于端口8199 )

查询服务器

  • 8082(Broker)
  • 8088(Router,如果使用)

在生产中,我们建议将ZooKeeper和元数据存储部署在其专用硬件上,而不是在Master服务器上。

启动主服务器

将Druid发行版和您编辑的配置复制到主服务器。

如果您一直在本地计算机上编辑配置,则可以使用rsync复制它们:

rsync -az apache-druid-0.17.0/ MASTER_SERVER:apache-druid-0.17.0/

Master上没有Zookeeper

在根目录中,运行以下命令以启动Master:

bin/start-cluster-master-no-zk-server

将Zookeeper与Master部署在一起

如果您计划在主服务器上运行ZK,请首先将conf/zoo.cfg更新为你期望ZK运行的配置。然后,您可以使用以下命令与ZK一起启动主服务器进程:

bin/start-cluster-master-with-zk-server
 

在生产中,我们还建议在自己的专用硬件上运行ZooKeeper群集。

启动数据服务器

将Druid和您编辑的配置复制到您的数据服务器。

在根目录中,运行以下命令以启动数据服务器:

bin/start-cluster-data-server
 

您可以根据需要添加更多数据服务器。

对于具有复杂资源分配需求的集群,您可以将Historys和MiddleManager分开,并分别扩展组件。这也使您能够利用Druid的内置MiddleManager自动缩放功能。

启动查询服务器

将Druid分发和您编辑的配置复制到查询服务器。

在分发根目录中,运行以下命令以启动查询服务器:

bin/start-cluster-query-server
 

您可以根据查询负载,根据需要添加更多查询服务器。如果增加了查询服务器的数量,请确保按照基本集群调优指南中的说明调整“历史记录”和“任务”上的连接池。

加载数据中

恭喜,您现在有了Druid集群!下一步是根据用例了解将数据加载到Druid的推荐方法。阅读有关加载数据的更多信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章