1 集群部署简介
Apache Druid旨在作为可伸缩的容错集群进行部署。
在本教程中,我们将安装一个简单的集群,并介绍如何对其进行进一步配置以满足不用用户的需求。
这个简单的集群将具有以下特点:
- 一个Master服务同时起Coordinator和Overlord进程
- 两个可伸缩、容错的Data服务来运行Historical和MiddleManager进程
- 一个Query服务,运行Druid Broker和Router进程
在实际的工作生产中,我们建议根据您的特定容错需求部署多个Master服务器和多个Query服务器,但是您可以使用一台Master服务器和一台Query服务器将服务快速运行起来,然后再添加更多服务器。
2 首次部署
如果您现在没有Druid集群,并打算首次以集群模式部署运行Druid,则本教程提供了一个包含预先配置的集群部署示例。
Master服务
Coordinator进程和Overlord进程负责处理集群的元数据和协调需求,它们可以运行在同一台服务器上。
在本示例中,我们将在等效于AWSm5.2xlarge实例的硬件环境上进行部署。
硬件规格为:
您可以在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实例的硬件环境上部署。
硬件规格为:
您可以考虑将所有的其他开源UI工具或者查询依赖等与Broker服务部署在同一台服务器上。
您可以在conf/druid/cluster/query
下找到适用于此硬件规格的Query示例服务配置。
其他硬件配置
上面的示例集群是从多种确定Druid集群大小的可能方式中选择的一个示例。
您可以根据自己的特定需求和限制选择较小/较大的硬件或较少/更多的服务器。
如果您的使用场景具有复杂的扩展要求,则还可以选择不将Druid服务混合部署(例如,独立的Historical Server)。
基本集群调整教程中的信息可以帮助您进行决策,并可以调整配置大小。
3 从单服务器环境迁移部署
如果您现在已有单服务器部署的环境,例如单服务器部署示例(Apache Druid 下载安装)中的部署,并且希望迁移到类似规模的集群部署,则以下部分包含一些选择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的硬件。
4 选择操作系统
我们建议运行您熟悉的Linux版本,同时还需要:
5 下载Druid
具体可参考Apache Druid 下载安装的操作过程。
我们主要是编辑conf/druid/cluster/
中的文件。
从单服务器环境迁移部署
在以下各节中,我们将在conf/druid/cluster
下编辑配置。
如果您已经有一个单服务器部署,请将您的现有配置复制到conf/druid /cluster
以保留您所做的所有配置更改。
6 配置元数据存储和深度存储
从单服务器环境迁移部署
该教程针对使用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服务器分开部署。
深度存储
Druid依赖于分布式文件系统或大对象(blob)存储来存储数据,最常用的深度存储实现是S3(适合于在AWS上)和HDFS(适合于已有Hadoop集群)。
1)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
2)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
目录中。
7 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进行深度存储。
8 Zookeeper连接配置
在生产集群中,我们建议使用专用的ZK集群,该集群与Druid服务器分开部署。
在 conf/druid/cluster/_common/common.runtime.properties
中,将 druid.zk.service.host
设置为包含用逗号分隔的host:port对列表的连接字符串,每个对与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服务,以便您具有ZooKeeper仲裁。
9 配置调整
从单服务器环境迁移部署
1)Master服务
如果您使用的是单服务器部署示例(参考Apache Druid 下载安装)中的示例配置,则这些示例中将Coordinator和Overlord进程合并为一个合并的进程。
conf/druid/cluster/master/coordinator-overlord
下的示例配置同样合并了Coordinator和Overlord进程。
您可以将现有的 coordinator-overlord
配置从单服务器部署复制到conf/druid/cluster/master/coordinator-overlord
2)Data服务
假设我们正在从一个32CPU和256GB内存的单服务器部署环境进行迁移,在老的环境中,Historical和MiddleManager使用了如下的配置:
druid.processing.buffer.sizeBytes=500000000
druid.processing.numMergeBuffers=8
druid.processing.numThreads=31
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内存的Data服务,各项的调整如下:
- Historical
druid.processing.numThreads
设置为新硬件的(CPU核数 - 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
: 该值保持不变
调整后的结果配置如下:
新的Historical(2 Data服务器)
druid.processing.buffer.sizeBytes=500000000
druid.processing.numMergeBuffers=8
druid.processing.numThreads=31
新的MiddleManager(2 Data服务器)
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
3)Query服务
您可以将现有的Broker和Router配置复制到conf/druid/cluster/query
下的目录中,无需进行任何修改。
首次部署
如果您正在使用如下描述的示例集群规格:
- 1 Master 服务器(m5.2xlarge)
- 2 Data 服务器(i3.4xlarge)
- 1 Query 服务器(m5.2xlarge)
conf/druid/cluster
下的配置已经为此硬件确定了,一般情况下您无需做进一步的修改。
10 开启端口
如果您正在使用防火墙或其他仅允许特定端口上流量准入的系统,请在以下端口上允许入站连接。
1)Master服务
- 1527(Derby元数据存储,如果您正在使用一个像MySQL或者PostgreSQL的分离的元数据存储则不需要)
- 2181(Zookeeper,如果使用了独立的ZK集群则不需要)
- 8081(Coordinator)
- 8090(Overlord)
2)Data服务
- 8083(Historical)
- 8091,8100-8199(Druid MiddleManager,如果
druid.worker.capacity
参数设置较大的话,则需要更多高于8199的端口)
3)Query服务
- 8082(Broker)
- 8088(Router,如果使用了)
注意,在实际工作生产中,我们建议将ZooKeeper和元数据存储部署在其专用硬件上,而不是在Master服务器上。
11 启动服务
1)启动Master服务
将Druid发行版和您编辑的配置文件复制到Master服务器上。如果您一直在本地计算机上编辑配置,则可以使用rsync复制它们:
rsync -az apache-druid-0.17.0/ MASTER_SERVER:apache-druid-0.17.0/
在发行版根目录中,运行以下命令以启动Master服务:
bin/start-cluster-master-no-zk-server
如果计划在Master服务器上运行ZK,请首先更新conf/zoo.cfg
以标识您计划如何运行ZK,然后,您可以使用以下命令与ZK一起启动Master服务进程:
bin/start-cluster-master-with-zk-server
2)启动Data服务
将Druid发行版和您编辑的配置文件复制到您的Data服务器。
在发行版根目录中,运行以下命令以启动Data服务:
bin/start-cluster-data-server
3)启动Query服务
将Druid发行版和您编辑的配置文件复制到您的Query服务器。
在发行版根目录中,运行以下命令以启动Query服务:
bin/start-cluster-query-server
恭喜,您现在成功配置了Druid集群!
评论区(0)