将 Azure Blob 存储用于 InfluxDB 3 Core 和 Enterprise
作者:Heather Downing / 开发者
2025 年 3 月 20 日
导航至
简介
InfluxDB 3 Core 和 Enterprise 引入了强大的全新无盘架构,让您将时间序列数据存储在云对象存储中,同时在本地运行数据库引擎。这种方法提供了显著的优势:您既能获得本地数据库的性能,又能获得云存储的持久性、可扩展性和成本效益。
在本教程中,我将向您展示如何使用 Azure Blob 存储 作为对象存储来设置 InfluxDB 3 Core 或 Enterprise。此配置非常适合以下场景:您需要持久存储而无需管理物理磁盘,需要从多个位置访问数据,或者需要更具弹性的备份策略。
先决条件
开始之前,您需要:
-
在本地计算机上安装 InfluxDB 3 Core 或 Enterprise(但先不要运行它)
-
一个 Azure 账户,并具有创建存储资源的权限
-
一个具有必要权限(超级用户/管理员)的终端或命令提示符
设置 Azure Blob 存储
首先,我们需要设置一个 Azure 存储账户和容器来存储 InfluxDB 数据。
-
创建 Azure 存储账户:
-
创建容器:
-
在您的存储账户中,创建一个新的容器(例如,
influxdb3-data
)。 -
此容器将存储 InfluxDB 3 将数据写入的 WAL 或 Parquet 文件。
-
-
获取您的访问凭据:
- 从您的存储账户中,获取存储访问密钥,您将使用它来验证 InfluxDB 与 Azure Blob 存储的身份。
- 展开存储账户(不是容器)左侧菜单中的“安全 + 网络”。
-
选择“访问密钥”。
- 复制其中一个密钥(不是连接字符串)以用于 InfluxDB3。
使用 Azure Blob 存储启动 InfluxDB
现在您已经设置了 Azure Blob 存储,您可以配置 InfluxDB 以使用 Azure 作为对象存储。您可以将您的访问密钥存储在环境变量中以获得更好的安全性。
-
打开您的终端。
-
导航到 InfluxDB 3 的安装位置(您必须设置您的源才能运行它)。
-
将以下配置中的值替换为您的 Azure 访问密钥、存储账户名称和存储桶(容器)名称,然后运行以下命令:
注意:以下 CLI 服务示例适用于 Enterprise,并包含 InfluxDB 3 Core 不需要的以下参数:
- cluster-id
- mode
influxdb3 serve \
--object-store=azure \
--node-id=azure01 \
--cluster-id=cluster01
--azure-storage-access-key="YOUR_ACCESS_KEY" \
--azure-storage-account=influxdb3blobstorage \
--bucket=influxdb3-data
将占位符值替换为您的 Azure 存储账户名称、访问密钥和容器名称。访问密钥应设置在引号内的字符串中。
写入和查询数据
一旦您的 InfluxDB 实例启动并使用 Azure Blob 存储运行,您就可以像往常一样写入和查询数据。您可以通过多种方式与您的数据交互,包括语言客户端 SDK、API、Telegraf 或 CLI。您也可以使用第三方可视化工具来读取数据。
数据库引擎在您的本地计算机上运行,而 Azure 提供持久存储。由于这是一个写入时模式数据库,您可以在写入时声明数据库名称。请记住 Core 和 Enterprise 许可证可用的数据库、表和列的数量,当您编写命令时(例如,Core 仅提供一个节点)。
注意:打开一个单独的终端窗口来执行您的写入/查询命令,以避免在数据库引擎在原始窗口中运行时中断它。
以下是使用 CLI 写入数据的示例(使用 行协议语法):
influxdb3 write --database=testdb "
cpu,host=prod-server1,region=us-west
usage_percent=88.2,memory_gb=31.8,disk_used_percent=71.3 1739578205959259001
cpu,host=prod-server2,region=us-east
usage_percent=87.4,memory_gb=62.1,disk_used_percent=78.9 1739578205959259002
"
成功后,转到您的 Azure 容器以查看包含新 WAL 文件的文件系统。
influxdb3-data > azure01 > wal > 00000000001.wal 并使用 SQL 查询该数据:
influxdb3 query --database=testdb "SELECT * FROM cpu LIMIT 10"
您应该看到:
InfluxDB 如何使用 Azure Blob 存储
当 InfluxDB 接收到写入请求时,它会通过以下流程处理它们:
-
传入的写入会被验证,然后数据会缓存在内存中。
-
每秒(可配置),写入缓冲区的内容会被刷新到对象存储(例如您的 Azure Blob 存储容器)中的预写日志 (WAL) 文件。
- 数据移动到可查询的内存缓冲区,在那里它可以用于传入的查询请求。
- 大约每 10 分钟,可查询缓冲区的内容会被持久化到您的 Azure Blob 存储容器中的 Parquet 文件中。
这种架构意味着:
- 您的最新数据从内存中提供,以实现快速访问。
- 数据持久存储在 Azure Blob 存储中。
- 您可以在无需管理本地磁盘的开销下获得持久性。
- 使用 InfluxDB3 Enterprise,您可以获得压缩和更低的存储成本。
使用 Azure Blob 存储的多节点设置(Enterprise)
InfluxDB 3 Enterprise 的强大功能之一是能够设置高可用性集群。通过使用 Azure Blob 存储作为您的对象存储,您可以配置多个节点来读取和写入相同的存储。
注意:InfluxDB 3 Enterprise 集群在 InfluxDB 3 Enterprise 中,集群是一组共享相同对象存储的节点,它们协同工作以提供高可用性和工作负载分配。集群中的每个节点都需要唯一的 --node-id
,同时共享一个通用的 --cluster-id
。对于压缩管理,在一个节点中以压缩模式运行,以将 WAL 文件处理为优化的 Parquet 文件。摄取节点将数据写入对象存储中自己的目录,而压缩节点会整合和优化这些数据以实现高效查询。这种分离使您可以将写入操作与压缩过程独立扩展,从而提高整体系统性能。
--cluster-id
参数对于所有新的 InfluxDB 3 Enterprise 实例都是必需的,并且必须与集群中的任何--node-id
不同。- 只能将一个节点指定为压缩器。
一个基本的 Enterprise 示例
# Node 1
influxdb3 serve \
--node-id=azure01 \
--cluster-id=cluster01 \
--mode=ingest,query,compact \
--object-store=azure \
--azure-storage-account=influxdb3blobstorage \
--azure-storage-access-key="YOUR_ACCESS_KEY" \
--bucket=influxdb3-data \
# Node 2
influxdb3 serve \
--node-id=azure02 \
--cluster-id=cluster01
--mode=ingest,query \
--object-store=azure \
--azure-storage-account=influxdb3blobstorage \
--azure-storage-access-key="YOUR_ACCESS_KEY" \
--bucket=influxdb3-data
这提供了弹性:如果一个节点发生故障,另一个节点将继续运行,并完全访问 Azure 中存储的所有数据。
哪些人应考虑使用此方案?
将 Azure Blob 存储与 InfluxDB 3 结合使用,您可以获得两全其美的优势——本地数据库引擎的性能和云存储的持久性和可扩展性。 您的查询仍然很快(尤其是在查询最新数据时),而您的数据在云中保持安全。
此配置对于以下情况尤其有价值:
-
拥有现有 Azure 基础设施的组织
-
需要高持久性而无需复杂本地存储管理的应用
-
需要从不同位置访问数据的多区域部署
-
时间序列数据的经济高效的长期存储
我们希望您觉得本教程对您有所帮助!请在我们的社区论坛或 Slack 频道中分享您使用 InfluxDB 3 和 Azure Blob 存储的经验。
下载 Core 或 Enterprise 以开始使用。查看我们的 Core 入门指南 和 Enterprise,并在 Discord 的 #influxdb3_core 频道、Slack 的 #influxdb3_core 频道或我们的 社区论坛 上与我们的开发团队分享您的反馈。