Apache Druid被設計爲作爲可水平拓展、容錯的集羣進行部署。
在本文檔中,我們將設置一個簡單的集羣,並討論如何對其進行進一步配置以滿足您的需求。
這個簡單的集羣將具有以下特點:
- 一臺部署協調器(Coordinator )and 統治(Overlord )進程的master服務器
- 兩臺水平拓展、容錯的數據服務器運行Historical(歷史服務) 和MiddleManager(中間管理)進程
- 一臺 部署Druid Broker and Router 進程的查詢服務器
在生產中,我們建議根據您的特定容錯需求部署多個主服務器和多個查詢服務器實現容錯配置,但是您可以使用一臺主服務器和一臺Query服務器先上手,並在以後添加更多服務器實現拓展。
選擇硬件
新部署
如果您沒有現有的Druid集羣,並希望在集羣部署中運行Druid,則本指南提供了一個示例,其中包含預先配置的集羣部署。
Coordinator 和Overlord進程負責處理集羣的元數據和協調需求。它們可以一起部署在同一臺服務器上。
在此示例中,我們將部署一個等效的AWS m5.2xlarge實例。
配置如下:
- 8個vCPU
- 31 GB內存
針對該硬件適配的示例master服務器配置可以在 Druid安裝目錄/conf/druid/cluster/master下面找到
。
Historicals and MiddleManagers可以部署在同一服務器上,以處理集羣中的實際數據。這些服務器受益於CPU,RAM和SSD。
在此示例中,我們將部署兩個等效的AWS i3.4xlarge實例。
配置如下:
- 16個vCPU
- 122 GB內存
- 2 * 1.9TB SSD儲存空間
針對該硬件適配的示例data服務器配置可以在 Druid安裝目錄/conf/druid/cluster/data下面找到
。
Druid Brokers接受查詢並將它們轉發給集羣的其餘部分。它們還可以選擇在內存中維護查詢緩存。這些服務器受益於CPU和RAM。
在此示例中,我們將部署一個等效的AWS m5.2xlarge實例。
配置如下:
- 8個vCPU
- 31 GB內存
您可以考慮將所有開源UI或查詢庫共置於Broker運行所在的同一服務器上。
針對該硬件適配的示例data服務器配置可以在 Druid安裝目錄/conf/druid/cluster/query下面找到
。
上面的示例集羣是從多種確定Druid集羣大小的可能方式中選擇的一個示例。
您可以根據自己的特定需求和限制選擇較小/較大的硬件或較少/更多的服務器。
如果您的用例具有複雜的擴展要求,則還可以選擇不將Druid進程並置(例如,獨立的Historical 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的主要注意事項是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
或指定在哪裏找到JavaJAVA_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
在安裝包中,您將找到:
LICENSE
和NOTICE
文件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部署時常用)。
在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擴展文檔以獲取更多信息。
在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.xml
,conf/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
。
假設我們正在從具有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
您可以將現有的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
您可以根據查詢負載,根據需要添加更多查詢服務器。如果增加了查詢服務器的數量,請確保按照基本集羣調優指南中的說明調整“歷史記錄”和“任務”上的連接池。