用场景的丰富,企业面临着前所未有的数据存储挑战。大规模数据存储变得日常化,伴随着超大容量和快速变化的I/O需求,传统的存储解决方案已经难以满足企业对弹性、运维效率及总体拥有成本(TCO)的更高要求。这些挑战促使基于分布式架构的软件定义存储(SDS)技术应运而生,并逐渐走向成熟。

即便有了基于分布式架构的软件定义存储服务,但是在构建查询系统时,传统的数据仓库往往采用 Share-Nothing 架构,这种存算一体的设计在某些场景下虽然高效,但它的弹性相对较弱。由于采用固定集(Fixed-Set)式的资源调度策略,资源控制粒度较粗,这不仅限制了资源的灵活性,还可能导致更高的成本消耗。然而,随着数据分析对企业决策作用的增强,新型数据仓库如 Databend,基于共享存储架构(Share-Storage),在底层可以使用对象存储,真正做到存储与计算分离,资源控制粒度更细。计算节点可以根据需求弹性扩展,而不受存储容量的限制。

CubeFS:新一代云原生存储系统

CubeFS 是一种新一代云原生存储系统,支持 S3、HDFS 和 POSIX 等访问协议。它广泛适用于各种场景,如大数据、AI/LLMs、容器平台、数据库和中间件的存储与计算分离、数据共享和保护等。

CubeFS,作为国内首个云原生开源分布式存储产品,2019 年由京东开源并捐赠给云原生计算基金会(CNCF)。自2020 年 10 月 OPPO 开始主导社区运营和版本迭代以来,CubeFS 已经累计发布了 7 个版本。在 OPPO 的推进下,CubeFS 在 2022 年 6 月成功进入 CNCF 孵化阶段,这标志着它在开源分布式存储领域的成熟度和影响力得到进一步认可。

CubeFS 的设计响应了大规模数据处理的需求,具备优异的扩展性和性能,使其在 OPPO 、京东 、网易 、360 等多个大型企业得到了广泛应用。它的优势在于能够提供更灵活的存储解决方案,降低运维难度,并且能显著降低企业的存储成本。

Databend:面向海量数据的云原生 数仓

Databend 是一款开源、高性能、低成本的新型数据仓库,特别设计用于基于对象存储的实时分析。Databend 能够轻松实现从零到数百倍的算力扩展,几乎可以瞬间响应企业对计算资源的需求变化。

Databend 还为企业数据存储、管理和分析提供了一站式的平台。凭借 Databend 强大的生态体系,可以轻松从数据之中获取洞见,数据流转和使用也变得更加得心应手。

Databend 还提供包括混合云、混合数据库在内的多种异构计算能力,帮助企业管理复杂的算力与数据需求。不仅使企业能够更准确地洞察业务运行状况,还能够基于数据分析结果制定更有效的业务策略。

Databend x CubeFS:面向未来的企业级云原生数据存储与分析

结合 Databend 和 CubeFS ,为企业提供了面向未来的云原生数据存储与分析方案。结合 Databend 强劲的分析能力与 CubeFS 的存储优势,为企业提供一个既弹性又高效的数据处理平台。

将 CubeFS 作为 Databend 的存储后端,企业可以享受到无缝的数据存储与分析体验。不仅可以处理海量数据,还能够提供快速的数据洞察和分析能力,帮助企业在数据驱动的竞争中保持领先。

主要优势:

  • 弹性扩缩容:Databend 能够动态调整计算资源,而 CubeFS 则能够灵活扩展存储容量。
  • 低成本高效能:两者结合可以降低总体拥有成本(TCO)并提高数据处理效率。
  • 易于运维:简化了数据存储和分析的管理操作,提高了运维效率。
  • 云原生 兼容性:CubeFS 作为云原生存储解决方案,与 Databend 的设计理念相契合,易于在现代云环境中部署和管理。

Workshop:使用 CubeFS 作为 Databend 存储后端

本示例将会利用 CubeFS 提供的集群脚本和 Databend 的 Docker 镜像启动示例环境,并进行简单的读写操作进行验证,适用于对 CubeFS 和 Databend 感兴趣的开发者进行环境调试和基本开发验证。实际生产和性能验证请参考产品官方文档进行生产级部署。

环境准备

  • 请确保您的操作系统上已经安装有 Docker 和 docker-compose
  • 在部署前请检查防火墙,避免权限和访问问题导致容器启动失败。
  • 请参考 文档 - BendSQL,安装 BendSQL 命令行工具。
  • 推荐使用两台服务器,一台用于部署存储服务,一台用于部署独立模式的 Databend 服务,以确保资源效率最大化。在资源有限的情况下,也可在单台服务器上进行部署。

CubeFS 部署

请在用于 CubeFS 的服务器上执行下面步骤以完成部署。

创建对应的数据目录:

mkdir -p ${HOME}/cubefs/data

拉取 cubefs 源码并使用脚本运行 CubeFS 服务,在试用集群的模式下,CubeFS 自带对象存储节点与网关,无需另外配置。

cd cubefs
git clone https://github.com/cubefs/cubefs.git
cubefs/docker/run_docker.sh -r -d ${HOME}/cubefs/data

检查挂载状态:

mount | grep cubefs

退出容器:

exit

创建对应的 Bucket (对应 CubeFS 的卷):

curl -v "http://192.168.0.11:17010/admin/createVol?name=databend&capacity=100&owner=cfs"

查询上一步的 owner 用户以获取对应的 Access Key 和 Secret Key:

curl -v "http://192.168.0.11:17010/user/info?user=cfs" | python3 -m json.tool
注意: 其中 192.168.0.11:17010 为 CubeFS 部署过程中显示的 Master leader : 192.168.0.11:17010 ,如有不同,以部署过程中显示的 IP 为准。

在返回的结构体中可以获取到对应的信息:

{
    "code": 0,
    "msg": "success",
    "data": {
        "user_id": "cfs",
        "access_key": "Ar5UC6HCtDcYbpFt",
        "secret_key": "ZV6pxBRYUEivFscFsD3lUQgKRs9GHEP3",
        "policy": {
            "own_vols": [
                "databend"
            ],
            "authorized_vols": {}
        },
        "user_type": 3,
        "create_time": "2024-03-19 04:12:02",
        "description": "",
        "EMPTY": false
    }
}

Databend 部署

请在用于 Databend 的服务器上执行下面步骤以完成部署。

为简单起见,此处 Databend 也使用 Docker 进行部署和管理。

docker run -d \
    --name databend \
    --net=host \
    -v meta_storage_dir:/var/lib/databend/meta \
    -v log_dir:/var/log/databend \
    -e QUERY_DEFAULT_USER=databend \
    -e QUERY_DEFAULT_PASSWORD=databend \
    -e QUERY_STORAGE_TYPE=s3 \
    -e AWS_S3_ENDPOINT=http://${endpoint} \
    -e AWS_S3_BUCKET=databend \
    -e AWS_ACCESS_KEY_ID=<your-ak> \
    -e AWS_SECRET_ACCESS_KEY=<your-sk> \
    datafuselabs/databend

重要参数说明

这里的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 需要设置为之前查询到的 access_keysecret_key

AWS_S3_ENDPOINT 需要设置为 ObjectNode 服务器 IP 和监听端口,由于这个示例 CubeFS 集群会映射到 80 端口,为了避免鉴权失败,所以需要省略端口号,示例为 20.2.219.104

访问

如果你的 Databend 示例是在远端服务器上启动,请执行:

bendsql -h <your-query-ip> -P8000 -u databend -p databend

如果你的 Databend 示例是在本地服务器上启动,请执行:

bendsql -u databend -p databend

联通性测试

为了确认 Databend 服务的可用性以及存储后端是否就绪,可以利用 bendsql 执行基本的建表查询进行确认。也欢迎查阅 Databend 官方文档或者往期文章,选取感兴趣的示例进行。

databend@localhost:8000/test> CREATE TABLE t_default_value(a TINYINT UNSIGNED, b VARCHAR DEFAULT 'b');

CREATE TABLE t_default_value(a TINYINT UNSIGNED, b VARCHAR DEFAULT 'b')

0 row written in 0.111 sec. Processed 0 row, 0 B (0 row/s, 0 B/s)

databend@localhost:8000/test> INSERT INTO T_default_value(a) VALUES(1);

INSERT INTO
  T_default_value(a)
VALUES
(1)

1 row written in 0.121 sec. Processed 1 row, 66 B (8.25 row/s, 544 B/s)

databend@localhost:8000/test> SELECT * FROM t_default_value;

SELECT
  *
FROM
  t_default_value

┌────────────────────────────────────┐
│        a        │         b        │
│ Nullable(UInt8) │ Nullable(String) │
├─────────────────┼──────────────────┤
│               1 │ b                │
└────────────────────────────────────┘
1 row read in 0.037 sec. Processed 1 row, 20 B (27.39 row/s, 547 B/s)

问题排查

  • 在示例中使用 CubeFS 提供的对象存储 API (S3 兼容)进行数据访问,请确保部署 ObjectNode 启用对象存储网关。生产环境下也推荐使用 对象存储 API 。
  • 对于 Databend 启动失败的情形,可以执行下述命令查看日志:


-   如与存储后端在同一台机器上部署 Databend ,会遇到端口号被占用问题,可以修改上面 docker 命令中或者 `cubefs/docker/docker-compose.yml` 文件中的映射,将其暴露到其他端口。

## **结论**

databend
20 声望10 粉丝

Databend 旨在成为一个 开源、弹性、可靠 的无服务器数仓,查询快如闪电,与 弹性、简单、低成本 的云服务有机结合。数据云的构建,从未如此简单!