使用对象存储 MinIO 部署云数据仓库 Databend

MinIO

MinIO 是在 Apache License v2.0 下发布的高性能对象存储。 它是与 Amazon S3 云存储服务

兼容的 API。 使用 MinIO 构建 用于机器学习、分析和应用的高性能基础设施 数据工作负载。

MinIO github

Databend

Databend 是一个开源的云数据仓库. Databend 使用矢量化查询处理中的最新技术,

允许对对象存储(S3、Azure Blob 或 MinIO)进行超快的数据分析。

Databend 主要定位于 OLAP 场景,采用云原生架构理念(可对比 snowflake ),

有非常好的扩展性、同时具备低成本、高性能的优势,兼容 MySQL 协议。

架构图:

databend design overview

  • 特点: 计算-存储分离架构, 易扩展;parquet 列式存储,高压缩;兼容 MySQL / Clickhouse 协议(完善中)

  • 优点: 基于云基础设施能力,充分利用了 s3 对象存储高吞吐,高可靠,低成本的优点,真正实现按用量付费

Databend github

Install MinIO

安装部署MinIO对象存储服务

下载二进制安装包

1
2
3
wget https://dl.min.io/server/minio/release/linux-amd64/minio

chmod +x minio

创建启动脚本server.sh

1
2
3
4
5
~/minio$ cat server.sh
export MINIO_ROOT_USER=minioadmin
export MINIO_ROOT_PASSWORD=minioadmin
export MINIO_SERVER_URL=http://x.x.x.x:port ## 指定 MinIO 服务器的代理可访问主机名,以允许控制台使用 TLS 证书使用 MinIO 服务器 API。
./minio server --address :9900 ./data > minio.log 2>&1 &
  • MINIO_ROOT_USER 登录账号
  • MINIO_ROOT_PASSWORD 账号密码
  • MINIO_SERVER_URL 文件分享的地址,默认为内网地址,当需要开放外网访问,或者有代理, 则需要设置为外网访问地址,否则在分享文件下载地址时,下载url会是内网ip地址,外网无法访问。
  • MINIO_BROWSER_REDIRECT_URL 对于 MinIO 主机 IP 地址或端口不公开的负载平衡器、代理或入口规则后面的部署,通过该环境变量指定重定向的外部主机名,若不希望通过浏览器登录,可以增加 MINIO_BROWSER: off,禁止浏览器登录; 对于不希望

比如配置如下nginx代理,则MINIO_SERVER_URL地址配置http://$host:9910

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
> cat /usr/local/nginx/conf/vhost/minio.conf
upstream minio_gateway {
    server 127.0.0.1:9900 weight=1 max_fails=2 fail_timeout=10s;
}

server {
    listen       9910;
    server_name  localhost:9910;
    location  / {
        proxy_set_header Host $http_host;
        proxy_pass http://minio_gateway;
    }
}

执行脚本启动MinIO服务

1
2
chmod +x server.sh
./server.sh

在浏览器中打开 http://127.0.0.1:9900 并输入启动脚本中设置的账号密码登录到MinIO控制台。

登录后在控制台创建一个名为databend的bucket。

Insert Databend

安装部署Databend服务,

Github Release:

1
curl -LJO https://github.com/datafuselabs/databend/releases/download/v0.8.72-nightly/databend-v0.8.72-nightly-x86_64-unknown-linux-musl.tar.gz

解压安装包

1
tar xzvf databend-v0.8.72-nightly-x86_64-unknown-linux-musl.tar.gz

解压后修改配置文件

1
2
3
> ls configs
databend-meta.toml  databend-query.toml

修改配置文件

MinIO 是与 Amazon S3 云存储服务兼容的 API。所以打开 databend-query.toml 修改配置如下,storage.type = “s3”,storage.s3配置为MinIO服务地址。

1
2
3
4
5
6
7
8
9
[storage]
# s3
type = "s3"

[storage.s3]
bucket = "databend"
endpoint_url = "http://127.0.0.1:9900"
access_key_id = "minioadmin"
secret_access_key = "minioadmin"

Deploying a Meta Node

  1. 运行以下命令以启动 Meta 节点:
1
./bin/databend-meta -c ./configs/databend-meta.toml > meta.log 2>&1 &
  1. 运行以下命令,检查 Meta 节点是否已成功启动:
1
curl -I  http://127.0.0.1:28101/v1/health

Deploying a Query Node

  1. 运行以下命令以启动 Query 节点:
1
./bin/databend-query -c ../configs/databend-query.toml > query.log 2>&1 &
  1. 运行以下命令,检查“查询”节点是否已成功启动:
1
curl -I  http://127.0.0.1:8081/v1/health

使用启动脚本部署

  1. 解压后执行启动脚本
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
> cat scripts/start.sh
echo "Stop old Databend instances"
killall -9 databend-meta
killall -9 databend-query
echo "Deploy new Databend(standalone)"
ulimit  -n 65535
nohup bin/databend-meta --config-file=configs/databend-meta.toml 2>&1 >meta.log &
sleep 3
# export STORAGE_S3_ENABLE_VIRTUAL_HOST_STYLE=true
nohup bin/databend-query --config-file=configs/databend-query.toml 2>&1 >query.log &
sleep 3
tail -f meta.log query.log &

  1. 停止服务脚本
1
2
3
4
5
> cat scripts/stop.sh
echo "Stop Databend instances"
killall -9 databend-meta
killall -9 databend-query

参考