对象存储 WAL
注意
对象存储 WAL 目前是实验性功能,只支持单机模式。它的配置和行为在后续版本中可能会调整。
对象存储 WAL 把 WAL 存放在 S3 等对象存储中,通常就是存放数据文件的那个对象存储。使用它不需要额外部署和运维任何组件。在默认的 durable 模式下,写入持久化到对象存储之后才会确认,因此已确认写入的持久性与对象存储本身一致。enqueued 模式会更早确认写入,崩溃时可能丢失其中一部分,参见持久性模式。
该 WAL 提供者的名称是 experimental_object_store,只支持单机模式。集群模式下 Metasrv 不接受这个提供者;连接了 Metasrv 的 Datanode 会拒绝启动,并报错 Object store WAL is only supported in standalone mode。
使用前提
启用对象存储 WAL 之前,请确认以下几点:
- 新实例:请在创建单机实例时启用。表会沿用创建时的 WAL 提供者和
prefix,因此已有实例切换到这个提供者后,原 有的表将无法打开,即使事先 flush 过也一样。参见限制。 - 受支持的对象存储:存放 WAL 的对象存储需要支持条件写入(if-not-exists)和强一致的列举(LIST)。S3、Google Cloud Storage、Azure Blob Storage 和 MinIO 都满足要求;缺少其中任意一项的 S3 兼容存储不受支持。本地文件系统存储(
type = "File")无法提供本文所述的保证。默认情况下 WAL 使用[storage]中配置的存储,因此除非设置了storage_provider,该存储必须是上述对象存储之一。 - 独立的存放位置:每个单机实例都需要独立的 WAL 存放位置。不要让两个 GreptimeDB 实例使用同一个存储提供商和
prefix。
配置
在单机模式配置文件的 [wal] 部分进行配置。下面的示例启用了对象存储 WAL,其余选项均为默认值:
[wal]
provider = "experimental_object_store"
storage_provider = ""
prefix = "wal"
flush_interval = "100ms"
max_batch_bytes = "8MB"
ack_mode = "durable"
max_unpersisted_bytes = "64MB"
max_unpersisted_age = "8s"
on_corrupted_segment = "skip"
accept_missing_history = false
对于满足使用前提的新实例,只需设置 provider。
选项
| 配置项 | 描述 | 默认值 |
|---|---|---|
provider | WAL 的提供者。设为 experimental_object_store 即使用对象存储 WAL。 | "raft_engine" |
storage_provider | 存放 WAL 的存储提供商。留空表示使用 [storage] 中配置的默认对象存储;否则填写某个已配置存储提供商的 name,参见存储引擎提供商。 | "" |
prefix | WAL 在存储提供商中的存放路径。必须是非空的相对路径,不能包含空路径段或 ..。 | "wal" |
flush_interval | 把缓冲的写入持久化到对象存储的时间间隔,最小为 10ms。参见 |