Deploying a Databend Cluster
Databend recommends deploying a cluster with a minimum of three meta nodes and one query node for production environments. To gain a better understanding of Databend cluster deployment, see Understanding Databend Deployments, which will familiarize you with the concept. This topic aims to provide a practical guide for deploying a Databend cluster.
Before You Begin
Before you start, make sure you have completed the following preparations:
- Plan your deployment. This document is based on the following cluster deployment plan, which involves setting up a meta cluster comprising three meta nodes and a query cluster consisting of two query nodes:
| Node # | IP Address | Leader Meta Node? | Tenant ID | Query Cluster ID | 
|---|---|---|---|---|
| Meta-1 | 192.168.1.100 | Yes | - | - | 
| Meta-2 | 192.168.1.101 | No | - | - | 
| Meta-3 | 192.168.1.102 | No | - | - | 
| Query-1 | 192.168.1.10 | - | default | default | 
| Query-2 | 192.168.1.20 | - | default | default | 
- Download and extract the Databend package onto each of your prepared servers according to your deployment plan.
Step 1: Deploy Meta Cluster
- Configure the file databend-meta.toml in each meta node. Please note the following when configuring each node: - Ensure that the id parameter in each node is set to a unique value. 
- Set the single parameter to true for the leader meta node. 
- For follower meta nodes, comment out the single parameter using the # symbol, then add a join setting and provide an array of the IP addresses of the other meta nodes as its value. 
 
- Meta-1
- Meta-2
- Meta-3
log_dir                 = "/var/log/databend"
admin_api_address       = "0.0.0.0:28101"
grpc_api_address        = "0.0.0.0:9191"
# databend-query fetch this address to update its databend-meta endpoints list,
# in case databend-meta cluster changes.
grpc_api_advertise_host = "192.168.1.100"
[raft_config]
id            = 1
raft_dir      = "/var/lib/databend/raft"
raft_api_port = 28103
# Assign raft_{listen|advertise}_host in test config.
# This allows you to catch a bug in unit tests when something goes wrong in raft meta nodes communication.
raft_listen_host = "192.168.1.100"
raft_advertise_host = "192.168.1.100"
# Start up mode: single node cluster
single        = true
log_dir                 = "/var/log/databend"
admin_api_address       = "0.0.0.0:28101"
grpc_api_address        = "0.0.0.0:9191"
# databend-query fetch this address to update its databend-meta endpoints list,
# in case databend-meta cluster changes.
grpc_api_advertise_host = "192.168.1.101"
[raft_config]
id            = 2
raft_dir      = "/var/lib/databend/raft"
raft_api_port = 28103
# Assign raft_{listen|advertise}_host in test config.
# This allows you to catch a bug in unit tests when something goes wrong in raft meta nodes communication.
raft_listen_host = "192.168.1.101"
raft_advertise_host = "192.168.1.101"
# Start up mode: single node cluster
# single        = true
join            =["192.168.1.100:28103","192.168.1.102:28103"]
log_dir                 = "/var/log/databend"
admin_api_address       = "0.0.0.0:28101"
grpc_api_address        = "0.0.0.0:9191"
# databend-query fetch this address to update its databend-meta endpoints list,
# in case databend-meta cluster changes.
grpc_api_advertise_host = "192.168.1.102"
[raft_config]
id            = 3
raft_dir      = "/var/lib/databend/raft"
raft_api_port = 28103
# Assign raft_{listen|advertise}_host in test config.
# This allows you to catch a bug in unit tests when something goes wrong in raft meta nodes communication.
raft_listen_host = "192.168.1.102"
raft_advertise_host = "192.168.1.102"
# Start up mode: single node cluster
# single        = true
join            =["192.168.1.100:28103","192.168.1.101:28103"]
- To start the meta nodes, run the following script on each node: Start the leader node (Meta-1) first, followed by the follower nodes in sequence.
./databend-meta -c ./databend-meta.toml > meta.log 2>&1 &
- Once all the meta nodes have started, you can use the following curl command to check the nodes in the cluster:
curl 192.168.1.100:28102/v1/cluster/nodes
Step 2: Deploy Query Cluster
- Configure the file databend-query.toml in each query node. The following list only includes the parameters you need to set in each query node to reflect the deployment plan outlined in this document. - Set the tenant ID and cluster ID according to the deployment plan. 
- Set the endpoints parameter to an array of the IP addresses of the meta nodes. 
 
...
tenant_id = "default"
cluster_id = "default"
...
[meta]
# It is a list of `grpc_api_advertise_host:<grpc-api-port>` of databend-meta config
endpoints = ["192.168.1.100:9191","192.168.1.101:9191","192.168.1.102:9191"]
...
- For each query node, you also need to configure the object storage in the file databend-query.toml. For detailed instructions, see Deploying a Query Node. 
- Run the following script on each query node to start them: 
./databend-query -c ../configs/databend-query.toml > query.log 2>&1 &