Quickwit 需要一个地方来存储关于其索引的元信息。
例如:
- 索引配置。
- 关于其拆分的元信息。例如,它们的 ID、包含的文档数量、大小、最小/最大时间戳以及拆分中存在的标签集。
- 不同来源的检查点。
- 一些额外的信息,如索引创建时间。
元存储完全由一个 URI 定义。可以通过编辑 节点配置文件(通常命名为 quickwit.yaml
)中的 metastore_uri
参数来设置它。
目前,Quickwit 提供了两种实现:
- PostgreSQL:推荐用于分布式使用。
- File-backed implementation。
PostgreSQL 元存储
对于任何分布式使用场景,我们推荐使用 PostgreSQL 元存储。
可以通过在 Quickwit 配置文件中的 metastore_uri
参数设置 PostgreSQL URI 来配置 PostgreSQL 元存储。URI 的格式如下:
postgres://[user]:[password]@[host]:[port]/[dbname]
一些参数可以省略。以下 PostgreSQL URI 是有效的示例:
postgres://localhost/mydb
postgres://user@localhost
postgres://user:secret@localhost
postgres://host1:123,host2:456/mydb
数据库需要提前创建。
在首次执行时,Quickwit 将透明地创建必要的表。
同样,如果你将 Quickwit 升级到包含 PostgreSQL 模式更改的版本,Quickwit 将在启动时透明地执行迁移。
基于文件的元存储
为了方便起见,Quickwit 还允许使用基于文件的元存储来将其元数据存储在文件中。在这种情况下,Quickwit 将为每个索引写一个文件。
然后通过传递一个 存储 URI 来配置元存储,该 URI 将作为元存储的根目录。
与给定索引关联的元数据文件将存储在
[storage_uri]/[index_id]/metastore.json
目前,Quickwit 支持两种类型的存储:
- 本地文件系统 URI(例如,
file:///opt/toto
)。直接传递文件路径(不带file://
)也是有效的,例如/var/quickwit
。相对路径将相对于当前工作目录解析。 - S3 兼容的存储 URI(例如,
s3://my-bucket/some-path
)。参阅 存储配置 文档来配置 S3 或 S3 兼容的存储提 供商。
拉取配置
默认情况下,基于文件的元存储仅在启动 Quickwit 进程(如搜索器、索引器等)时读取一次。
您还可以配置它定期拉取基于文件的元存储以保持最新视图。这对于需要了解由并行运行的索引器发布的新的拆分的搜索器实例很有用。
要配置拉取间隔(以秒为单位),请向存储 URI 添加 URI 片段,如下所示:s3://quickwit/my-indexes#polling_interval=30s
拉取间隔只能以秒为单位配置;其他单位,如分钟或小时,不受支持。
Amazon S3 对每 1000 次 GET 请求收取 $0.0004 的费用。每 30 秒拉取一次元存储每月和每个索引的成本为 $0.04。
示例
以下基于文件的元存储 URI 是有效的:
s3://my-indexes
s3://quickwit/my-indexes
s3://quickwit/my-indexes#polling_interval=30s
file:///local/indices
file:///local/indices#polling_interval=30s
/local/indices
./quickwit-metastores
基于文件的元存储不支持同时运行多个实例,因为它没有实现任何锁定机制来防止并发写入相互覆盖。确保任何时候只运行一个基于文件的元存储实例。