资讯动态

第26章:RabbitMQ Feature Flags、滚动升级与蓝绿发布

发布时间:2026/9/11 20:41:16 来源:尧图企业网站定制
1. 项目背景中级篇前面把 quorum、TLS、联邦都铺上了。领导下一句是「4.3 升 4.4停多久」有人准备三台一起换镜像有人听过 Feature Flags以为enable_all能当后悔药有人想跳过 4.3 直接从很老的 3.13 空降。升级窗口是运维最高风险混合版本集群能力收缩、新 flags一旦启用不能关闭源码写明 currently no way to disable、支付 Leader 若全堆在正升级那台会双倍抖动。4.x 系列必须按支持的路径原地升4.2→4.3→4.4不要跳大版本。rabbit_release_series给 CLI 留了支持状态接口。混合版本时未升级节点必须能理解已启用的 flags否则加不进群或行为分裂。滚动顺序与第 17 章 drain、第 19 章「多数派1 才下线」绑在一起rabbit_upgrade_preparation:await_online_quorum_plus_one/1就是等「再少一台仍够票」。蓝绿是另一条路新集群并列Shovel/联邦引流第 21 章切流量而不是改同一套 Erlang 节点。适合跨大版本、或磁盘布局要推倒重来。代价是双倍资源和切流对账。推广中台默认同系列滚动跨系列或存储改造走蓝绿。痛点三台一起停 → 支付无多数派 先 enable 新 flag 再升级旧节点 → 旧节点拒加入 跳版本 → 官方不支持的路径 drain 了但 Leader 没走 → 升级那台仍扛写 蓝绿双写却无对账 → 两边订单对不上本章交付 Runbook 正文测试把它变成检查单。不在生产第一次练手。2. 项目设计小胖把手机系统更新截图甩出来「夜间自动更新早上就能用。」小胖这不就是打补丁吗三台轮流重启不就滚动了Flags 听着像游戏里的开关开错再关。蓝绿不就是再买三台有钱任性为啥还要等 quorum plus one听着像数学题。大师手机是一台MQ 是投票委员会。轮流重启若不等「还剩足够票」你会在第二台升级时只剩一台活着支付 Confirm 全失败。Flags 不是游戏开关rabbit_feature_flags写明启用后当前不能关实验 flag 还不会被enable_all误开。蓝绿有钱也要 Shovel 对账和切流窗口不是复印三台就高可用。await_online_quorum_plus_one是「再摘一台Khepri/quorum/stream 协调者仍安全」的等待不是心算。技术映射Feature Flag 集群级不可逆能力开关drain 维护模式quorum1 允许再少一个节点。小白稳定与 experimental 怎么列混合版本能开哪些4.3 的cluster_partition_handling失效会不会在升级后突然变行为滚动时应用连 LB 会不会打到 draining 节点新 flags 什么时候 enable蓝绿双写和第 21 章 Shovel 如何选失败怎么回滚镜像大师rabbitmqctl list_feature_flags看 stateenabled/disabled/unavailable。experimental 默认不开。混合版本以最老节点能提供的为准新能力等全部升级后再 enable。4.3 起分区策略本来就是灰框升 4.4 不会「突然变好」也不要指望它。LB 健康检查必须认 drain第 17 章否则支付打到已停监听的节点。新 flags全部节点新版本且稳定后再 enable不要边升边开。切流同系列滚动跨系列或存储重做蓝绿Shovel。回滚未 enable 新 flag 前理论上可把节点镜像退回已 enable 则禁止退回旧二进制。备份 definitions 与数据目录是前置不是回滚本身。小胖Runbook 我记成口令查版本与 flags → 备份 → 一台 drain → 等 plus one → 换镜像启动 → revive → 下一台 → 全员新版本后 enable flags → 回归。蓝绿另附一页。大师再加升级前rebalance不是必须但要看 Leader 是否全在第一台升级后可再平衡。支付路径回归含杀一台仍 Confirm第 19 章不只 ping。技术映射enable_feature_flag集群广播rabbit_prelaunch_feature_flags在 VM 起来前对账磁盘上的 flags。小白插件版本与核心不一致怎么办Khepri 已是默认还要当 flag 看吗stream coordinator 也在 plus one 检查里吗大师插件跟镜像走不要混配。Khepri 在 4.4 默认已启用list 里确认khepri_dbenabled。await_online_quorum_plus_one把rabbit_stream_coordinator与Khepri 开启时rabbitmq_metadata当关键组件少票就继续等。不要在等的时候强行下一台。小胖实验室用三容器改标签模拟滚动不真的跨小版本也可以走一遍 drainplus one回归正式升 4.3→4.4 在预发做。检查单进 Git。3. 项目实战3.1 环境准备三节点 4.4 实验室第 17 章。预发才动真实 4.3。本场把 Runbook 命令跑通升级包用「重启镜像」代替换版本重点练顺序与门禁。dockerexecrabbit1 rabbitmqctl cluster_statusdockerexecrabbit1 rabbitmqctl list_feature_flagsdockerexecrabbit1 rabbitmq-diagnostics--silentcheck_if_node_is_quorum_ready||true运行结果三人 running记下 flags 表。坑unavailable 的 flag 不要 enable。坑实验 flag 不要enable_all。3.2 步骤一升级前门禁步骤目标没有红灯、没有不可用节点、definitions 已导出。# promo-mq/ch26/preflight.shdockerexecrabbit1 rabbitmq-diagnostics-qpingdockerexecrabbit1 rabbitmq-diagnostics-qalarmsdockerexecrabbit1 rabbitmqctl export_definitions /tmp/defs.jsondockercprabbit1:/tmp/defs.json ./backup-defs-$(date%Y%m%d).jsondockerexecrabbit1 rabbitmqctl await_online_quorum_plus_one--timeout120await_online_quorum_plus_one对应rabbit_upgrade_preparation。超时不要下一台。运行结果alarms 空plus one 成功。坑两节点集群 plus one 会失败支付本就不该两节点。坑definitions 含密码备份进密钥库。3.3 步骤二单节点维护与「升级」# 选 Leader 最少的节点或先 rebalancedockerexecrabbit2 rabbitmq-upgrade drain# LB 摘 rabbit2# 此处生产换包/换镜像dockerrestart rabbit2dockerexecrabbit2 rabbitmq-diagnostics-qpingdockerexecrabbit2 rabbitmq-upgrade revive运行结果另两台仍可发布支付测试消息。坑drain 后仍有流量LB 没摘。坑restart 不是down -v。3.4 步骤三循环至第三台对 rabbit3、rabbit1 重复步骤二。每台之间再跑 plus one。全部 ping 与cluster_status版本一致后才进入 flags。3.5 步骤四启用新 Feature Flagsdockerexecrabbit1 rabbitmqctl enable_feature_flag all# 仍会跳过 experimental# 或逐个 enable 文档要求的稳定项dockerexecrabbit1 rabbitmqctl list_feature_flags源码enable_all/0跳过 experimental启用不可逆。运行结果目标 flag enabled。坑混合版本时 enable 失败或把旧节点踢出语义——所以必须全员新版本。坑不要为「试试」打开 experimental。3.6 步骤五回归用例最小集项命令/动作期望健康ping/alarms通过支付 Confirm第 19 章脚本成功杀一台stop 非全部仍 Confirm联邦若有第 21 章status runningTLS第 25 章5671 可连通过才宣布升级完成。Leader 不均可用rabbitmq-queues rebalance all窗口内。3.7 步骤六蓝绿对照文档选做新集群 B 起 4.4Shovel 从 A 拉历史on-confirm冻结写入应用切 LB 到 B观察双深度。联邦适合营销 Fanout 而不是支付法定副本。双写要业务幂等默认不推荐支付。运行结果迁完条数对账第 21 章 TC。坑未冻结写入就delete-after queue-length。3.8 完整代码清单promo-mq/ch26/ preflight.sh drain-upgrade-one.sh RUNBOOK.md column/samples/ch26/RUNBOOK.md即本节步骤签字栏运维/测试/开发。3.9 测试验证编号名称期望TC-CH26-01preflightplus one 0TC-CH26-02drain 一台另两台支付成功TC-CH26-03全员滚动后版本一致TC-CH26-04enable flags无 unavailableTC-CH26-05回归表全绿TC-CH26-06禁止跳版本文档门禁值班检查单升级窗口禁发版、禁改 Policy、禁 enable experimentalLB 与 drain 联动备份当天有效。混合版本停留不超过文档建议的短窗口不要「先升一台观察一周」却仍开新 flag。Runbook 超时plus one 120s失败则停止滚动扩容或修节点禁止跳过等待。回滚决策树贴在 RUNBOOK 末未开新 flag 可退镜像已开则只能向前修。把list_feature_flags升级前后 diff 进工单。测试在窗口内只跑回归表不做第 14 章拧水位。开发待命看 Confirm 分桶超时当失败重试不得改 SENT。预发至少完整走一遍真实小版本升实验室「只重启」不能替代兼容性。4.3→4.4 的废弃项分区策略、transient 默认在第 3、7 章已写升级说明里再点名避免升完行为变化当 Bug。Khepri 已在用则不要在窗口里做元数据后端切换。插件与核心同一镜像哈希。滚动顺序建议先非支付 Leader 密集节点再动忙节点可用 list_queues leader 辅助不要凭感觉。完成后 revive 所有节点确认无残留 drain。交接班念今日已升 4.4flags 列表见工单附件。蓝绿页单独评审资源与 RPO支付停写窗口长度、Shovel 追平 SLO、切流开关谁按。没有对账数字不算切流。与滚动二选一写进架构决策记录避免窗口当天争论。升级窗口通讯录要提前一天发出谁值守、谁有权按 revive、谁有权宣布失败停止。停止条件写死plus one 超时、支付 Confirm 连续失败、Alarm 亮、节点加不回群。满足任一条就冻结滚动开战争房而不是「再试一台」。混合版本停留期间禁止 declarations 大变更、禁止新队列类型试验、禁止 enable experimental。窗口结束后的第一份list_feature_flags与cluster_status截图进变更单缺截图审计视为未完成。回滚决策树要让值班能在两分钟内读完未开新 flag → 可退该节点镜像并 revive已开新 flag → 只能打补丁或扩容向前。把这句话印在 RUNBOOK 首页。预发必须用真实 4.3 包升到 4.4 至少一次实验室重启代替不了 schema 与废弃项。4.3 起分区策略失效、transient 默认拒绝升完若有人报「以前能声明临时队列」那是预期写进升级说明而不是当回归失败乱回滚。插件与核心同一镜像摘要禁止「只换 server 不换 plugins 目录」。滚动顺序用list_queues name leader避开支付 Leader 扎堆的节点当第一台减少窗口内选举次数。全部 revive 后看有无残留 draining有则补 revive否则第二天 LB 仍摘着那台。交接班口令包含版本号与 flags 附件路径。开发在窗口内只准看分桶、不准发版。测试只跑回归表。安全不在窗口轮换证书避免变量叠加。这些纪律看起来啰嗦但升级事故几乎都来自「顺便做另一件事」。蓝绿若选中单独冻结滚动 Runbook避免两套并行。资源申请按双倍集群Shovel 账号过期时间。切流开关权限与第 21 章铲子删除权限分开防止一人误删。支付停写公告要给收银台降级文案不只给 MQ 组。追平 SLO 用条数抽样 message_id抽样不足千分之一不算。切读观察期至少覆盖一个业务高峰切片。失败则切回蓝绿当演练报废不要在绿上当场修 schema。决策记录写清为什么不滚动跨系列、磁盘布局、或合规要求可回切。没有 ADR 的蓝绿会在窗口变成现场架构会。4. 项目总结优点与缺点策略优点缺点同系列滚动资源少、flags 连续混合窗口要短蓝绿Shovel可推倒存储成本高、切流复杂三台齐停心智简单支付停摆优点1不可逆 flags 被门禁管住。2plus one 可脚本化。3蓝绿有对照。缺点1LB/drain 耦合。2实验 flag 诱惑。3真跳版本无官方桥。对比「只换镜像不管 flags」新能力不用等于白升乱 enable 等于无法回滚。适用场景4.2→4.3→4.4。预发演练。存储改造用蓝绿。不适用生产先开 experimental两节点滚动当 HA跳大版本碰运气。注意事项flags 不能关。安全definitions 备份脱敏。版本按系列升。drain 与健康检查。常见踩坑生产升完一半去 enable_all。根因混合版本。处理停、等全员。LB 打 draining 节点收银台超时。根因健康检查不认维护。处理先摘流量。跳 4.2 到 4.4。根因抄错文档。处理停在支持矩阵。思考题已经 enable 某个 4.4 新 flag 后发现回归失败为什么通常不能退回 4.3 二进制你的应急是什么蓝绿时支付能否继续双写若不能停写窗口如何与 Shovel 追平 SLO 对齐回滚决策第 21 章对账。推广计划提示部门本章怎么用协作运维主签 Runbookplus one 超时停测试回归表窗口内不拧水位开发Confirm 分桶待命不改 SENT架构滚动 vs 蓝绿 ADR否决跳版本下一章把「升完感觉还行」变成 Prometheus 数字和五条告警。附录 C第 25 章思考题参考答案题 1authnOAuth2、authzinternal。认证只证明 JWT 有效并抽出用户名授权看 internal 权限表JWT 里的 scope不再当 configure/write/read 依据。要以 scope 为准就把 authz 也配 oauth2或不要拆链。拆链用于「IdP 管是谁、Broker 本地管能干什么」权限变更走set_permissions不是改 token。题 2联邦/Shovel URI。必须amqps://、专用最小权限账号、证书SAN 含对端主机名/LB 名不要只写 IP弹性扩容会挂。与第 21 章明文实验室 URI 在生产检查单里互斥。延伸阅读与资源SQLAlchemy 2.0从入门到进阶的实战之旅Dify 从入门到进阶LLM 应用平台实战修炼Java 工程师进阶从 JVM 生产排障到OpenJDK原理NumPy 从入门到生产落地全链路实战指南科学计算/向量化Redis 8 实战精讲从 CRUD 到源码构建高可用缓存系统Redis 实战修炼与原理进阶Python 3实战精进从脚本到高并发订单引擎python入门Rquests从菜鸟脚本到企业级SDK的网络实战圣经Milvus向量数据库实战修炼从 0 到 1精通向量检索与生产落地MongoDB 实战进阶与内核修炼后端工程师的 AI 转型第一课Ollama 与私有化大模型实战10倍开发者的 Dify 魔法书从零构建全栈 AI 应用后端工程师转型AI第一课-Ollama 与私有化大模型实战大型语言模型(LLM) vLLM 高性能推理落地实战Agent开发之LlamaIndex 实战修炼与源码进阶大语言模型Transformers 实战修炼与源码剖析

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价