文件
hyb-oa/.trellis/tasks/08-23-arm-public-health-monitor-controlled-rollout/design.md
T

4.0 KiB

ARM 公网健康监控受控部署设计

1. Boundary

腾讯云服务器是 OA 真实生产主机;ARM 是不运行 OA 服务的独立异机备份与外部健康探测节点。本次只升级 ARM 上已有的应用健康探测器、共享企微 helper 和两个应用健康 systemd units。状态目录、应用健康 alert state、root-only webhook、备份 receiver/dead-man 和归档均保留。部署不修改腾讯云 OA 主机、DNS、网络策略或业务数据。

2. Source and Identity

  • 候选来源固定为工作提交 a0f0483,部署前以 Git 对象或干净工作树核验三个部署源。
  • 通过既有受控 SSH alias 操作;不把主机、用户名或密钥信息写入任务证据。
  • root 操作必须由 sudo -n 或既有等价受控入口完成。任何口令提示都在写入前停止,不在聊天中索取或传递口令。
  • webhook 路径只在远端 root shell 内从既有受控事实源解析并校验;正文永不读取。

3. Upgrade Data Flow

local contracts + committed-source hashes
  -> ARM read-only baseline
  -> same-host rollback copies of exact managed artifacts
  -> upload committed candidate to one temporary directory
  -> installer install (stops timer, preserves state, remains disabled)
  -> hash/permission/unit/state checks
  -> formal systemd oneshot against real /ready
  -> installer enable
  -> observe two scheduled windows
  -> verify dead-man baseline and clean temporary material

install 是 ARM 运维变更分界点。此前失败只清理临时上传;此后失败按升级前快照回滚。enable 不是测试消息入口,只恢复对腾讯云 OA 公网 /ready 的 5 分钟外部监控。

4. Existing State Compatibility

旧版 probe schema v1 由新版保守迁移至 schema v2,不补发通知。升级前只记录允许字段及校验结果,不输出原始 JSON。disabled oneshot 后必须验证 v2 phase 合法、权限仍为 0600,并确认 helper alert state 未产生非预期变化。

若回滚到旧版且活动状态已是 v2,旧版无法读取时不得修改字段伪造 v1。先停 timer、保留精确状态副本,再把精确活动状态文件移到同一受控文件系统的回滚位置,由旧版在真实健康样本上建立基线。

5. Shared Helper Compatibility

helper 同时服务应用健康和备份/dead-man,因此必须随 probe 一起升级,并以完整自动备份合同作为写前门禁。远端升级后只核对 dead-man 的 enabled/active 和既有文件属性,不主动触发 dead-man,也不改变其状态文件。

6. Rollback Matrix

阶段 失败处理
写入前 停止;不创建远端变更,只清理本次临时目录
disabled 安装后 timer 保持停用,恢复升级前 probe/helper/units,daemon-reload,验证状态与 dead-man 基线
oneshot 后、enable 前 同上;若状态已迁移,按状态兼容流程保留/移出精确文件
enable 后 先 disable/stop,恢复文件与 units;确认真实健康和状态可读后按升级前基线决定是否重启旧 timer
自然告警已发出且恢复失败 timer 保持停用,保留证据并报告告警未闭环;不伪造恢复消息

7. Evidence and Privacy

允许记录:候选短提交号、检查 PASS/FAIL、哈希相等布尔值、固定 mode、schema/phase、timer/service enabled/active、稳定状态类别和观察时间。禁止记录:主机/IP、用户名、完整远端配置路径、webhook/Secret、原始状态、响应正文、journal 或企微 payload。

8. Trade-offs

  • 不做真实故障演练,避免人为制造正式企微运维消息;代价是本轮只验证升级后的真实健康运行和本地完整状态机合同,不重复证明机器人故障/恢复收件链。
  • 保留并迁移现有状态,能维持事件连续性;代价是回滚必须处理旧版不识别 v2 的兼容边界。
  • 观察两个调度窗口会延长完成时间约 10 分钟,但能证明 timer 不只是 enabled,而是确实连续运行。