配置 GreptimeDB
GreptimeDB 提供了层次化的配置能力,按照下列优先顺序来生效配置(每个项目都会覆盖下面的项目):
- Greptime 命令行选项
- 配置文件选项
- 环境变量
- 默认值
你只需要设置所需的配置项。 GreptimeDB 将为未配置的任何设置分配默认值。
如何设置配置项
Greptime 命令行选项
你可以使用命令行参数指定多个配置项。 例如,以配置的 HTTP 地址启动 GreptimeDB 的独立模式:
greptime standalone start --http-addr 127.0.0.1:4000
有关 Greptime 命令行支持的所有选项,请参阅 GreptimeDB 命令行界面。
配置文件选项
你可以在 TOML 文件中指定配置项。
例如,创建一个名为 standalone.example.toml 的配置文件,如下所示:
[storage]
data_home = "./greptimedb_data"
type = "File"
然后使用命令行参数 -c [file_path] 指定配置文件。
greptime [standalone | frontend | datanode | flownode | metasrv] start -c config/standalone.example.toml
例如以 standalone 模式启动 GreptimeDB:
greptime standalone start -c standalone.example.toml
示例文件
以下是每个 GreptimeDB 组件的示例配置文件,包括所有可用配置项。 在实际场景中,你只需要配置所需的选项,不需要像示例文件中那样配置所有选项。
Helm 配置
当使用 Helm 在 Kubernetes 上部署 GreptimeDB 时,你可以直接在 Helm values.yaml 文件中做相应的设置。
请参阅 Helm 配置项文档了解所有 Helm 支持的配置项。
对于仅在本篇文档中可用的配置项,你可以通过注入 TOML 配置文件来设置配置。
环境变量
配置文件中的每个项目都可以映射到环境变量。
例如,使用环境变量设置数据节点的 data_home 配置项:
# ...
[storage]
data_home = "/data/greptimedb"
# ...
使用以下 shell 命令以以下格式设置环境变量:
export GREPTIMEDB_DATANODE__STORAGE__DATA_HOME=/data/greptimedb
环境变量规则
-
每个环境变量应具有组件前缀,例如:
GREPTIMEDB_FRONTENDGREPTIMEDB_METASRVGREPTIMEDB_DATANODEGREPTIMEDB_FLOWNODEGREPTIMEDB_STANDALONE
-
使用**双下划线
__**作为分隔符。例如,数据结构storage.data_home转换为STORAGE__DATA_HOME。
环境变量还接受以逗号 , 分隔的列表,例如:
GREPTIMEDB_METASRV__META_CLIENT__METASRV_ADDRS=127.0.0.1:3001,127.0.0.1:3002,127.0.0.1:3003
配置项
本节将介绍主要的配置项,请前往 GitHub 查看所有配置项。
运行时选项
GreptimeDB 在多个专用的 Tokio 运行时上执行后台任务。
这些选项适用于所有子命令(standalone、datanode、frontend 和 metasrv)。
[runtime]
# 执行全局读操作的运行时线程数。
# 默认为 CPU 核心数。
global_rt_size = 8
# 执行 compaction 操作的线程数。
# 默认为 max(num_cpus / 2, 1)。
compact_rt_size = 4
# compaction 操作的最大阻塞线程数。
# compaction picker 的 CPU 工作运行在 compact 运行时的阻塞线程池中,
# 该限制可防止 compaction 规划的突发负载耗尽所有可用 CPU。
# 默认为 max(num_cpus / 2, 1)。显式设置为 0 时会被调整为 1。
compact_rt_max_blocking_threads = 4
| 配置项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
runtime.global_rt_size | 整数 | CPU 核心数 | 执行全局读操作的运行时线程数。 |
runtime.compact_rt_size | 整数 | max(num_cpus / 2, 1) | 执行 compaction 操作的线程数。 |
runtime.compact_rt_max_blocking_threads | 整数 | max(num_cpus / 2, 1) | compaction 操作的最大阻塞线程数。compaction picker 的 CPU 工作运行在该阻塞线程池中。显式设置为 0 时会被调整为 1。 |
写入内存限制选项
内存限制选项控制所有协议(HTTP、gRPC 和 Arrow Flight)并发写入请求使用的总内存。
这些选项适用于 frontend 和 standalone 子命令。
# 所有并发写入请求体和消息的最大总内存
# 设置为 0 表示禁用限制(默认为无限制)
max_in_flight_write_bytes = "1GB"
# 写入字节配额耗尽时的策略
# 可选值:`wait`(默认,10 秒超时)、`wait(<duration>)`(例如 `wait(30s)`)、`fail`
write_bytes_exhausted_policy = "wait"
| 配置项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
max_in_flight_write_bytes | 字符串 | 0 | 所有并发写入请求体和消息(HTTP、gRPC、Flight)的最大总内存。设置为 0 表示禁用限制(无限制)。支持的单位:B、KB、MB、GB 等。示例:1GB 将并发写入总量限制为 1GB。 |
write_bytes_exhausted_policy | 字符串 | wait | 写入字节配额耗尽时的策略。可选值:wait(默认,等待最多 10 秒)、wait(<duration>)(自定义超时时间,例如 wait(30s))、fail(立即拒绝请求)。 |
Datanode 查询并发限制
这些选项用于限制单个 datanode 上可同时运行的读取查询数量。
查询会一直计入并发限制,直到查询完成或客户端关闭结果流。
如果达到并发限制,新查询最多等待 concurrent_query_limiter_timeout 配置的时间;如果仍然没有可用名额,查询将失败。
这些选项适用于 datanode 子命令。
# Datanode 上允许同时运行的最大读取查询数量。
# 设置为 0 表示禁用限制(默认为无限制)。
max_concurrent_queries = 0
# 当达到 max_concurrent_queries 时,查询等待可用名额的最长时间。
concurrent_query_limiter_timeout = "100ms"
| 配置项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
max_concurrent_queries | 整数 | 0 | Datanode 上允许同时运行的最大读取查询数量。设置为 0 表示禁用限制。 |
concurrent_query_limiter_timeout | 字符串 | 100ms | 当达到 max_concurrent_queries 后,查询等待可用名额的最长时间。如果超时后仍然没有可用名额,查询将失败。 |
协议选项
协议选项适用于 frontend 和 standalone 子命令,它指定了协议服务器地址和其他协议相关的选项。
其中,http.enable_api_server 可用于启动一个专门对外提供服务的公共 HTTP API Server,它只暴露 /v1 API 和 /dashboard,而主 HTTP Server 继续用于内部和运维端点。
这种分离方式适合希望将 GreptimeDB 暴露给终端用户或应用程序、同时又不暴露 health、metrics、config、debug 等管理路径的场景。
使用时,将 http.enable_api_server = true,并把 http.api_server_addr 配置为你希望对外暴露的地址,同时将 http.addr 保持为仅供运维访问的内部地址。
HTTP 协议配置适用于所有 GreptimeDB 组件:frontend、datanode、flownode 和 metasrv。
下面的示例配置包含了所有协议选项的默认值。
你可以在配置文件中更改这些值或禁用某些协议。
例如禁用 OpenTSDB 协议支持,可以将 enable 参数设置为 false。
请注意,为了保障数据库的正常工作,无法禁用 HTTP 和 gRPC 协议。
[http]
addr = "127.0.0.1:4000"
timeout = "0s"
body_limit = "64MB"
enable_cors = true
# cors_allowed_origins = ["https://example.com"] # Optional: customize allowed origins
experimental_enable_explain_analyze_stream = true
# 启用专用公共 HTTP API Server(仅提供 /v1 和 /dashboard)
enable_api_server = false
api_server_addr = "127.0.0.1:4006"
[grpc]
bind_addr = "127.0.0.1:4001"
runtime_size = 8
[grpc.tls]
mode = "disable"
cert_path = ""
key_path = ""
watch = false
[mysql]
enable = true
addr = "127.0.0.1:4002"
runtime_size = 2
keep_alive = "0s"
prepared_stmt_cache_size = 10000
[mysql.tls]
mode = "disable"
cert_path = ""
key_path = ""
watch = false
[postgres]
enable = true
addr = "127.0.0.1:4003"
runtime_size = 2
keep_alive = "0s"
[postgres.tls]
mode = "disable"
cert_path = ""
key_path = ""
watch = false
[opentsdb]
enable = true
[influxdb]
enable = true
# InfluxDB 协议自动创建表时使用的默认 merge 模式。
# 可选值:"last_non_null"、"last_row"。
default_merge_mode = "last_non_null"
[jaeger]
enable = true
[otlp]
enable = true
trace_ingest_chunk_size = 512
[prom_store]
enable = true
with_metric_engine = true
prom_validation_mode = "strict"
experimental_enable_prometheus_native_histogram = false
pending_rows_flush_interval = "0s"
max_batch_rows = 100000
max_concurrent_flushes = 256
worker_channel_capacity = 65526
max_inflight_requests = 3000