<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Apache Druid">
<meta name="keywords" content="druid,kafka,database,analytics,streaming,real-time,real time,apache,open source">
<meta name="author" content="Apache Software Foundation">

<title>Druid | Setting up a Clustered Deployment</title>

<link rel="alternate" type="application/atom+xml" href="/feed">
<link rel="shortcut icon" href="/img/favicon.png">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">

<link href='//fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700,300italic|Open+Sans:300italic,400italic,600italic,400,300,600,700' rel='stylesheet' type='text/css'>

<link rel="stylesheet" href="/css/bootstrap-pure.css?v=1.1">
<link rel="stylesheet" href="/css/base.css?v=1.1">
<link rel="stylesheet" href="/css/header.css?v=1.1">
<link rel="stylesheet" href="/css/footer.css?v=1.1">
<link rel="stylesheet" href="/css/syntax.css?v=1.1">
<link rel="stylesheet" href="/css/docs.css?v=1.1">

<script>
  (function() {
    var cx = '000162378814775985090:molvbm0vggm';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
        '//cse.google.com/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>


  </head>

  <body>
    <!-- Start page_header include -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<div class="top-navigator">
  <div class="container">
    <div class="left-cont">
      <a class="logo" href="/"><span class="druid-logo"></span></a>
    </div>
    <div class="right-cont">
      <ul class="links">
        <li class=""><a href="/technology">Technology</a></li>
        <li class=""><a href="/use-cases">Use Cases</a></li>
        <li class=""><a href="/druid-powered">Powered By</a></li>
        <li class=""><a href="/docs/latest/design/">Docs</a></li>
        <li class=""><a href="/community/">Community</a></li>
        <li class="header-dropdown">
          <a>Apache</a>
          <div class="header-dropdown-menu">
            <a href="https://www.apache.org/" target="_blank">Foundation</a>
            <a href="https://www.apache.org/events/current-event" target="_blank">Events</a>
            <a href="https://www.apache.org/licenses/" target="_blank">License</a>
            <a href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a>
            <a href="https://www.apache.org/security/" target="_blank">Security</a>
            <a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a>
          </div>
        </li>
        <li class=" button-link"><a href="/downloads.html">Download</a></li>
      </ul>
    </div>
  </div>
  <div class="action-button menu-icon">
    <span class="fa fa-bars"></span> MENU
  </div>
  <div class="action-button menu-icon-close">
    <span class="fa fa-times"></span> MENU
  </div>
</div>

<script type="text/javascript">
  var $menu = $('.right-cont');
  var $menuIcon = $('.menu-icon');
  var $menuIconClose = $('.menu-icon-close');

  function showMenu() {
    $menu.fadeIn(100);
    $menuIcon.fadeOut(100);
    $menuIconClose.fadeIn(100);
  }

  $menuIcon.click(showMenu);

  function hideMenu() {
    $menu.fadeOut(100);
    $menuIconClose.fadeOut(100);
    $menuIcon.fadeIn(100);
  }

  $menuIconClose.click(hideMenu);

  $(window).resize(function() {
    if ($(window).width() >= 840) {
      $menu.fadeIn(100);
      $menuIcon.fadeOut(100);
      $menuIconClose.fadeOut(100);
    }
    else {
      $menu.fadeOut(100);
      $menuIcon.fadeIn(100);
      $menuIconClose.fadeOut(100);
    }
  });
</script>

<!-- Stop page_header include -->


    <div class="container doc-container">
      
      

      
      <p> Looking for the <a href="/docs/0.16.1-incubating/">latest stable documentation</a>?</p>
      

      <div class="row">
        <div class="col-md-9 doc-content">
          <p>
            <a class="btn btn-default btn-xs visible-xs-inline-block visible-sm-inline-block" href="#toc">Table of Contents</a>
          </p>
          <!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<h1 id="setting-up-a-clustered-deployment">Setting up a Clustered Deployment</h1>

<p>Apache Druid (incubating) is designed to be deployed as a scalable, fault-tolerant cluster.</p>

<p>In this document, we&#39;ll set up a simple cluster and discuss how it can be further configured to meet
your needs. </p>

<p>This simple cluster will feature:
 - A Master server to host the Coordinator and Overlord processes
 - Two scalable, fault-tolerant Data servers running Historical and MiddleManager processes
 - A query server, hosting the Druid Broker and Router processes</p>

<p>In production, we recommend deploying multiple Master servers and multiple Query servers in a fault-tolerant configuration based on your specific fault-tolerance needs, but you can get started quickly with one Master and one Query server and add more servers later.</p>

<h2 id="select-hardware">Select hardware</h2>

<h3 id="fresh-deployment">Fresh Deployment</h3>

<p>If you do not have an existing Druid cluster, and wish to start running Druid in a clustered deployment, this guide provides an example clustered deployment with pre-made configurations.</p>

<h4 id="master-server">Master Server</h4>

<p>The Coordinator and Overlord processes are responsible for handling the metadata and coordination needs of your cluster. They can be colocated together on the same server. </p>

<p>In this example, we will be deploying the equivalent of one AWS <a href="https://aws.amazon.com/ec2/instance-types/m5/">m5.2xlarge</a> instance.</p>

<p>This hardware offers:
- 8 vCPUs
- 31 GB RAM</p>

<p>Example Master server configurations that have been sized for this hardware can be found under <code>conf/druid/cluster/master</code>.</p>

<h4 id="data-server">Data Server</h4>

<p>Historicals and MiddleManagers can be colocated on the same server to handle the actual data in your cluster. These servers benefit greatly from CPU, RAM,
and SSDs. </p>

<p>In this example, we will be deploying the equivalent of two AWS <a href="https://aws.amazon.com/ec2/instance-types/i3/">i3.4xlarge</a> instances. </p>

<p>This hardware offers:</p>

<ul>
<li>16 vCPUs</li>
<li>122 GB RAM</li>
<li>2 * 1.9TB SSD storage</li>
</ul>

<p>Example Data server configurations that have been sized for this hardware can be found under <code>conf/druid/cluster/data</code>.</p>

<h4 id="query-server">Query Server</h4>

<p>Druid Brokers accept queries and farm them out to the rest of the cluster. They also optionally maintain an
in-memory query cache. These servers benefit greatly from CPU and RAM.</p>

<p>In this example, we will be deploying the equivalent of one AWS <a href="https://aws.amazon.com/ec2/instance-types/m5/">m5.2xlarge</a> instance. </p>

<p>This hardware offers:
- 8 vCPUs
- 31 GB RAM</p>

<p>You can consider co-locating any open source UIs or query libraries on the same server that the Broker is running on.</p>

<p>Example Query server configurations that have been sized for this hardware can be found under <code>conf/druid/cluster/query</code>.</p>

<h4 id="other-hardware-sizes">Other Hardware Sizes</h4>

<p>The example cluster above is chosen as a single example out of many possible ways to size a Druid cluster.</p>

<p>You can choose smaller/larger hardware or less/more servers for your specific needs and constraints.</p>

<p>If your use case has complex scaling requirements, you can also choose to not co-locate Druid processes (e.g., standalone Historical servers).</p>

<p>The information in the <a href="../operations/basic-cluster-tuning.html">basic cluster tuning guide</a> can help with your decision-making process and with sizing your configurations.</p>

<h3 id="migrating-from-a-single-server-deployment">Migrating from a Single-Server Deployment</h3>

<p>If you have an existing single-server deployment, such as the ones from the <a href="../operations/single-server.html">single-server deployment examples</a>, and you wish to migrate to a clustered deployment of similar scale, the following section contains guidelines for choosing equivalent hardware using the Master/Data/Query server organization.</p>

<h4 id="master-server">Master Server</h4>

<p>The main considerations for the Master server are available CPUs and RAM for the Coordinator and Overlord heaps.</p>

<p>Sum up the allocated heap sizes for your Coordinator and Overlord from the single-server deployment, and choose Master server hardware with enough RAM for the combined heaps, with some extra RAM for other processes on the machine.</p>

<p>For CPU cores, you can choose hardware with approximately 1/4th of the cores of the single-server deployment.</p>

<h4 id="data-server">Data Server</h4>

<p>When choosing Data server hardware for the cluster, the main considerations are available CPUs and RAM, and using SSD storage if feasible.</p>

<p>In a clustered deployment, having multiple Data servers is a good idea for fault-tolerance purposes.</p>

<p>When choosing the Data server hardware, you can choose a split factor <code>N</code>, divide the original CPU/RAM of the single-server deployment by <code>N</code>, and deploy <code>N</code> Data servers of reduced size in the new cluster.</p>

<p>Instructions for adjusting the Historical/MiddleManager configs for the split are described in a later section in this guide.</p>

<h4 id="query-server">Query Server</h4>

<p>The main considerations for the Query server are available CPUs and RAM for the Broker heap + direct memory, and Router heap.</p>

<p>Sum up the allocated memory sizes for your Broker and Router from the single-server deployment, and choose Query server hardware with enough RAM to cover the Broker/Router, with some extra RAM for other processes on the machine.</p>

<p>For CPU cores, you can choose hardware with approximately 1/4th of the cores of the single-server deployment.</p>

<p>The <a href="../operations/basic-cluster-tuning.html">basic cluster tuning guide</a> has information on how to calculate Broker/Router memory usage.</p>

<h2 id="select-os">Select OS</h2>

<p>We recommend running your favorite Linux distribution. You will also need:</p>

<ul>
<li>Java 8</li>
</ul>

<p>Your OS package manager should be able to help for both Java. If your Ubuntu-based OS
does not have a recent enough version of Java, WebUpd8 offers <a href="http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html">packages for those
OSes</a>.</p>

<h2 id="download-the-distribution">Download the distribution</h2>

<p>First, download and unpack the release archive. It&#39;s best to do this on a single machine at first,
since you will be editing the configurations and then copying the modified distribution out to all
of your servers.</p>

<p><a href="https://www.apache.org/dyn/closer.cgi?path=/incubator/druid/0.15.0-incubating/apache-druid-0.15.0-incubating-bin.tar.gz">Download</a>
the 0.15.0-incubating release.</p>

<p>Extract Druid by running the following commands in your terminal:</p>
<div class="highlight"><pre><code class="language-bash" data-lang="bash"><span></span>tar -xzf apache-druid-0.15.0-incubating-bin.tar.gz
<span class="nb">cd</span> apache-druid-0.15.0-incubating
</code></pre></div>
<p>In the package, you should find:</p>

<ul>
<li><code>DISCLAIMER</code>, <code>LICENSE</code>, and <code>NOTICE</code> files</li>
<li><code>bin/*</code> - scripts related to the <a href="index.html">single-machine quickstart</a></li>
<li><code>conf/druid/cluster/*</code> - template configurations for a clustered setup</li>
<li><code>extensions/*</code> - core Druid extensions</li>
<li><code>hadoop-dependencies/*</code> - Druid Hadoop dependencies</li>
<li><code>lib/*</code> - libraries and dependencies for core Druid</li>
<li><code>quickstart/*</code> - files related to the <a href="index.html">single-machine quickstart</a></li>
</ul>

<p>We&#39;ll be editing the files in <code>conf/druid/cluster/</code> in order to get things running.</p>

<h3 id="migrating-from-single-server-deployments">Migrating from Single-Server Deployments</h3>

<p>In the following sections we will be editing the configs under <code>conf/druid/cluster</code>.</p>

<p>If you have an existing single-server deployment, please copy your existing configs to <code>conf/druid/cluster</code> to preserve any config changes you have made.</p>

<h2 id="configure-metadata-storage-and-deep-storage">Configure metadata storage and deep storage</h2>

<h3 id="migrating-from-single-server-deployments">Migrating from Single-Server Deployments</h3>

<p>If you have an existing single-server deployment and you wish to preserve your data across the migration, please follow the instructions at <a href="../operations/metadata-migration.html">metadata migration</a> and <a href="../operations/deep-storage-migration.html">deep storage migration</a> before updating your metadata/deep storage configs.</p>

<p>These guides are targeted at single-server deployments that use the Derby metadata store and local deep storage. If you are already using a non-Derby metadata store in your single-server cluster, you can reuse the existing metadata store for the new cluster.</p>

<p>These guides also provide information on migrating segments from local deep storage. A clustered deployment requires distributed deep storage like S3 or HDFS. If your single-server deployment was already using distributed deep storage, you can reuse the existing deep storage for the new cluster.</p>

<h3 id="metadata-storage">Metadata Storage</h3>

<p>In <code>conf/druid/cluster/_common/common.runtime.properties</code>, replace
&quot;metadata.storage.*&quot; with the address of the machine that you will use as your metadata store:</p>

<ul>
<li><code>druid.metadata.storage.connector.connectURI</code></li>
<li><code>druid.metadata.storage.connector.host</code></li>
</ul>

<p>In a production deployment, we recommend running a dedicated metadata store such as MySQL or PostgreSQL with replication, deployed separately from the Druid servers.</p>

<p>The <a href="../development/extensions-core/mysql.html">MySQL extension</a> and <a href="../development/extensions-core/postgresql.html">PostgreSQL extension</a> docs have instructions for extension configuration and initial database setup.</p>

<h3 id="deep-storage">Deep Storage</h3>

<p>Druid relies on a distributed filesystem or large object (blob) store for data storage. The most
commonly used deep storage implementations are S3 (popular for those on AWS) and HDFS (popular if
you already have a Hadoop deployment).</p>

<h4 id="s3">S3</h4>

<p>In <code>conf/druid/cluster/_common/common.runtime.properties</code>,</p>

<ul>
<li><p>Add &quot;druid-s3-extensions&quot; to <code>druid.extensions.loadList</code>.</p></li>
<li><p>Comment out the configurations for local storage under &quot;Deep Storage&quot; and &quot;Indexing service logs&quot;.</p></li>
<li><p>Uncomment and configure appropriate values in the &quot;For S3&quot; sections of &quot;Deep Storage&quot; and
&quot;Indexing service logs&quot;.</p></li>
</ul>

<p>After this, you should have made the following changes:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>druid.extensions.loadList=[&quot;druid-s3-extensions&quot;]

#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
</code></pre></div>
<p>Please see the <a href="../development/extensions-core/s3.html">S3 extension</a> documentation for more info.</p>

<h4 id="hdfs">HDFS</h4>

<p>In <code>conf/druid/cluster/_common/common.runtime.properties</code>,</p>

<ul>
<li><p>Add &quot;druid-hdfs-storage&quot; to <code>druid.extensions.loadList</code>.</p></li>
<li><p>Comment out the configurations for local storage under &quot;Deep Storage&quot; and &quot;Indexing service logs&quot;.</p></li>
<li><p>Uncomment and configure appropriate values in the &quot;For HDFS&quot; sections of &quot;Deep Storage&quot; and
&quot;Indexing service logs&quot;.</p></li>
</ul>

<p>After this, you should have made the following changes:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>druid.extensions.loadList=[&quot;druid-hdfs-storage&quot;]

#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
</code></pre></div>
<p>Also,</p>

<ul>
<li>Place your Hadoop configuration XMLs (core-site.xml, hdfs-site.xml, yarn-site.xml,
mapred-site.xml) on the classpath of your Druid processes. You can do this by copying them into
<code>conf/druid/cluster/_common/</code>.</li>
</ul>

<p>Please see the <a href="../development/extensions-core/hdfs.html">HDFS extension</a> documentation for more info.</p>

<h2 id="configure-tranquility-server-optional">Configure Tranquility Server (optional)</h2>

<p>Data streams can be sent to Druid through a simple HTTP API powered by Tranquility
Server. If you will be using this functionality, then at this point you should <a href="../ingestion/stream-ingestion.html#server">configure
Tranquility Server</a>.</p>

<h2 id="configure-for-connecting-to-hadoop-optional">Configure for connecting to Hadoop (optional)</h2>

<p>If you will be loading data from a Hadoop cluster, then at this point you should configure Druid to be aware
of your cluster:</p>

<ul>
<li><p>Update <code>druid.indexer.task.hadoopWorkingPath</code> in <code>conf/druid/cluster/middleManager/runtime.properties</code> to
a path on HDFS that you&#39;d like to use for temporary files required during the indexing process.
<code>druid.indexer.task.hadoopWorkingPath=/tmp/druid-indexing</code> is a common choice.</p></li>
<li><p>Place your Hadoop configuration XMLs (core-site.xml, hdfs-site.xml, yarn-site.xml,
mapred-site.xml) on the classpath of your Druid processes. You can do this by copying them into
<code>conf/druid/cluster/_common/core-site.xml</code>, <code>conf/druid/cluster/_common/hdfs-site.xml</code>, and so on.</p></li>
</ul>

<p>Note that you don&#39;t need to use HDFS deep storage in order to load data from Hadoop. For example, if
your cluster is running on Amazon Web Services, we recommend using S3 for deep storage even if you
are loading data using Hadoop or Elastic MapReduce.</p>

<p>For more info, please see <a href="../ingestion/batch-ingestion.html">batch ingestion</a>.</p>

<h2 id="configure-zookeeper-connection">Configure Zookeeper connection</h2>

<p>In a production cluster, we recommend using a dedicated ZK cluster in a quorum, deployed separately from the Druid servers.</p>

<p>In <code>conf/druid/cluster/_common/common.runtime.properties</code>, set
<code>druid.zk.service.host</code> to a <a href="https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html">connection string</a>
containing a comma separated list of host:port pairs, each corresponding to a ZooKeeper server in your ZK quorum.
(e.g. &quot;127.0.0.1:4545&quot; or &quot;127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002&quot;)</p>

<p>You can also choose to run ZK on the Master servers instead of having a dedicated ZK cluster. If doing so, we recommend deploying 3 Master servers so that you have a ZK quorum.</p>

<h2 id="configuration-tuning">Configuration Tuning</h2>

<h3 id="migrating-from-a-single-server-deployment">Migrating from a Single-Server Deployment</h3>

<h4 id="master">Master</h4>

<p>If you are using an example configuration from <a href="../operations/single-server.html">single-server deployment examples</a>, these examples combine the Coordinator and Overlord processes into one combined process.</p>

<p>The example configs under <code>conf/druid/cluster/master/coordinator-overlord</code> also combine the Coordinator and Overlord processes.</p>

<p>You can copy your existing <code>coordinator-overlord</code> configs from the single-server deployment to <code>conf/druid/cluster/master/coordinator-overlord</code>.</p>

<h4 id="data">Data</h4>

<p>Suppose we are migrating from a single-server deployment that had 32 CPU and 256GB RAM. In the old deployment, the following configurations for Historicals and MiddleManagers were applied:</p>

<p>Historical (Single-server)
<code>
druid.processing.buffer.sizeBytes=500000000
druid.processing.numMergeBuffers=8
druid.processing.numThreads=31
</code></p>

<p>MiddleManager (Single-server)
<code>
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
</code></p>

<p>In the clustered deployment, we can choose a split factor (2 in this example), and deploy 2 Data servers with 16CPU and 128GB RAM each. The areas to scale are the following:</p>

<p>Historical
- <code>druid.processing.numThreads</code>: Set to <code>(num_cores - 1)</code> based on the new hardware
- <code>druid.processing.numMergeBuffers</code>: Divide the old value from the single-server deployment by the split factor
- <code>druid.processing.buffer.sizeBytes</code>: Keep this unchanged</p>

<p>MiddleManager:
- <code>druid.worker.capacity</code>: Divide the old value from the single-server deployment by the split factor
- <code>druid.indexer.fork.property.druid.processing.numMergeBuffers</code>: Keep this unchanged
- <code>druid.indexer.fork.property.druid.processing.buffer.sizeBytes</code>: Keep this unchanged
- <code>druid.indexer.fork.property.druid.processing.numThreads</code>: Keep this unchanged</p>

<p>The resulting configs after the split:</p>

<p>New Historical (on 2 Data servers)
<code>
 druid.processing.buffer.sizeBytes=500000000
 druid.processing.numMergeBuffers=8
 druid.processing.numThreads=31
</code></p>

<p>New MiddleManager (on 2 Data servers)
<code>
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
</code></p>

<h4 id="query">Query</h4>

<p>You can copy your existing Broker and Router configs to the directories under <code>conf/druid/cluster/query</code>, no modifications are needed, as long as the new hardware is sized accordingly.</p>

<h3 id="fresh-deployment">Fresh deployment</h3>

<p>If you are using the example cluster described above:
- 1 Master server (m5.2xlarge)
- 2 Data servers (i3.4xlarge)
- 1 Query server (m5.2xlarge)</p>

<p>The configurations under <code>conf/druid/cluster</code> have already been sized for this hardware and you do not need to make further modifications for general use cases.</p>

<p>If you have chosen different hardware, the <a href="../operations/basic-cluster-tuning.html">basic cluster tuning guide</a> can help you size your configurations.</p>

<h2 id="open-ports-if-using-a-firewall">Open ports (if using a firewall)</h2>

<p>If you&#39;re using a firewall or some other system that only allows traffic on specific ports, allow
inbound connections on the following:</p>

<h3 id="master-server">Master Server</h3>

<ul>
<li>1527 (Derby metadata store; not needed if you are using a separate metadata store like MySQL or PostgreSQL)</li>
<li>2181 (ZooKeeper; not needed if you are using a separate ZooKeeper cluster)</li>
<li>8081 (Coordinator)</li>
<li>8090 (Overlord)</li>
</ul>

<h3 id="data-server">Data Server</h3>

<ul>
<li>8083 (Historical)</li>
<li>8091, 8100&ndash;8199 (Druid Middle Manager; you may need higher than port 8199 if you have a very high <code>druid.worker.capacity</code>)</li>
</ul>

<h3 id="query-server">Query Server</h3>

<ul>
<li>8082 (Broker)</li>
<li>8088 (Router, if used)</li>
</ul>

<h3 id="other">Other</h3>

<ul>
<li>8200 (Tranquility Server, if used)</li>
</ul>

<div class="note caution">
In production, we recommend deploying ZooKeeper and your metadata store on their own dedicated hardware,
rather than on the Master server.
</div>

<h2 id="start-master-server">Start Master Server</h2>

<p>Copy the Druid distribution and your edited configurations to your Master server.</p>

<p>If you have been editing the configurations on your local machine, you can use <em>rsync</em> to copy them:</p>
<div class="highlight"><pre><code class="language-bash" data-lang="bash"><span></span>rsync -az apache-druid-0.15.0-incubating/ MASTER_SERVER:apache-druid-0.15.0-incubating/
</code></pre></div>
<h3 id="no-zookeper-on-master">No Zookeper on Master</h3>

<p>From the distribution root, run the following command to start the Master server:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>bin/start-cluster-master-no-zk-server
</code></pre></div>
<h3 id="with-zookeeper-on-master">With Zookeeper on Master</h3>

<p>If you plan to run ZK on Master servers, first update <code>conf/zoo.cfg</code> to reflect how you plan to run ZK. Then log on to your Master servers and install Zookeeper:</p>
<div class="highlight"><pre><code class="language-bash" data-lang="bash"><span></span>curl http://www.gtlib.gatech.edu/pub/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz -o zookeeper-3.4.11.tar.gz
tar -xzf zookeeper-3.4.11.tar.gz
mv zookeeper-3.4.11 zk
</code></pre></div>
<p>If you are running ZK on the Master server, you can start the Master server processes together with ZK using:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>bin/start-cluster-master-with-zk-server
</code></pre></div>
<div class="note caution">
In production, we also recommend running a ZooKeeper cluster on its own dedicated hardware.
</div>

<h2 id="start-data-server">Start Data Server</h2>

<p>Copy the Druid distribution and your edited configurations to your Data servers.</p>

<p>From the distribution root, run the following command to start the Data server:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>bin/start-cluster-data-server
</code></pre></div>
<p>You can add more Data servers as needed.</p>

<div class="note info">
For clusters with complex resource allocation needs, you can break apart Historicals and MiddleManagers and scale the components individually.
This also allows you take advantage of Druid's built-in MiddleManager autoscaling facility.
</div>

<h3 id="tranquility">Tranquility</h3>

<p>If you are doing push-based stream ingestion with Kafka or over HTTP, you can also start Tranquility Server on the Data server. </p>

<p>For large scale production, Data server processes and the Tranquility Server can still be co-located. </p>

<p>If you are running Tranquility (not server) with a stream processor, you can co-locate Tranquility with the stream processor and not require Tranquility Server.</p>

<p>First install Tranquility:</p>
<div class="highlight"><pre><code class="language-bash" data-lang="bash"><span></span>curl http://static.druid.io/tranquility/releases/tranquility-distribution-0.8.3.tgz -o tranquility-distribution-0.8.3.tgz
tar -xzf tranquility-distribution-0.8.3.tgz
mv tranquility-distribution-0.8.3 tranquility
</code></pre></div>
<p>Afterwards, in <code>conf/supervise/cluster/data.conf</code>, uncomment out the <code>tranquility-server</code> line, and restart the Data server proceses.</p>

<h2 id="start-query-server">Start Query Server</h2>

<p>Copy the Druid distribution and your edited configurations to your Query servers.</p>

<p>From the distribution root, run the following command to start the Query server:</p>
<div class="highlight"><pre><code class="language-text" data-lang="text"><span></span>bin/start-cluster-query-server
</code></pre></div>
<p>You can add more Query servers as needed based on query load. If you increase the number of Query servers, be sure to adjust the connection pools on your Historicals and Tasks as described in the <a href="../operations/basic-cluster-tuning.html">basic cluster tuning guide</a>.</p>

<h2 id="loading-data">Loading data</h2>

<p>Congratulations, you now have a Druid cluster! The next step is to learn about recommended ways to load data into
Druid based on your use case. Read more about <a href="../ingestion/index.html">loading data</a>.</p>

        </div>
        <div class="col-md-3">
          <div class="searchbox">
            <gcse:searchbox-only></gcse:searchbox-only>
          </div>
          <div id="toc" class="nav toc hidden-print">
          </div>
        </div>
      </div>
    </div>

    <!-- Start page_footer include -->
<footer class="druid-footer">
<div class="container">
  <div class="text-center">
    <p>
    <a href="/technology">Technology</a>&ensp;·&ensp;
    <a href="/use-cases">Use Cases</a>&ensp;·&ensp;
    <a href="/druid-powered">Powered by Druid</a>&ensp;·&ensp;
    <a href="/docs/latest">Docs</a>&ensp;·&ensp;
    <a href="/community/">Community</a>&ensp;·&ensp;
    <a href="/downloads.html">Download</a>&ensp;·&ensp;
    <a href="/faq">FAQ</a>
    </p>
  </div>
  <div class="text-center">
    <a title="Join the user group" href="https://groups.google.com/forum/#!forum/druid-user" target="_blank"><span class="fa fa-comments"></span></a>&ensp;·&ensp;
    <a title="Follow Druid" href="https://twitter.com/druidio" target="_blank"><span class="fab fa-twitter"></span></a>&ensp;·&ensp;
    <a title="Download via Apache" href="https://www.apache.org/dyn/closer.cgi?path=/incubator/druid/0.16.1-incubating/apache-druid-0.16.1-incubating-bin.tar.gz" target="_blank"><span class="fas fa-feather"></span></a>&ensp;·&ensp;
    <a title="GitHub" href="https://github.com/apache/incubator-druid" target="_blank"><span class="fab fa-github"></span></a>
  </div>
  <div class="text-center license">
    Copyright © 2019 <a href="https://www.apache.org/" target="_blank">Apache Software Foundation</a>.<br>
    Except where otherwise noted, licensed under <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.<br>
    Apache Druid, Druid, and the Druid logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.
  </div>
</div>
</footer>

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'UA-131010415-1');
</script>
<script>
  function trackDownload(type, url) {
    ga('send', 'event', 'download', type, url);
  }
</script>
<script src="//code.jquery.com/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="/assets/js/druid.js"></script>
<!-- stop page_footer include -->


    <script>
    $(function() {
      $(".toc").load("/docs/0.15.0-incubating/toc.html");

      // There is no way to tell when .gsc-input will be async loaded into the page so just try to set a placeholder until it works
      var tries = 0;
      var timer = setInterval(function() {
        tries++;
        if (tries > 300) clearInterval(timer);
        var searchInput = $('input.gsc-input');
        if (searchInput.length) {
          searchInput.attr('placeholder', 'Search');
          clearInterval(timer);
        }
      }, 100);
    });
    </script>
  </body>
</html>
