部署 Databend Meta 集群
预计部署时间: 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
- Linux
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
- Linux
tar xzvf databend-v0.7.32-nightly-x86_64-unknown-linux-musl.tar.gz
您可以找到两个可执行文件:
ls
# databend-meta databend-query
2. 部署 databend-meta
Databend 独立模式 不可以 在生产环境中使用。 但不必担心。 一个独立模式的 databend-meta 可随时通过 Cluster management API 扩展为一个包含3或5个节点的集群。
2.1 独立模式
2.1.1 配置 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 集群。
首先我们要以 单一 模式启动第一个节点,形成一个单节点的集群。 然后启动另外两个节点,并让它们加入该集群,最终形成一个包含三个节点的集群。
3个节点中的一个将被选为 leader,提供数据读写 API。 其它节点是  follower ,并将请求重定向到 leader。 这样一来,可以配置 databend-query 连接到集群中的任何节点。
2.2.1 创建 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_port,- raft_config.raft_listen_host和- raft_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 必须不同。
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"]
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 &