documentation / operators
管理员文档
部署、配置、安全、备份与故障排查——面向运维 TSDB 的系统管理员。
01安装部署
deb(Ubuntu 24.04 / Debian 12+,amd64)——实机验证通过
wget https://db.myagent.pub/dl/tsdb-server_0.2.0-1_amd64.deb
sudo apt install ./tsdb-server_0.2.0-1_amd64.deb # 依赖自动解析
sudo systemctl start tsdb
| 路径 | 内容 |
|---|---|
/usr/bin/tsdb-server / tsdb-cli | 服务端与 REST CLI |
/etc/tsdb/tsdb.toml | 配置(conffile:升级保留、编辑后 restart 生效) |
/usr/lib/systemd/system/tsdb.service | systemd 单元(随包自启用) |
/var/lib/tsdb | 数据目录(属主 tsdb;purge 后保留) |
rpm / 其他 Linux / Windows / macOS
RHEL/Fedora 用随仓库 packaging/rpm/tsdb.spec:./scripts/package-rpm.sh(需 rpmbuild 主机);无包管理器环境用 fallback tarball(含 install.sh)。
Windows x86_64(MSVC,实机构建 + 冒烟验证,§8.41):tsdb-0.2.0-windows-x86_64.tar.gz(tsdb-server.exe + tsdb-cli.exe;含 every-write 持久 WAL 修复)。构建路径见 scripts/build-windows.sh。
macOS x86_64(Intel,实机构建 + 冒烟验证,§8.50):tsdb-0.2.0-macos-x86_64.tar.gz(tsdb-server + tsdb-cli;HDF5 静态链接,无需 Homebrew)。构建路径见 scripts/build-macos.sh。
嵌入模式(进程内库)
引擎本身是 Rust 库:Tsdb::open(config) 进程内直调(零网络开销),data_dir: ":memory:" 纯内存库;运行中可 start_server()/stop_server() 动态升降级(引擎与数据不变)。cargo build --no-default-features 裁掉整个网络栈。同一 data_dir 跨进程独占(文件锁)。示例:examples/embedded_and_server.rs。
02systemd 服务
systemctl start|stop|restart tsdb # 常规操作
systemctl status tsdb # 状态(active / restart 计数)
systemctl enable|disable tsdb # 开机自启(装包已 enable)
journalctl -u tsdb -f # 跟随日志
journalctl -u tsdb -n 50 --no-pager # 最近 50 行
| 单元指令 | 含义 |
|---|---|
User=tsdb / Group=tsdb | 以专用系统账户运行(装包自动创建) |
ExecStart=/usr/bin/tsdb-server --config /etc/tsdb/tsdb.toml | 启动命令(改配置后 restart 即生效) |
StateDirectory=tsdb | /var/lib/tsdb 归属自动管理 |
Restart=on-failure / RestartSec=2 | 崩溃 2 秒后自动拉起 |
LimitNOFILE=65536 | 文件句柄上限 |
03配置参考
解析顺序:CLI flag > TSDB_* 环境变量 > tsdb.toml > 内置默认。
主配置(/etc/tsdb/tsdb.toml)
| 项 | 默认 | 环境变量 | 说明 |
|---|---|---|---|
addr | 127.0.0.1:8080 | TSDB_ADDR | HTTP 监听地址 |
data_dir | /var/lib/tsdb(deb) | TSDB_DATA_DIR | 数据目录 |
max_memory | 1024 | TSDB_MAX_MEMORY_MB | 内存上限(MB) |
enable_compression | true | TSDB_ENABLE_COMPRESSION | 段压缩 |
wal_sync_policy | every-write | TSDB_WAL_SYNC_POLICY | every-write(最强持久)/ every-n[:N] / none |
auth_token | (无=信任) | TSDB_AUTH_TOKEN | 静态 Bearer token;对外暴露必设(或启用用户模式) |
admin_bootstrap | (无) | — | 用户表为空时引导首个 admin(--admin-user/--admin-password CLI 等价) |
access_token_ttl_min / refresh_token_ttl_days | 15 / 7 | — | 双 token TTL(access 短 / refresh 长,刷新即轮换) |
tls_cert / tls_key | (无) | TSDB_TLS_CERT/KEY | HTTPS(须成对) |
slow_query_threshold_ms | 1000 | TSDB_SLOW_QUERY_MS | 慢查询阈值(记录并可查) |
[protocols] 段(协议监听器)
[protocols]
http_enabled = true # 关闭可组纯二进制节点
tcpmgmt_enabled = true
stream_enabled = true
fast_enabled = true
mpx_enabled = true
# tcpmgmt_port = 19090 # 缺省 = addr 端口 +1010
# stream_port = 19091 # +1011
# fast_port = 19092 # +1012
# mpx_port = 19093 # +1013
# mpx_max_conns = 128 # tcp-mpx 连接上限
环境变量等价:TSDB_PROTO_{HTTP,TCPMGMT,STREAM,FAST,MPX}_ENABLED、TSDB_{TCPMGMT,STREAM,FAST,MPX}_PORT、TSDB_MPX_MAX_CONNS(env > toml > 默认)。
04端口与协议矩阵
| 监听器 | 默认端口 | 开关 | 认证 | 用途 |
|---|---|---|---|---|
| HTTP REST | 8080 | http_enabled | Bearer(token 配置时) | /query /import /export /jdbc /arrow /ws |
| TCP 管理 | +1010 → 9090 | tcpmgmt_enabled | 内网 | 管理帧(health/stats/query JSON) |
| TCP 订阅 | +1011 → 9091 | stream_enabled | 行协议(SUB) | INSERT 流式订阅 |
| tcp-fast | +1012 → 9092 | fast_enabled | AUTH 首(常量时间比较) | 低延迟二进制查询(rowbin) |
| tcp-mpx | +1013 → 9093 | mpx_enabled | AUTH 首 + 连接上限 | 多路复用 + 预编译 |
05安全
认证三态(2026-08-25 大版本)
- 信任模式:未配置任何凭证(仅本地开发)。用户模式下删光用户/损坏 users.json 均fail-closed,不回退信任。
- 静态 token:
auth_token一枚共享 token;HTTP Bearer + 四个 TCP 端口首帧 AUTH(常量时间比较)。 - 用户模式:PG 风格登录 + 双 token——access 短 TTL(默认 15 分钟)/ refresh 长 TTL(默认 7 天,每次刷新轮换并作废旧串,防重放)。HMAC-SHA256 签名,Claims 内嵌
pwd_version(改密即失效全部旧 token);签名密钥持久化<data_dir>/auth_secret(0600)。用户口令 PBKDF2-HMAC-SHA256(10 万迭代、独立盐、恒定时间比较、防枚举时序)。
账户管理:SQL(CREATE/ALTER/DROP USER、SHOW USERS,admin 门)与 HTTP(/auth/login|refresh|logout|me|users)两套等价入口;首启引导 --admin-user/--admin-password(仅用户表为空时生效)。
加固清单(12 项 High 以上全落地)
- cluster/backup/stream/tx 路由 30 处 body 16MB 上限;/cluster/* 认证门(ClusterGate)。
- 解码边界 12 处边界检查 + String 长度上限 + zstd/gzip/lz4 解压双上限(防炸弹流)。
- SQL 标识符校验 补齐 drop/rename/backup/restore/列名;账户语句 admin 门挂全部网络入口。
- 登录防滥用:spawn_blocking + body 上限 + 并发信号量;PASSWORD 字面量进日志/metrics 前脱敏。
- 流订阅 有界通道(64)+ 慢消费者踢除;tcp-mpx 连接计数 RAII 守卫。
- 文件权限:users.json / auth_secret 创建即 0600,原子写。
- 依赖:lz4_flex/bytes/h2/rustls-webpki/crossbeam/postgres 族升级,rustls-pemfile→pki-types(12→1 漏洞)。
通用
- TLS:
tls_cert+tls_key(PEM,成对)启用 HTTPS。 - 数据目录独占锁:同一
data_dir跨进程只允许一个实例(OS 文件锁,崩溃自动释放);跨进程双开得到明确错误而非静默损坏 WAL。 - 版本升级:历史事故档案——旧版本二进制的 9092 曾无认证可执行 SQL(§8.24);升级后用
curl 9092 直连自检应被拒。 - io 沙箱:/import /export 路径限制在
<data_dir>/io内,拒绝绝对路径与穿越。 - 防火墙:默认绑定 127.0.0.1;对外仅放行必要端口。
06备份与恢复
崩溃恢复(实测)
WAL 重放保证 kill -9 零丢行:TSDB 0.22–0.24s(含脏尾)/ DDB 0.61s / PostgreSQL 0.98s(§8.27,432 万行实测)。重启即自动重放,无需人工介入。
备份
systemctl stop tsdb # 或使用 /backup 端点(在线)
tar -czf tsdb-backup.tgz /var/lib/tsdb
systemctl start tsdb
OPTIMIZE(空间整理)
tsdb-cli query "OPTIMIZE TABLE mytable"
L3 终层自合并:实测 8460 个小段 → 32 个大段(1.4s),幂等(二次执行报 already optimized、零重写,§8.18)。purge 卸载后 /var/lib/tsdb 数据保留。
07监控运维
| 端点/命令 | 内容 |
|---|---|
GET /health | 健康检查(返回 {"status":"ok"}) |
GET /stats | 查询/写入统计 |
GET /metrics / /metrics/slow-queries | 运行指标 / 慢查询列表(阈值 slow_query_threshold_ms) |
tsdb-cli stats | 同 /stats 的 CLI 形式 |
运维环境变量
| 变量 | 默认 | 作用 |
|---|---|---|
TSDB_THREAD_STACK_BYTES | 16777216 | 线程栈(16MB;防解析深递归越界,§8.32) |
TSDB_SEGMENT_READ_CONCURRENCY | 2×核 | 段读全局并发信号量(§8.32) |
TSDB_RESULT_CACHE_TTL_MS | 5000 | 查询结果缓存 TTL(0 关闭) |
TSDB_COMPACTION_THREADS | 核/4(≤8) | 后台 compaction 并行度 |
TSDB_SEGMENT_ALGO | lz4(默认) | 段压缩算法:zstd 走格式 v6 页级压缩(保留页剪枝,查询路径不受损,§8.43) |
TSDB_AGG_THREADS | 1 | 聚合页处理线程数;>1 启用并行页聚合(每线程局部聚合后合并,§8.49) |
TSDB_OPTIMIZE_CHUNK_ROWS | 2048 | OPTIMIZE 输出块大小 |
TSDB_FAST_QUERY_MAX_CONNS / TSDB_MPX_MAX_CONNS | 128 / 128 | 二进制端口连接上限 |
08故障排查
| 症状 | 处置 |
|---|---|
启动失败 Address already in use | 端口被占(如 8080 被 nginx)→ 改 /etc/tsdb/tsdb.toml 的 addr 或 [protocols] 独立端口,restart(实机验证过:8080→8283 即恢复) |
| dpkg -i 报依赖缺失 | sudo apt-get -f install(t64 库名已多候选兼容 24.04/Debian12) |
| 重启循环(systemd restart 计数上涨) | journalctl -u tsdb -n 50 看首错;多为端口占用或 data_dir 权限 |
| 写入吞吐低 | 确认走批量(单行是持久语义地板 ~230–780 rows/s;批量 9–14 万) |
| 查询偶发变慢 | 看 /metrics/slow-queries;bulk 导入后执行 OPTIMIZE;必要时调 TSDB_COMPACTION_THREADS 降后台争用 |
| tcp-fast/mpx 连接被拒 | token 未配对(AUTH 首帧必须精确匹配)或超连接上限;自检:直连端口发 SQL 应被拒 |
| 内存上涨不回落(旧版本) | 升级到当前版本(jemalloc 修复 arena 碎片:负载后 20s 回落,§8.34) |