跳转到主要内容

部署 Databend Meta 集群

tip

预计部署时间: 5 分钟:stopwatch:

databend-meta 是全局性的 metadata 服务(例如用户信息、表格架构等)。 单一 databend-meta 进程可用于测试,生产环境通常使用3到5个节点组成一个集群。

必须先部署并启动databend-meta,然后才能启动 databend-query 集群。

                               .~~~~~~~~~~~~~~~~.
! MySQL !
! ClickHouse !
! REST API !
.------. '~~~~~~~~~~~~~~~~'
| meta | ^
'------' |
^ v
| .----------------.
.------. | |
| meta |<-------------------->| databend-query |
'------' | |
| '----------------'
v ^
.------. !
| meta | v
'------' .~~~~~~~~~~~~~~~~.
! !
! AWS S3 !
! !
'~~~~~~~~~~~~~~~~'

1. 下载

您可以从 GitHub 下载最新的二进制文件或从源代码编译

mkdir databend && cd databend
curl -LJO https://github.com/datafuselabs/databend/releases/download/v0.7.32-nightly/databend-v0.7.32-nightly-x86_64-unknown-linux-musl.tar.gz
tar xzvf databend-v0.7.32-nightly-x86_64-unknown-linux-musl.tar.gz

您可以找到两个可执行文件:

ls
# databend-meta databend-query

2. 部署 databend-meta

tip

Databend 独立模式 不可以 在生产环境中使用。 但不必担心。 一个独立模式的 databend-meta 可随时通过 Cluster management API 扩展为一个包含3或5个节点的集群。

2.1 独立模式

2.1.1 配置 databend-meta.toml

databend-meta.toml
log_dir = "metadata/_logs"
admin_api_address = "127.0.0.1:28101"
grpc_api_address = "127.0.0.1:9101"

[raft_config]
id = 1
single = true
raft_dir = "metadata/datas"

2.1.2 启动 databend-meta

./databend-meta -c ./databend-meta.toml > meta.log 2>&1 &

2.1.3 检查 databend-meta

curl -I  http://127.0.0.1:28101/v1/health

Check the response is HTTP/1.1 200 OK.

2.2 集群模式

在本章中,我们将部署一个包含3个节点的 databend-meta 集群。

首先我们要以 单一 模式启动第一个节点,形成一个单节点的集群。 然后启动另外两个节点,并让它们加入该集群,最终形成一个包含三个节点的集群。

tip

3个节点中的一个将被选为 leader,提供数据读写 API。 其它节点是 follower ,并将请求重定向到 leader。 这样一来,可以配置 databend-query 连接到集群中的任何节点。

2.2.1 创建 databend-meta-1.toml

databend-meta-1.toml
log_dir            = "metadata/_logs1"
admin_api_address = "0.0.0.0:28101"
grpc_api_address = "0.0.0.0:9191"

[raft_config]
id = 1
raft_dir = "metadata/datas1"
raft_api_port = 28103
raft_listen_host = "127.0.0.1"
raft_advertise_host = "localhost"
  • admin_api_address 是获取集群状态的服务。

  • grpc_api_address 是用于应用程序写入或读取 Meta 数据。

  • raft_config.id 是此节点的全局唯一ID,u64格式。

  • raft_config.raft_dir 是存储 Meta 数据的本地目录,包括 Raft 日志和状态机等。

  • raft_config.raft_api_portraft_config.raft_listen_hostraft_config.raft_advertise_host 用来定义内部Raft通信的服务。 应用程序不应使用此端口。

    raft_listen_host 是内部 Raft 服务器监听的主机地址。 raft_advertise_host 是内部 Raft 客户端连接的主机地址。

  • single 告诉节点初始化一个单节点集群。 如果已经完成集群的初始化,请忽略这个配置项。

了解更多配置信息,请参阅配置

2.2.2 启动第一个 databend-meta 节点

./databend-meta -c ./databend-meta-1.toml > meta1.log 2>&1 &

2.2.3 检查第一个 databend-meta 节点

curl -I  http://127.0.0.1:28101/v1/health

检查响应是否为 HTTP/1.1 200 OK

2.2.4 为其他两个节点创建配置文件

其它节点的配置与第一个相似,但 single 应替换为 join,且 id 必须不同。

databend-meta-2.toml
log_dir            = "metadata/_logs2"
admin_api_address = "0.0.0.0:28201"
grpc_api_address = "0.0.0.0:28202"

[raft_config]
id = 2
raft_dir = "metadata/datas2"
raft_api_port = 28203
raft_listen_host = "127.0.0.1"
raft_advertise_host = "localhost"
join = ["localhost:28103"]
databend-meta-3.toml
log_dir            = "metadata/_logs3"
admin_api_address = "0.0.0.0:28301"
grpc_api_address = "0.0.0.0:28302"

[raft_config]
id = 3
raft_dir = "metadata/datas3"
raft_api_port = 28303
raft_listen_host = "127.0.0.1"
raft_advertise_host = "localhost"
join = ["localhost:28103"]

join 指定了一个现有的集群的地址列表 (<raft_advertise_host>:<raft_api_port>),用于新节点的加入。

2.2.5 启动其他节点

./databend-meta -c ./databend-meta-2.toml > meta2.log 2>&1 &
./databend-meta -c ./databend-meta-3.toml > meta3.log 2>&1 &