升级之前
- 阅读当前版本到目标版本之间每个版本的发布说明。
- 备份 PostgreSQL 与对象存储,参见备份与恢复。
- 记下正在运行的版本。
molesignal --version会输出版本号,GET /api/v1/version返回版本、commit、构建 id、发布通道与版本类型,该请求需要 Bearer Token。 - 部署比较关键时,先在数据库的恢复副本上演练一次升级。
schema 变更如何生效
二进制内嵌了数据库迁移,每次启动时都会在提供服务之前把它们应用到 PostgreSQL。迁移失败会让进程退出。PostgreSQL 中的锁会串行化迁移,因此多个节点同时启动是安全的。已应用的版本记录在_molesignal_schema_meta 表中。
迁移只能向前:
- 比数据库更旧的二进制会拒绝启动,并报
migration <version> was previously applied but is missing in the resolved migrations。 - 携带了已应用迁移的修改版本的二进制会拒绝启动,并报
migration <version> was previously applied but has been modified。预发布构建可能修改基线 schema,因此某个构建创建的数据库不保证能被另一个构建打开。
升级步骤
- Docker Compose
- 二进制与 systemd
- Kubernetes
修改 Compose 文件中 保留命名卷,它们保存着 PostgreSQL 数据、RustFS 数据和 WAL。
image 的标签,然后拉取并重建容器:SIGTERM 或 SIGINT 后,最多等待 [node].drain_timeout_secs 让待处理的数据刷写完成,然后退出。仍留在 WAL 中的记录会在节点启动时重放。
分角色集群
分角色集群共用同一个 schema。旧版本的节点在重启之前会继续使用新的 schema,而且不同版本之间不保证兼容。请在同一个维护窗口内升级所有节点:- 先停止
router节点,再停止intake与querier节点,最后停止compactor与alert。 - 启动一个新版本的节点,等待
GET /api/v1/healthz返回200,该节点会应用迁移。 - 启动其余节点。
验证升级
- 日志中没有迁移错误,且
GET /api/v1/healthz返回200。 GET /api/v1/version返回新版本。- 对近期数据的查询能返回行,新记录也在持续到达。
/metrics中storage_reconciler_issues_total没有增长。