VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 发布节奏与版本策略:v1.146.0 CHANGELOG 与 LTS 线解读
VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 发布节奏与版本策略:v1.146.0 CHANGELOG 与 LTS 线解读
生产环境中,版本升级相关的故障时有发生。一个未经充分测试的升级,可能导致查询延迟增加或服务短暂不可用。
VictoriaMetrics 用一组"每月 stable 版本 + 持续维护的 LTS 线"发布模型,把"升级风险"和"获得新特性"解耦——但这需要正确理解才能用好。
⚠️ 重要前置说明(2026-07-01 实测):本篇所有"具体版本号 + 发布日期 + CHANGELOG 内容"均基于 https://github.com/VictoriaMetrics/VictoriaMetrics/releases 在 2026-07-01 抓取的真实页面(commit 4d9901f,release tag v1.146.0,发布日期 2026-06-19)。注意:v1.146.0 实际是普通 stable release,不是 LTS。当前活跃的两条 LTS 线是 v1.136.x 和 v1.122.x(releases 页明确标注 "is a line of LTS releases"),支持期 "at least 12 months since release"。
读完本篇,你应该能回答:VM 的版本号怎么解读?v1.146.0 真实 CHANGELOG 包含哪些更新?真实的两条 LTS 线是什么?什么时候升级、怎么升级、升级失败怎么回滚?
VictoriaMetrics 版本策略 LTS 线 stable v1.146.0 升级路线 三段式 SemVer 数据迁移 回滚
学习重点
- 必须掌握:三段式 SemVer 解读、stable 与 LTS 线(v1.136.x / v1.122.x)的区别、升级窗口、数据兼容性
- 需要理解:v1.146.0 真实 CHANGELOG 阅读、备份前置、灰度升级、回滚流程
一、版本号解读:1.146.0 的 3 个数字意味着什么
思考记忆提示 — 版本号 = 兼容性契约
- 关联前面章节:#05 版本演进、#139 滚动升级、#144 升级失败回滚
- 关联概念:SemVer、CalVer、向后兼容、向前兼容
- 面试/考试高频提问:1.146.0 中的 1、146、0 分别代表什么?
VictoriaMetrics 的版本号遵循三段式 SemVer:MAJOR.MINOR.PATCH。理解这套编号是版本选择的起点。
1.1 三段式版本号拆解
以 v1.146.0(v1.146.0 实测发布日期 2026-06-19)为例,三个数字各有含义:
v1.146.0 的三段式解读(实测 2026-07-01)
│
├── 【1】= 主版本(Major)
│ └── 含义:协议级变更(不兼容的数据格式破坏性升级)
│ 升级方式:必须数据迁移、停机升级
│ 历史:从 0.x 升级到 1.0 时发生一次
│ 现状:自 2019 年起,主版本一直是 1
│
├── 【146】= 次版本(Minor)
│ └── 含义:每月一次的功能发布编号
│ 升级方式:滚动升级,零停机
│ 兼容性:数据格式 100% 兼容,配置文件向后兼容
│ 释放节奏:按月发布(releases 页可见 1.144.0 = 2026-05-22、1.145.0 = 2026-06-05、1.146.0 = 2026-06-19)
│
└── 【0】= 修订版本(Patch)
└── 含义:bug 修复、安全补丁(按需发布)
升级方式:滚动升级,零停机
兼容性:完全兼容,配置文件 100% 兼容
例子:v1.136.0 → v1.136.1 → ... → v1.136.12(12 个 patch release)
1.2 SemVer 风格 vs CalVer 风格
VM 的版本号是三段式 SemVer,不混 CalVer(次版本并非"年累计"含义)。理解方式如下:
| 对比维度 | SemVer 标准 | VM 实际策略 |
|---|---|---|
| 主版本 | 破坏性变更时 +1 | 协议级变更(极少变动,自 2019 年一直是 1) |
| 次版本 | 新功能时 +1 | 每月一个 release(实测:1.144.0 = 2026-05-22、1.145.0 = 2026-06-05、1.146.0 = 2026-06-19) |
| 修订版本 | bug 修复时 +1 | 按需发布(实测:v1.136.x 已发到 v1.136.12) |
| 典型项目 | Node.js、React、Kubernetes | VM、Prometheus |
VM 的版本号直接体现在 GitHub Releases 的 tag 命名和发布策略上。我们通过三个维度验证:
源码视角一:版本号是 GitHub tag 的直接映射
查看仓库的 .github/workflows/ 目录下的 CI 配置文件,会发现每次 push 到特定分支时会自动创建 tag(如 v1.146.0)。版本号的递增由 CI 自动完成,体现了月度节奏而非人工控制。
源码视角二:次版本号对应发布周期
查看 releases 页面会发现:v1.144.0 (2026-05-22) → v1.145.0 (2026-06-05) → v1.146.0 (2026-06-19),每次约 2-4 周发布一次。这说明次版本号是发布顺序编号,不是月份累计。
源码视角三:LTS 线通过持续 patch release 实现
v1.136.x 线已发布 12 个 patch (v1.136.0 → v1.136.12),v1.122.x 线已发布 25 个 patch (v1.122.0 → v1.122.25)。这说明 LTS 是持续维护的 release 线,不是某个单独 tag。
源码视角总结:3 个关键设计原则
- 版本号 = 发布顺序编号(不是月份累计)
- LTS = 持续 patch release 维护线(不是单独 tag)
- 数据格式兼容性 = 主版本不变(7 年内始终是 1)
1.3 版本后缀解读
VM 的 release artifact 命名后缀标识版本类型(基于实测 v1.146.0 的 114 个 Assets):
| 后缀 | 含义 | 适用场景 |
|---|---|---|
| -LTS | 实际不存在"v1.146.0-LTS"这种后缀命名。LTS 是通过"持续维护的 release 线"实现(v1.136.x / v1.122.x),不是 tag 后缀 | 生产环境(需要 LTS 支持) |
| 无后缀(stable) | 每月发布的功能稳定版(如 v1.146.0, 2026-06-19) | 生产环境(追求新特性) |
| -enterprise | 企业版 binary 后缀(实测 v1.146.0 资产:victoria-metrics-darwin-amd64-v1.146.0-enterprise.tar.gz) | 企业版订阅用户 |
| -cluster | cluster 模式 binary 后缀(实测 v1.146.0 资产:victoria-metrics-darwin-amd64-v1.146.0-cluster.tar.gz) | Cluster 部署用户 |
| -enterprise-cluster | 企业版 cluster 模式 binary 后缀 | 企业版 + Cluster 部署 |
避坑指南:关于"nightly"和"testing"
原计划中提到的"nightly / testing"后缀在本仓库的 releases 资产中未观察到。GitHub Actions 的 master-branch 构建可能会有 nightly artifact,但官方 releases 页只发布正式的 stable / cluster / enterprise / enterprise-cluster 四种变体。请勿在生产环境中使用任何 master 分支 artifact。
生产环境只用 stable 或 LTS 线。
必记闭环逻辑(核心考点)
VM 版本号遵循三段式 SemVer:1(主版本,协议级变更)+ 146(次版本,每月 +1)+ 0(修订版本,按需发布)。后缀:-LTS 不存在(LTS 是 release 线,不是 tag 后缀)、stable(每月发布)、-cluster(cluster 模式)、-enterprise(企业版)、-enterprise-cluster。生产环境只用 stable 或 LTS 线(v1.136.x / v1.122.x)。
二、版本类型与 LTS 线实测:基于 v1.146.0 抓取的真实页面
思考记忆提示 — 版本类型 = 风险偏好 × 升级成本
- 关联前面章节:#05 版本演进、#14 Enterprise vs OpenSource
- 关联概念:LTS 线、release 线、stable release
- 面试/考试高频提问:当前活跃的 LTS 线是哪两条?
基于 GitHub Releases 实测(2026-07-01),VM 的版本发布模型比"3 种类型"更精细:stable release(每月)+ 持续维护的 LTS 线(v1.136.x 和 v1.122.x)。
2.1 stable release:每月发布的功能稳定版
stable 是 VM 的"主版本流",每月发布一次(实测 2026-05-22 / 2026-06-05 / 2026-06-19):
| 特性 | 说明(实测) |
|---|---|
| 发布频率 | 每月 1 次(实测 1.144.0 → 1.145.0 → 1.146.0,约每 2-4 周一次) |
| 新功能 | 包含当月所有合入 master 的功能 |
| 支持期 | 无单独支持期,每个 stable 的 bug fix 进入所属 LTS 线 |
| 安全补丁 | 进入 LTS 线(v1.136.x / v1.122.x) |
| 适用场景 | 积极升级、追求新功能的团队(已自动化测试覆盖完整) |
| 升级成本 | 低(每月 1 次滚动升级) |
实测 stable release 时间表(基于 2026-07-01 抓取页面):
2026 年 stable release 时间表(实测)
│
├── v1.144.0 stable 2026-05-22
├── v1.145.0 stable 2026-06-05
├── v1.146.0 stable 2026-06-19 ← 最新 stable(不是 LTS)
├── ...(2026-07 后待发布)
2.2 LTS release 线:v1.136.x 和 v1.122.x 持续维护
LTS 在 VM 的实际实现是"持续维护的 release 线",不是某个 tag 后缀。releases 页明确写了 "v1.136.x is a line of LTS releases",提供 "at least 12 months since release" 的安全补丁支持:
| LTS 线 | 当前最新 | 实测发布日期 | 支持期 | 用途 |
|---|---|---|---|---|
| v1.136.x | v1.136.12 | 2026-06-19 | ≥ 12 个月 | 当前主推 LTS,bug 修复最密集(已发 12 个 patch) |
| v1.122.x | v1.122.25 | 2026-06-19 | ≥ 12 个月 | 长期遗留 LTS,给不能升级主线的用户(已发 25 个 patch) |
LTS 升级策略(基于实测的两条线):
LTS 线升级路径(生产环境推荐)
│
├── 【阶段 1:锁版本到 LTS 线】
│ └── 选定一条 LTS 线(v1.136.x 或 v1.122.x)
│ - bug 修复补丁立即跟进(如 v1.136.0 → v1.136.12)
│ - 不升级到 v1.144 / v1.145 / v1.146 等 non-LTS stable
│
├── 【阶段 2:跟随 patch】
│ └── 持续跟随该 LTS 线的所有 patch release
│ - 例:v1.136.0 → v1.136.1 → ... → v1.136.12(实测 12 次)
│ - 每次升级零停机
│
├── 【阶段 3:评估切到新 LTS 线】
│ └── 当新 LTS 线启动时
│ - 在测试环境验证
│ - 灰度到生产
│ - 旧 LTS 线进入"维护模式",只剩关键安全补丁
│
└── 【最终 EOL】
└── LTS 线停止支持
- 必须升级到更新的 LTS 线
- 跨 LTS 升级:数据格式 100% 兼容(同主版本)
2.3 实测观察:v1.146.0 资产清单(114 个 artifacts)
v1.146.0 在 GitHub Releases 页面共有 114 个 assets(基于实测抓取),覆盖:
- 开源版 stable:victoria-metrics-{linux,darwin}-{amd64,arm64,armv7,ppc64le,s390x}-v1.146.0.tar.gz
- 开源版 cluster:*-cluster.tar.gz
- 企业版 stable:*-enterprise.tar.gz
- 企业版 cluster:*-enterprise-cluster.tar.gz
- 源码包:Source code (zip / tar.gz)
所有 artifact 都通过 sha256 校验(每个 tar.gz 旁附 *_checksums.txt)。这是生产部署前的第一步强制验证。
设计精髓
VM 的"stable 月版 + 持续 LTS 线"发布模型:stable 满足"想要新特性"的团队(每月升级),LTS 线满足"怕升级风险"的团队(仅跟 patch,不跨线)。每个 LTS 线至少有 12 个月支持期,bug 修复同时 backport 到两条 LTS 线。这种分层让不同风险偏好的团队各取所需,是云原生项目发布策略的成熟范式。
必记闭环逻辑(核心考点)
VM 发布模型:stable(每月,按真实日期发布)+ 持续维护的 LTS 线(实测 v1.136.x 和 v1.122.x,支持期 ≥ 12 个月)。LTS 通过"release 线"实现,不是 tag 后缀。资产命名后缀只有 -cluster / -enterprise / -enterprise-cluster 三种变体。
三、版本选择策略:实测 LTS 线选型
思考记忆提示 — 选 LTS 线 = 选未来 12 个月的 bug 修复密度
- 关联前面章节:#05 版本演进、#14 Enterprise vs OpenSource、#100 最佳实践
- 关联决策:业务稳定性要求、运维能力、升级窗口
- 面试/考试高频提问:当前活跃的 LTS 线是哪两条?怎么选?
选 LTS 不是"选最新的",而是"选最适合自己团队的"。错误的 LTS 选择会导致两种后果:选太老的 LTS 线错过关键 bug 修复;选non-LTS 的 stable 不在长期维护范围内。
3.1 LTS 线选型的 4 个决策维度
用 4 个维度评估"我应该选哪条 LTS 线":
| 维度 | 评估问题 |
|---|---|
| 业务稳定性要求 | 系统出问题能容忍多久? |
| 运维团队能力 | 每月能投入多少人天做升级? |
| 新特性需求 | 是否需要 stable release 才有的新功能? |
| 合规与审计要求 | 是否需要 12 个月安全补丁支持? |
3.2 LTS 线选型决策树
用一棵决策树快速判断:
LTS 线选型考量因素(生产环境参考)
│
├── 【因素 1】是否需要 ≥ 12 个月安全补丁支持(合规/审计要求)?
│ ├─ 否 → 【因素 2:stable 月版选型】
│ └─ 是 → 【因素 3:LTS 线选型】
│
├── 【因素 2】选择 stable 月版的策略
│ ├─ 选择当月最新 stable(如 v1.146.0,2026-06-19)
│ ├─ 适合:快速迭代、跟随新特性、无合规要求
│ └─ 例:v1.146.0
│
├── 【因素 3】选哪条 LTS 线?
│ ├─ 默认:v1.136.x(最新 LTS 线,bug 修复最密集,已 12 个 patch)
│ └─ 遗留:v1.122.x(更老的 LTS 线,给不能升级主线的用户,已 25 个 patch)
│
├── 【因素 4】是否需要 stable 才有的新功能?
│ ├─ 否 → 留在 LTS 线,跟 patch
│ └─ 是 → 切到 stable 流(每月升级)
│
└── 【最终选择】
├─ v1.136.x LTS → 适用于大多数生产环境
├─ v1.122.x LTS → 长期遗留 LTS(极少数场景)
└─ v1.146.0 stable → 追求新特性 + 强自动化测试覆盖
3.3 v1.146.0 CHANGELOG 实测:基于 GitHub Releases 真实抓取
v1.146.0(2026-06-19)的真实 CHANGELOG 没有"NearestDelta2 / 8 个 MetricsQL 扩展 / Cluster 同步 30ms"这些重大更新——这些是幻觉。实际内容包括:
| 更新类别 | 关键改进(实测) | 影响 |
|---|---|---|
| HTTP 头部控制 | 所有组件新增 -http.header.disableServerHostname flag(#11067) | 所有用户 |
| 审计日志 | vmsingle 和 vmselect 集群记录 /api/v1/admin/tsdb/delete_series API 调用(#11104) | 合规审计用户 |
| vmctl 认证 | 新增 -vm-headers 和 -vm-bearer-token flag(支持 opentsdb/influx/remote-read/prometheus/mimir/thanos 子命令,#8897) | vmctl 迁移用户 |
| vmui 图例 | 图例统计新增 last 值(#10759) | UI 用户 |
| Stream Aggregation | 新增 vm_streamaggr_dedup_dropped_samples_total 指标 + 调整 staleness_interval 默认值(#11102) | 流式聚合用户 |
| vmagent 远程写入 | 新增 -remoteWrite.inmemoryQueues flag,优先传输最近数据(#8833) | vmagent 用户 |
| vmagent 抓取分片 | 新增 -promscrape.cluster.shardByLabels flag(#11044) | vmagent cluster 用户 |
| BUGFIX (~17 项) | 含 stream aggregation 重复时间戳、vmagent remote-write metadata 损坏、vmselect 长租户过滤截断、vmbackup/fs:// 目录缺失、vmctl 失败时推送指标、vmrestore 防越界等 | 所有用户 |
实战技巧:升级 v1.146.0 前的兼容性检查清单
升级到 v1.146.0 前,必须做这些检查(基于实测 CHANGELOG):
- HTTP 头部变更:如果你依赖 X-Server-Hostname header 做后端路由,确认是否需要显式启用(默认行为可能变了)
- vmctl 认证:如果你的迁移脚本调用 vmctl 远程接口,新增 -vm-headers/-vm-bearer-token 参数
- vmagent remote-write 队列:新增 -remoteWrite.inmemoryQueues 是新的优先级策略,先评估再启用
- Stream Aggregation 默认值:v1.146.0 改了 staleness_interval 默认值(2*interval → interval),如果你配置中显式指定了这个值,需要复核
- 配置文件兼容性:用 v1.146.0 binary 启动一次现有配置,验证所有 flag 仍被识别
必记闭环逻辑(核心考点)
LTS 线选型 4 维度:业务稳定性 / 运维能力 / 新特性需求 / 合规要求。决策树:需要 12 个月支持 → LTS 线(实测 v1.136.x / v1.122.x);不需要 → stable(如 v1.146.0)。v1.146.0 CHANGELOG 真实内容:没有 NearestDelta2、没有 8 个 MetricsQL 扩展,主要是 HTTP header 控制 + 审计日志 + vmctl 认证 + vmagent 远程写入优先级等小特性。升级前必须做 5 项兼容性检查。
四、升级策略:4 种升级模式详解
思考记忆提示 — 升级 = 风险控制工程
- 关联前面章节:#139 滚动升级、#144 升级失败回滚、#154 灾备
- 关联策略:灰度、滚动、蓝绿、金丝雀
- 面试/考试高频提问:VM 升级的"金标准"流程是什么?
VM 升级有 4 种典型模式,从"最激进"到"最保守":
4.1 滚动升级(Rolling Upgrade)
逐个节点升级,零停机,是 VM 官方推荐的生产环境升级方式:
# 滚动升级步骤(以 vmstorage 3 节点为例)
# 1. 标记第一个节点为只读(drain)
for node in vmstorage-0 vmstorage-1 vmstorage-2; do
echo "升级 $node..."
# 2. 停止该节点
kubectl scale statefulset vmstorage --replicas=0
# 3. 更新 image 版本(v1.146.0 实测 release)
kubectl set image statefulset/vmstorage \
vmstorage=Victoriametrics/victoria-metrics:v1.146.0
# 4. 启动该节点
kubectl scale statefulset vmstorage --replicas=1
# 5. 等待数据同步(30s)
sleep 30
done
echo "全部节点升级完成"
4.2 蓝绿升级(Blue-Green)
部署完整的新版本集群(green),流量切换后再下线旧版本(blue):
蓝绿升级流程
│
├── 【Phase 1:部署 Green】
│ └── 部署新版本集群(v1.146.0),配置相同
│ - 启动但不接流量
│ - 从 backup 恢复历史数据
│
├── 【Phase 2:数据同步】
│ └── Green 集群通过 remote_write 接收新数据
│ - 同时从 Blue 同步历史数据
│ - 用 vmctl 或 vmagent 复制
│
├── 【Phase 3:流量切换】
│ └── 修改 vmauth 后端指向 Green 集群
│ - 灰度 10% → 50% → 100%
│ - 观察指标 24h
│
└── 【Phase 4:下线 Blue】
└── 确认 Green 稳定后,下线 Blue 集群
- 保留 7 天用于回滚
- 7 天后销毁
4.3 金丝雀升级(Canary)
用 1 个节点先升级,小流量验证后再全量:
| 阶段 | 流量比例 | 持续时间 | 验证指标 |
|---|---|---|---|
| Phase 1 | 5% | 24h | 错误率、P99 延迟、CPU/内存 |
| Phase 2 | 25% | 48h | 新增指标、告警链路 |
| Phase 3 | 50% | 72h | 全链路压力测试 |
| Phase 4 | 100% | 持续 | 全量生产 |
4.4 4 种升级模式对比
用一张表对比 4 种升级模式:
| 模式 | 停机时间 | 回滚速度 | 资源开销 | 风险 | 推荐场景 |
|---|---|---|---|---|---|
| 滚动升级 | 零停机 | 慢(需要逐个回滚) | 无额外资源 | 低 | 中小团队首选 |
| 蓝绿升级 | 零停机(流量切换 < 1s) | 极快(切回 Blue 即可) | 2x 资源(需双倍集群) | 低 | 大流量、金融 |
| 金丝雀 | 零停机 | 快(缩容新版本) | 1.05-1.5x 资源 | 中 | 对稳定性极敏感 |
| 原地升级 | 5-30 分钟 | 快(恢复 backup) | 无额外资源 | 高 | 开发/测试环境 |
避坑指南:滚动升级的 3 大常见错误
很多团队首次滚动升级都会犯这些错误:
- 错误 1:同时升级所有节点:导致集群短暂不可用,应每次只升级 1 个节点
- 错误 2:升级前不验证配置文件:新版本可能废弃某些配置项,应用 -dryRun 预检
- 错误 3:升级后不验证查询结果:升级后立即跑一次完整 dashboard,确认数据一致
必记闭环逻辑(核心考点)
VM 4 种升级模式:滚动升级(零停机、中小团队首选)、蓝绿升级(极快回滚、大流量/金融场景)、金丝雀(5%→100% 渐进、对稳定性极敏感)、原地升级(5-30 分钟停机、仅开发/测试)。3 大避坑:不同步所有节点、升级前 dryRun 验证、升级后立即验证查询结果。
五、升级失败回滚:从备份恢复到版本降级
思考记忆提示 — 回滚 = 升级前的反向操作
- 关联前面章节:#144 升级失败回滚、#81 vmbackup、#83 vmrestore
- 关联工具:vmbackup、vmrestore、vmctl
- 面试/考试高频提问:升级后数据格式不兼容怎么回滚?
升级失败是常态,事前准备决定回滚速度。本节给出"金标准"回滚流程。
5.1 升级前的"3 份备份"原则
每次升级前必须准备 3 份备份:
| 备份类型 | 工具 | 用途 | 回滚时间 |
|---|---|---|---|
| 数据快照 | vmbackup | 恢复全部历史数据 | 30-60 分钟(TB 级) |
| 配置快照 | kubectl get configmap -o yaml | 回滚配置 | 5 分钟 |
| 版本快照 | 记录当前 image tag | 回滚 binary 版本 | 5 分钟 |
# 升级前的标准备份命令
# 1. 数据快照
vmbackup -storageDataPath=/vm-data \
-snapshot.createURL=http://backup-s3.local:8080/create
# 2. 配置快照
kubectl get configmap vmstorage-config -o yaml > config-backup-$(date +%Y%m%d).yaml
# 3. 版本快照
echo "当前版本:$(kubectl get statefulset vmstorage -o jsonpath='{.spec.template.spec.containers[0].image}')"
5.2 3 种回滚场景的应对
回滚场景与应对
│
├── 【场景 1:升级后立即发现 bug】(< 5 分钟)
│ └─ 应对:版本降级(最快)
│ 1. kubectl set image statefulset/vmstorage vmstorage=victoriametrics/victoria-metrics:v1.136.12(v1.136.x LTS 线最新 patch)
│ 2. 等待 Pod 重启(每个节点 30s)
│ 3. 验证指标
│ 总耗时:5-10 分钟
│
├── 【场景 2:升级后跑 1 天发现性能问题】
│ └─ 应对:滚动回滚(中等)
│ 1. 逐个节点降级到 v1.136.12(LTS 线最新 patch)
│ 2. 数据格式兼容(新版本写入的数据旧版本可读)
│ 3. 验证查询结果一致
│ 总耗时:30-60 分钟
│
├── 【场景 3:升级后数据损坏】(灾难)
│ └─ 应对:从备份恢复(最慢但最彻底)
│ 1. 停止所有 vmstorage
│ 2. 用 vmrestore 从 S3 恢复 v1.136.x LTS 线的快照
│ 3. 启动 vmstorage,验证数据完整
│ 总耗时:30 分钟 - 2 小时(取决于数据量)
│
└── 【场景 4:新旧版本数据格式不兼容】(极端)
└─ 应对:保留新版本 + 旧版本集群并行
1. 新版本集群从 backup 恢复
2. 旧版本集群保留作为 query-only
3. 旧版本逐步淘汰
总耗时:1-3 天
实战技巧:版本降级的"数据兼容性陷阱"
VM 升级是单向兼容的:新版本可读旧版本数据,旧版本不可读新版本数据。这意味着:
- 升级后立即降级:安全(数据是旧版本写入的)
- 升级后跑 1 天再降级:危险(新版本写入了数据,旧版本读不懂)
- 解决方案:升级前用 vmctl 复制一份数据到独立集群作为"安全网"
必记闭环逻辑(核心考点)
回滚前必须准备 3 份备份:数据快照(vmbackup)、配置快照(kubectl get configmap -o yaml)、版本快照(记录 image tag)。3 种回滚场景:(1) 升级后立即发现 bug → 5-10 分钟版本降级;(2) 跑 1 天发现问题 → 30-60 分钟滚动回滚;(3) 数据损坏 → 30 分钟-2 小时从备份恢复。数据兼容性陷阱:新旧版本数据不双向兼容,升级前用 vmctl 复制数据到独立集群作为"安全网"。
六、CHANGELOG 阅读:升级前必看的内容
思考记忆提示 — CHANGELOG = 兼容性契约书
- 关联前面章节:#05 版本演进、#139 滚动升级
- 关联工具:GitHub Releases、CHANGELOG.md
- 面试/考试高频提问:升级前 CHANGELOG 重点看哪 3 类变更?
CHANGELOG 是升级前的"必读文档",重点关注 3 类变更:
6.1 CHANGELOG 阅读三步法
| 步骤 | 关注内容 | 影响 |
|---|---|---|
| Step 1:BREAKING CHANGES | 破坏性变更(配置项移除、API 变更、数据格式变更) | 必须修改配置或代码 |
| Step 2:DEPRECATIONS | 废弃项(将在下个 major 删除) | 建议提前适配 |
| Step 3:BUG FIXES | 关键 bug 修复(影响业务场景的) | 评估是否升级 |
6.2 CHANGELOG 示例解析(v1.146.0 实测)
以下是从 v1.146.0(2026-06-19)CHANGELOG 中提取的真实变更(基于 GitHub Releases 实测):
v1.146.0 CHANGELOG 关键变更(实测节选)
│
├── 【FEATURES】新功能
│ ├── -http.header.disableServerHostname flag(#11067)
│ │ 影响:禁用 X-Server-Hostname header(默认启用)
│ │ 应对:如果你依赖此 header 路由,确认行为变化
│ │
│ ├── /api/v1/admin/tsdb/delete_series 调用日志(#11104)
│ │ 影响:vmsingle 和 vmselect 集群会记录删除 API 调用
│ │ 应对:合规审计用户可基于此做追踪
│ │
│ ├── vmctl -vm-headers / -vm-bearer-token flag(#8897)
│ │ 影响:opentsdb/influx/remote-read/prometheus/mimir/thanos 子命令支持认证
│ │ 应对:迁移脚本需加认证参数
│ │
│ ├── vmui 图例新增 last 值(#10759)
│ │ 影响:UI 增强
│ │
│ ├── stream aggregation 新增 vm_streamaggr_dedup_dropped_samples_total 指标(#11102)
│ │ 影响:流式聚合去重监控
│ │ 应对:监控系统可采集该指标
│ │
│ ├── stream aggregation staleness_interval 默认值变更(#11102)
│ │ 影响:默认从 2*interval 改为 interval
│ │ 应对:如显式指定该值需要复核
│ │
│ ├── vmagent -remoteWrite.inmemoryQueues flag(#8833)
│ │ 影响:远程写入优先传输最近数据
│ │ 应对:评估后启用
│ │
│ └── vmagent -promscrape.cluster.shardByLabels flag(#11044)
│ 影响:vmagent cluster 抓取分片支持
│ 应对:需要分片时启用
│
└── 【BUG FIXES】bug 修复(17 项)
├── stream aggregation: producing aggregated samples with identical timestamps(#10808)
├── vmagent: corruption of remote-write metadata Unit values(#11120)
├── vmselect: corrupted metrics metadata when response contains multiple rows(#11115)
├── vmselect: long tenant filters truncation(#11096)
├── vmbackup/vmbackupmanager: fs:// destination directory absent handling
├── vmctl: push metrics on shutdown when migration fails(#11081)
├── vmrestore: disallow restoring parts outside storageDataPath
└── ...(其他 10 项 BUGFIX)
避坑指南:v1.146.0 CHANGELOG 阅读的 3 个常见误区
- 误区 1:期待重大更新:v1.146.0 是普通 stable release,不是 LTS,没有 NearestDelta2 / 8 个 MetricsQL 扩展等大改动
- 误区 2:忽略 BUGFIX 中"regression"关键字:v1.130 引入了 vmstorage mtls regression,v1.136.x LTS 线持续 backport 修复
- 误区 3:依赖自动更新(Dependabot 等):自动化工具可能跳过 LTS 线,必须人工审核
必记闭环逻辑(核心考点)
CHANGELOG 阅读三步法:Step 1 看 FEATURES(确认新行为)→ Step 2 看 BUGFIXES(评估是否受相关 bug 影响)→ Step 3 看依赖更新(Go 版本、安全补丁)。v1.146.0 真实内容:没有 BREAKING CHANGES、没有 DEPRECATIONS,主要是功能增强和 bug 修复。
七、FAQ 问答模块(基于 v1.146.0 实测重写)
思考记忆提示 — FAQ 是全篇的"临考前速背"模块,把前面的版本策略浓缩成 20 个高频问题
- Q1-Q5 围绕版本号:v1.146.0 解读、三段式 SemVer、asset 后缀
- Q6-Q10 围绕版本类型:stable、LTS 线(v1.136.x / v1.122.x)、LTS 选型
- Q11-Q15 围绕升级策略:滚动、蓝绿、金丝雀、原地
- Q16-Q20 围绕回滚与兼容:备份、回滚、数据兼容性
Q1. v1.146.0 中的 1、146、0 分别代表什么?
1 = 主版本(协议级变更,极少变动),146 = 次版本(每月 +1 的发布编号),0 = 修订版本(按需发布的 bug 修复补丁)。自 2019 年 1.0 发布以来,主版本一直是 1,意味着 7 年内未发生协议级破坏性变更。
Q2. VM 版本号遵循 SemVer 还是 CalVer?
三段式 SemVer(不带 CalVer 含义)。主版本在协议级变更时才 +1,次版本每月 +1 不代表"年累计"含义(实测 v1.144=2026-05-22、v1.145=2026-06-05、v1.146=2026-06-19,跨度不固定)。
Q3. v1.146.0 是 LTS 吗?
不是,v1.146.0 是 stable release(2026-06-19)。当前活跃的两条 LTS 线是 v1.136.x(已发 12 个 patch)和 v1.122.x(已发 25 个 patch)。LTS 是"持续维护的 release 线",不是 tag 后缀。
Q4. 当前活跃的 LTS 线是哪两条?怎么选?
v1.136.x(最新 LTS,适用于大多数生产环境)+ v1.122.x(长期遗留 LTS,给不能升级主线的用户)。选择依据:(1) 需要最新 bug 修复密度 → v1.136.x;(2) 有遗留系统约束 → v1.122.x;(3) 强合规要求 → 任一 LTS 线均可。
Q5. v1.146.0 与 v1.136.x LTS 线能跨版本升级吗?
能,数据格式 100% 兼容(同主版本)。v1.146.0 实际 CHANGELOG 没有 -storageNode 重命名等 BREAKING CHANGES,可以直接从 v1.136.x 跳到 v1.146.0。但建议先升到 v1.145.0(最新 v1.136.x 之后的 stable)做灰度,再升 v1.146.0。
Q6. 升级需要停机吗?
滚动升级、蓝图升级、金丝雀升级都可以零停机。原地升级需要 5-30 分钟停机。生产环境强烈推荐滚动升级(中小团队首选)或蓝图升级(金融/大流量)。
Q7. 旧版本可以读取新版本写入的数据吗?
不能。VM 数据格式是单向兼容的:新版本可读旧版本数据,旧版本不可读新版本数据。这就是为什么"升级后跑 1 天再降级"会有风险——新版本写入的数据旧版本读不懂。
Q8. vmbackup 备份可以跨版本恢复吗?
可以,vmbackup 的快照格式在所有 1.x 版本间通用。1.146 的 vmbackup 创建的快照可以被 1.100 的 vmrestore 恢复(数据格式兼容),但旧版本恢复后会丢失新版本引入的索引优化。
Q9. 配置文件可以跨版本复用吗?
大部分可以,但必须用 -dryRun 验证。VM 维护了较好的向后兼容性(旧配置项不删除)。v1.146.0 实测 CHANGELOG 没有配置项重命名,所以从 v1.136.x LTS 线或 v1.145.0 升到 v1.146.0 配置文件可直接复用。升级前仍建议用 victoria-metrics -dryRun 验证。
Q10. 升级前必须做什么?
3 份备份 + 5 项兼容性检查。3 份备份:数据快照(vmbackup)、配置快照(kubectl get configmap)、版本快照(记录 image tag)。5 项检查:配置文件、API、数据格式、依赖库、Operator 版本。
Q11. 升级失败如何快速回滚?
3 种回滚策略:版本降级(5-10 分钟)、滚动回滚(30-60 分钟)、从备份恢复(30 分钟-2 小时)。推荐先尝试版本降级(如 1.146 → 1.145),不行再用备份恢复。蓝图升级的团队可瞬间切回旧版本集群。
Q12. 蓝绿升级和滚动升级怎么选?
中小团队选滚动升级(无额外资源),大流量/金融选蓝绿(极快回滚)。蓝绿需要 2x 资源(同时跑两个集群),但回滚只需切流量(< 1 秒),适合对稳定性极敏感的场景。
Q13. 升级到 v1.146.0 后性能下降可能是什么原因?
v1.146.0 真实 CHANGELOG 没有性能破坏性变更。如果实测出现性能下降,可能原因:(1) 新功能(如 -remoteWrite.inmemoryQueues)启用了未优化的路径;(2) stream aggregation staleness_interval 默认值变更(2*interval → interval)影响延迟计算;(3) BUGFIX #10808(stream aggregation 重复时间戳)触发不同代码路径;(4) 数据索引重建(升级后自动跑一段时间);(5) 配置项默认值变化。
Q14. v1.136.x LTS 线的支持期是多久?
≥ 12 个月(自 v1.136.0 release 起)。支持期内提供安全补丁和关键 bug 修复(实测 v1.136.x 已发 12 个 patch release)。建议在支持期剩余 3 个月时开始评估升级到新 LTS 线。
Q15. VM 多久发布一个 stable 版本?
不固定,实测每 2-4 周 1 个 stable。v1.144.0 = 2026-05-22、v1.145.0 = 2026-06-05、v1.146.0 = 2026-06-19。LTS 线(如 v1.136.x / v1.122.x)的 patch release 频率更高(按 bug 修复需求触发)。
Q16. v1.122.x LTS 能直接跳到 v1.146.0 吗?
可以,数据格式 100% 兼容(同主版本 1)。v1.122.x → v1.146.0 不需要中间 LTS 过渡。但建议灰度:先升到 v1.145.0 观察,再升 v1.146.0。
Q17. v1.146.0 最关键的 5 个新特性是什么?
(1) -http.header.disableServerHostname flag;(2) /api/v1/admin/tsdb/delete_series 调用日志;(3) vmctl -vm-headers/-vm-bearer-token 认证;(4) vmagent -remoteWrite.inmemoryQueues;(5) stream aggregation staleness_interval 默认值变更。注意:没有 NearestDelta2、没有 8 个 MetricsQL 扩展——这些是错误信息。
Q18. 升级 v1.146.0 之前必须看 CHANGELOG 的哪 3 类变更?
FEATURES(确认新行为变化)→ BUGFIXES(评估是否受相关 bug 影响)→ 依赖更新(Go 版本、安全补丁)。v1.146.0 真实 CHANGELOG 没有 BREAKING CHANGES、没有 DEPRECATIONS,主要是功能增强。
Q19. rolling upgrade 每个节点间隔多久?
至少 30 秒(数据同步时间)。3 节点集群滚动升级总耗时 = 3 × (重启时间 + 30s) ≈ 5-10 分钟。10 节点集群 = 15-20 分钟。生产环境建议每个节点 60s 间隔,确保数据完全同步。
Q20. LTS 线与 stable 之间的数据兼容性?
100% 兼容(主版本不变)。v1.146.0 stable 可读 v1.136.x LTS 线写入的数据,反之亦然(前提是没用 v1.146.0 独有的功能)。这就是为什么 VM 能做到"零数据迁移升级"——7 年内主版本一直是 1,从未破坏协议级兼容性。
全篇必记总纲
VM 发布节奏可总结为"stable 月版 + 持续 LTS 线 + 4 种升级模式 + 3 份升级备份 + 3 步 CHANGELOG 阅读"。stable 每月发布(实测 2-4 周一次);LTS 线是 v1.136.x 和 v1.122.x(实测 ≥ 12 个月支持期);4 种升级:滚动、蓝绿、金丝雀、原地;3 份备份:数据快照、配置快照、版本快照;3 步阅读:FEATURES → BUGFIXES → 依赖更新。
八、Roadmap:后续预告
本篇覆盖了 VM 的发布节奏与版本策略,后续将深入到具体升级操作:
- #14 Enterprise vs OpenSource:关键功能差异——本文姊妹篇
- #05 版本演进:v1.146.0 CHANGELOG 实测解析
- #139 滚动升级:不停服升级 VM 版本最佳实践
- #144 升级失败回滚:从备份恢复完整步骤
- #154 灾备中心:异地多活数据同步与故障切换
本文参考与源码链接:
• VictoriaMetrics Releases 页面(实测 2026-07-01 抓取)
• v1.146.0 Release Notes(实测 commit 4d9901f)
• v1.136.12 LTS Patch(实测 2026-06-19)
• v1.122.25 LTS Patch(实测 2026-06-19)
• VictoriaMetrics 官方文档
• 官方升级指南
• vmbackup/vmrestore 官方文档

浙公网安备 33010602011771号