跳转至

SOP — 部署器可观测性补齐与交付文档复核(2026-10-08)

主题目录:lsf_ins/probe_batch4_20261008/|执行日期:2026-10-08|类型:C 类(改实现体 + 改文档)

一、背景

三件事同批收尾,均来自 2026-10-07 探测批量化四轮改造的遗留清单与 HANDOFF §3 #4:

  1. 效率不可观测:deployment-tool-engineering 要求「运行结束输出本次远端命令数与建连数」, 共享库 connection_pool.shutdown() 已能打印建连数,但工程编排层从未调用,画不出「每台只建连一次」;
  2. derive_system_disks()(共享库 precheck_module.py)是四轮批量化后唯一未审查的逐主机探测项;
  3. 交付文档复核:HANDOFF §3 #4 要求复核 docs/ 三件套 + submit_node/, 并给出「INCIDENT 是否单列」的结论。

二、目标

项 目标态
5.1 连接数自报 任一子命令收尾打印 SSH连接池已关闭 | 本任务共新建连接 N 次,且 N ≤ 主机数
5.2 disks 批量化 有据可依的结论(做 / 不做),不做须留证
5.3 文档复核 相对链接 0 broken;CLI 取值与文档一致;节点口径与实机一致;INCIDENT 单列落地

三、前置条件

  • 部署器 venv 可用、root 免密到 6 台节点可用;
  • 复核为只读(grep / 文档读取 / bhosts 只读查询)。

四、影响范围

  • 5.1:deploy/lsf/main.py 一处(流程收尾)。
  • 5.2:不改动(复核结论为不做)。
  • 5.3:docs/RUNBOOK.md(6 处口径校正)、docs/SOP.md(附录 A 压成指针 + 附录 B/C)、 新增 docs/INCIDENT-20260924-部署期故障排障台账.md。不改任何系统状态。

五、分步操作

5.1 连接数自报(改 main.py)

原 main() 在 try 内直接 return orch.cmd_*(),进程退出不经过连接池收尾。 改为「rc 变量 + finally 调 connection_pool.shutdown()」:

rc = 0
try:
    ...
    rc = orch.cmd_precheck()   # 各子命令统一赋给 rc
    ...
except DeployError as exc:
    rc = 1
finally:
    try:
        connection_pool.shutdown()   # 打印「本任务共新建连接 N 次」
    except Exception:
        pass
return rc

坑:return 写在 try 内会跳过 finally 之前的收尾语义(此处靠 finally 兜住); 退出码语义必须保持(0 成功 / 1 业务失败 / 2 参数错误)。

5.2 derive_system_disks() 批量化 —— 复核后不做(留证)

事实 证据
已有进程内缓存,每主机最多一次 precheck_module.py 的 system_disks():if host not in self._system_disks_cache
位于受保护目标判定红线路径 该函数是「危险目标由实机推导」的唯一实现,deployment-tool-engineering 列为阻断项
改动落共享库,影响面 8 个挂载工程 共享库改动须逐工程回归(同一 skill 明令)
收益 < 0.5 s 上一轮 SOP 附录 B 已按停手判据判定「不再动」

结论:不做。剩余可优化面仅为「把 lsblk 调用并入 static_probes 批量」,与红线风险、 跨工程回归成本不成比例。若日后确需,须单独出方案并按共享库变更流程回归全部挂载工程。

5.3 交付文档复核(只读 + 文档编辑)

① 机检(一条命令跑完,含坏样本自检)

# 遍历 lsf_ins 下 *.md(排除 .venv/backup/IBM_Spectrum_LSF),校验相对链接可达;
# 同一逻辑在含坏链接的临时目录上必须判失败(反例自检);再核 CLI --stage 取值与文档一致

实测:md 13 个 / 相对链接 38 条 / BROKEN 0;坏样本 broken=1 PASS; --stage 取值 {prepare,nfs,node-env,install,up,tune,health,user-sync,failover,cgroup,submit,local-scratch} 与文档引用一致(未定义取值 none)。

② 实机口径核对

ssh root@192.168.31.23 'source /data/nfs/lsf/lsf/conf/profile.lsf; bhosts -w'

实测:3 台 work ok + 2 master 与 hpc-submit closed_Full/MAX=0。

③ 由此发现的文档漂移(submit 节点接入后未同步)

文件 原表述 校正为
docs/RUNBOOK.md §4 启动/停止/重启 LSF「5 台都要」+ 循环 23..27 6 台(含 hpc-submit)+ 循环 23..28
§8 场景2 dnf install -y libnsl(5 台) 6 台
§8 场景3 核对循环 23..27、「预期 5 行摘要」、hostsetup --setuid + 5 台 sudoers、验证 5 台 23..28、6 行、6 台
§8 场景4 重启循环 23..27 23..28
§9 安全与权限 凭据/eauth 轮换「5 台」 6 台
§10 容量 「5 台 / 30 核」 3 台执行节点(8 核/台 = 24 核)

④ INCIDENT 单列

新增 docs/INCIDENT-20260924-部署期故障排障台账.md:按 writing-ops-change-sop 的 INCIDENT 八章组织(概要 / 影响范围 / 时间线 / 根因 / 处置过程 / 恢复验证 / 复盘 / 行动项),迁入原 docs/SOP.md 附录 A 的 25 条根因(含证据与跨轮索引),并把 SOP 附录 A 压成指针 —— 此后 事故与排障记录按 INCIDENT-YYYYMMDD-<主题>.md 追加,不再写回 SOP 正文。

⑤ 两个决策项的结论(用户裁定)

  • git 纳管:暂缓(lsf_ins 当前不是 git 仓库);
  • INCIDENT 单列:是(已按 ④ 落地)。

六、验证

判据 命令 期望(实测)
建连数可观测 main.py -c config/lsf_deploy.yaml --precheck(跑两遍) 两遍均含「本任务共新建连接 6 次」、rc=0
编译 python -m py_compile main.py 通过
链接可达 5.3 ① 的检查脚本 BROKEN 0 + 坏样本自检 PASS
CLI 一致 5.3 ① 的检查脚本 未定义取值 none
节点口径 bhosts -w 3 ok + 3 closed_Full
部署器未受影响 main.py --drift rc=0、全阶段无漂移

七、回滚

# 代码与文档均按备份台账还原(见 backup/README.md)
cp -a backup/lsf_ins/deploy/lsf/main.py.bak.<时间戳>  deploy/lsf/main.py
cp -a backup/lsf_ins/docs/{RUNBOOK.md,HANDOFF.md,SOP.md}.bak.<时间戳> docs/
# INCIDENT 文件为新增:删除该文件并还原 SOP 附录 A(用上面的 SOP.md.bak)

回滚后验证:--precheck 不再打印建连数行;--drift rc=0。

八、风险说明

风险 说明与缓解
finally 中调用收尾抛错影响退出码 已 try/except 包裹,异常不影响 rc
复核结论「不做」被视为漏做 已在本 SOP 与 HANDOFF §3 留证(缓存证据 + 红线归属 + 停手判据)
文档口径校正引入新错误 每处均以实机 bhosts -w 输出为准;改动前整份备份
INCIDENT 迁移丢内容 25 条根因逐条迁入(原 22 条 + 索引补充 3 条),SOP 侧改为指针并保留链接

附录 A:交付物清单

文件 说明
deploy/lsf/main.py 收尾调 connection_pool.shutdown(),打印本任务建连数
docs/RUNBOOK.md 6 处节点口径校正(5 台 → 6 台;容量 3 台执行节点)
docs/SOP.md 附录 A 压成指针(指向 INCIDENT);附录 B/C 同步
docs/INCIDENT-20260924-部署期故障排障台账.md 新建:事故与排障独立台账
probe_batch4_20261008/SOP.md 本文件
probe_batch4_20261008/backup/README.md 备份台账

来源:/home/rain/Documents/LSF/lsf_ins/probe_batch4_20261008/SOP.md | 最后更新:2026-10-08 03:48(由 build/sync.py 同步,请勿在站点侧修改)