MinIO 经常用于存储来自日志、指标和跟踪数据的存储,无论它是 ElasticSearch、OpenTelemetry、OpenSearch、OpenObserve 还是其他十几种优秀的监控解决方案。当与存储分层一起使用时,MinIO 效率更高,这降低了存储数据的总拥有成本,此外,您还可以获得将数据写入 MinIO 的额外好处,这些数据是不可变的、版本化的,并受擦除编码保护。此外,将数据保存到 MinIO 对象存储使其可用于其他云原生机器学习和分析应用程序。
Quickwit 和 MinIO 共享许多相同的原则。Quickwit 旨在直接从对象存储进行亚秒级搜索,从而实现真正的解耦计算和存储。这意味着您可以将数据存储在廉价的商品硬件上,而 MinIO 则处理数据的复制和完整性。随着您的需求和要求的变化,您可以根据需要扩展您的集群。Quickwit 具有类似于 MinIO 的租户概念,这些租户可以轻松隔离并管理其各自的使用情况。
在今天的文章中,我们将向您展示如何设置 MinIO 和 Quickwit,重点关注
- 将 MinIO 配置为 Quickwit 的存储提供程序
- 将 MinIO 设置为 Quickwit 的元数据存储
安装 MinIO
在我们之前的博文中,我们讨论了如何配置MinIO 作为 SystemD服务。我们将在这里使用相同的原则,只是它将作为操作系统包安装,而不是二进制文件。
- 安装 MinIO .deb 包。如果您使用的是其他操作系统系列,则可以在此处找到其他包
root@aj-test-1:~# wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20231120224007.0.0_amd64.deb -O minio.deb
root@aj-test-1:~# dpkg -i minio.deb |
- 分别创建用户和组
minio-user
和minio-user
root@aj-test-1:~# groupadd -r minio-user root@aj-test-1:~# useradd -M -r -g minio-user minio-user |
- 为 MinIO 创建数据目录,并使用上一步中创建的用户和组设置权限
root@aj-test-1:~# mkdir /opt/minio
root@aj-test-1:~# chown minio-user:minio-user /opt/minio |
root@aj-test-1:~# systemctl enable minio
root@aj-test-1:~# systemctl start minio |
- 您可以通过控制台转到
http://localhost:9001
或通过 mc admin 验证 MinIO 是否正在运行
root@aj-test-1:~# wget https://dl.min.io/client/mc/release/linux-amd64/mc
root@aj-test-1:~# chmod +x mc
root@aj-test-1:~# mv mc /usr/local/bin/mc
root@aj-test-1:~# mc alias set local http://127.0.0.1:9000 minioadmin minioadmin
root@aj-test-1:~# mc admin info local ● 127.0.0.1:9000 运行时间: 5 分钟 版本: 2023-11-25T07:17:05Z 网络: 1/1 正常 磁盘: 1/1 正常 池: 1
存储池: 第 1 个,擦除集: 1,每个擦除集的磁盘数: 1集:
1 个磁盘在线,0 个磁盘离线 |
如果您看到类似这样的消息,则可以确保 MinIO 已启动。现在,我们将使用 Quickwit 创建一个 Bucket,稍后创建一些对象。
root@aj-test-1:~# mc mb local/quickwit
Bucket 创建成功 `local/quickwit`。 |
现在,我们准备安装 Quickwit 并将其配置为使用 MinIO 作为后端。
Quickwit 安装程序会自动为您的环境选择正确的二进制归档文件,然后将其下载并解压到您的工作目录中。在本例中,由于我们正在运行 Ubuntu,因此它将安装与该操作系统相关的软件包,但它支持所有流行的发行版。
curl -L https://install.quickwit.io | sh
cd ./quickwit-v*/ ./quickwit --version |
获取配置文件并修改它以添加 MinIO 信息。
curl -o quickwit.yaml
https://github.com/quickwit-oss/quickwit/blob/main/config/quickwit.yaml
打开 YAML 文件,首先添加配置 MinIO 的凭据
storage: s3: flavor: minio access_key_id: minioadmin secret_access_key: minioadmin endpoint: http://127.0.0.1:9000 |
接下来,我们将添加存储和元数据存储配置
default_index_root_uri: s3://quickwit/indexes
metastore_uri: s3://quickwit/indexes
在 YAML 文件中设置上述配置后,保存并关闭。为了使用它,将其设置为环境变量并运行服务
export QW_CONFIG=./quickwit.yaml
./quickwit run
我们可以通过在浏览器中访问UI http://localhost:7280
或执行GET请求来检查它是否正常工作。
curl
http://localhost:7280/api/v1/version
让我们创建一个配置为接收Stack Overflow帖子的索引。您需要使用YAML创建一个索引,将您的输入文档映射到您的索引字段,以及这些字段是否应该被存储和索引。
curl -o stackoverflow-index-config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/v0.6.4/config/tutorials/stackoverflow/index-config.yaml
索引下载完成后,创建它
./quickwit index create --index-config ./stackoverflow-index-config.yaml
为了填充我们刚刚创建的索引,我们将下载前 10,000 个 Stack Overflow 帖子的样本,然后将这些数据输入 Quickwit,Quickwit 会将其存储在后端的 MinIO 中。
curl -O https://quickwit-datasets-public.s3.amazonaws.com/stackoverflow.posts.transformed-10000.json
./quickwit index ingest --index stackoverflow --input-path stackoverflow.posts.transformed-10000.json --force
一旦导入命令完成,您可以开始使用search
命令查询数据。
./quickwit index search --index stackoverflow --query "search AND engine"
您可以使用更高级的功能,例如以下查询中的聚合,以查找此数据集中问题中最常用的标签。
curl -XPOST "http://localhost:7280/api/v1/stackoverflow/search" -H 'Content-Type: application/json' -d '{ "query": "type:question", "max_hits": 0, "aggs": { "foo": { "terms":{ "field":"tags", "size": 10 } } } }' |
最终想法
由于 MinIO 拥有业界领先的性能和可扩展性,因此它是 Quickwit 的正确选择。MinIO 的可扩展性和高性能相结合,使每个数据密集型工作负载(不仅仅是 Quickwit)都触手可及。MinIO 能够提供强大的性能 - 最近的一项基准测试 在仅使用 32 个现成的 NVMe SSD 节点的 GET 操作中实现了 325 GiB/s(349 GB/s),在 PUT 操作中实现了 165 GiB/s(177 GB/s)。这使得使用 MinIO 管理 Quickwit 对于日志管理、分布式跟踪和不可变数据(如对话数据、基于事件的分析等)变得非常顺畅。
通过将数据存储在 MinIO 中,Quickwit 可以用作 Grafana 数据源,以快速了解应用程序的运行情况。您可以在 Grafana 的图形界面中查看模式并设置警报,这将使您能够运行历史分析并根据某些阈值对异常情况做出反应。例如,您可能希望检查趋势或瓶颈,并尝试识别特定时间段内工作负载类型的模式。
有问题?想要开始?请在 Slack 上联系我们。