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.xv1.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 的版本号遵循三段式 SemVerMAJOR.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*intervalinterval),如果你配置中显式指定了这个值,需要复核
  • 配置文件兼容性:用 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*intervalinterval)影响延迟计算;(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 官方文档

posted @ 2026-07-01 03:40  左扬  阅读(34)  评论(0)    收藏  举报