INCIDENT — LSF 集群部署期故障与排障台账(2026-09-24 起)¶
本文件由「交付文档复核」(2026-10-08)从 SOP.md 附录 A 单列而来。 定位:事故与排障记录的独立台账;后续同类记录按
INCIDENT-YYYYMMDD-<主题>.md追加, 不再塞回 SOP 正文。变更本身的实施 / 验证 / 回滚仍在 SOP。
1. 概要¶
| 项 | 内容 |
|---|---|
| 时间 | 2026-09-24 ~ 2026-10-07(部署与接入期) |
| 等级 | 部署期缺陷与故障,无生产业务受影响(集群处于交付建设阶段) |
| 影响面 | LSF Suite CE 10.2.0.12 集群 6 台(3 执行节点 + 2 master + 1 submit) |
| 当前状态 | 除「cgroup 资源限制不可用」外全部闭环;该项受 FP15 介质外部阻断 |
2. 影响范围¶
- 受影响对象:部署过程本身(依赖、认证、启停、调度配置),无用户业务数据,无数据损坏或丢失。
- 停机:仅限变更窗口内(failover 演练、节点滚动重启);窗口外集群正常服务。
- 遗留影响:作业级 cpu/mem 硬限制不可用(唯一解法=FP15+ 二进制),见第 8 章行动项。
3. 时间线¶
| 时间 | 事件 |
|---|---|
| 2026-09-24 | 首轮部署(13 阶段)暴露依赖 / 认证 / 启动类缺陷 → 第 4 章 1–16 条 |
| 2026-09-24 | 第二轮:failover 演练失败 → 第 4 章 17–20 条(SOP 第九章) |
| 2026-09-24 | 第三轮:root 执行 b* 报 User permission denied → 第 4 章 21–23 条(SOP 第十章) |
| 2026-09-24 | 第四轮:cgroup v1 切换执行成功但业务目标未达成 → 第 4 章 24 条(SOP 第十一章) |
| 2026-09-25 | submit 节点接入(SOP 第十二章),修复 2 处既有缺陷 → submit_node/SOP.md 附录 A |
| 2026-10-06 | 两台 master 排除计算(MXJ=0)并部署器化 → master_noexec/SOP.md |
| 2026-10-07 | /projects、/local_scratch 纳管,暴露 2 处坑 → SOP 第十三 / 十四章 |
4. 根因(附证据)¶
以下每条均含「症状 → 根因 → 修复」;证据为实机命令输出或日志,明细见 SOP 附录 A 与 各专题 SOP。按发现顺序编号。
| # | 症状 | 根因 | 修复 |
|---|---|---|---|
| 1 | 节点间 ssh Host key verification failed |
仅有操作机→节点免密,节点互信未配 | 阶段0 keyscan known_hosts + 公钥互写 authorized_keys |
| 2 | 挂载 rc=32 bad option |
节点缺 nfs-utils(mount.nfs helper) | 依赖清单补 nfs-utils(挪入阶段0) |
| 3 | res/lshosts 报 libnsl.so.1: cannot open |
glibc 2.34 移除 libnsl.so.1,libnsl2 只提供 .so.3 | dnf 装 libnsl(baseos 提供 .so.1) |
| 4 | lsfinstall 预检 Cannot find UNIX command "ed" |
minimal 系统缺 ed 等工具 | 依赖一次备齐 17 个包 |
| 5 | hostsetup 不生成启动脚本 | Rocky9 无 /etc/init.d(initscripts 未装);产物实为 lsfd.service 而非 sysv 脚本 |
装 initscripts;判据改 systemctl cat lsfd.service |
| 6 | hostsetup lsf.entitlement does not exist |
缺 entitlement 文件 | 用 lsf_license.dat 落地 conf/lsf.entitlement |
| 7 | 全部 b* 命令 User permission denied(ldapadmin 可用) |
认证三件套缺失:setuid、/etc/lsf.sudoers(LSF_EAUTH_KEY)、bin/eauth 软链 |
hostsetup --setuid + sudoers 分发 + eauth 软链;b* 统一经 LDAP 管理员 |
| 8 | lsfstartup 无限 Error(s) found ... continue? |
LSF_TOP/log/Install.err 历史残留触发循环(固定 4 个 y 应答不够) |
启动前清理 Install.*;改逐台 lsf_daemons start |
| 9 | bhosts 节点全 unavail 而 lshosts 显示 5 台 |
lshosts 是静态列表,判据用它会假 done | 判据改 bhosts STATUS=ok 计数(经管理员),轮询中自动 hopen |
| 10 | lsb.params(23): missing '=' |
lsb.params 语法必须 KEY = value |
写入格式加等号;ckconfig 过后 reconfig |
| 11 | lsb.users Default 行进了三个段 | sed /^End User/i 前缀误匹配 End UserGroup |
匹配改全行 ^End User[[:space:]]*$;手工重写文件 |
| 12 | LDAP 同步 syntax error near '(' |
ldapsearch filter 未 shell 引用 | 模板全参数 shlex.quote |
| 13 | bhist -m <host> 报 No matching job |
bhist 的 -m 是「显示执行主机列」,主机名被当 jobID |
验证查询改全量输出 + grep |
| 14 | authselect 执行后 profile 仍无 features | q() 把 sssd with-mkhomedir 引为单参数 |
拆为两个参数逐个引用 |
| 15 | 冒烟标记写入 Permission denied | LSF_TOP 为 root 属主,操作机 rain 用户不能直写 | 标记经节点 root mv 落地 |
| 16 | 演练后 4 台 closed_LIM |
停启过程中 LIM 状态标记 | badmin hopen <hosts> 恢复(经管理员) |
| 17 | failover 报「未接管」而备 mbatchd 其实被拉起过 | lsid 输出为 My master name is <host>,脚本却匹配 Master host(永不命中),且 2>/dev/null 丢弃诊断 |
改解析串并保留 lsid 原始输出(SOP 第九章根因 1) |
| 18 | 停主 master 后 57s 主 master 自行复活 | lsf-health.timer 巡检 missing-daemon 自愈执行 systemctl start lsfd(周期 15min,停服窗口必被覆盖) |
演练期间暂停 timer(SOP 第九章根因 2) |
| 19 | 90s 判「未接管」 | 备机接管属分钟级(实测 109~148s),窗口不足 | 窗口放宽至 600s 并打印中间态(SOP 第九章根因 3) |
| 20 | 接管后 bqueues 30s 超时被判失败且不恢复主 master | 新 mbatchd 接管后仍在初始化;失败路径「留给人工」使集群留在半状态 | 轮询 180s,失败自动恢复主 master(SOP 第九章根因 5) |
| 21 | root 执行 b* 报 User permission denied(其他用户正常、mbatchd 无记录) |
conf/lsf.conf 未设 LSF_ROOT_USER,LSF 安全默认禁止 root 从命令行执行 LSF 命令 |
加 LSF_ROOT_USER=Y 放行(SOP 第十章根因 1) |
| 22 | 加了 LSF_ROOT_USER=Y 且 reconfig 后仍被拒 |
该参数由 mbatchd 启动时读取,reconfig 不生效 |
改 badmin mbdrestart 后立即生效(SOP 第十章根因 2) |
| 23 | 4 台节点上 ldapadmin 也不能执行 b* |
/etc/lsf.sudoers 只在 master-01 存在:部署器幂等判断只看 primary,其余节点永不补发 |
改逐台比对 LSF_EAUTH_KEY 摘要并补齐 5 台;部署器同步修正(SOP 第十章根因 3) |
| 24 | cgroup v1 切换后 LSF 仍报 cgroup v2 不支持 | FP12 二进制以「系统是否存在 cgroup2」判定环境;RHEL9 systemd 在 legacy 模式仍保留 cgroup2 on /sys/fs/cgroup/unified 且 /proc/self/cgroup 保留 0::;systemd.legacy_systemd_cgroup_controller 在 systemd 252 已被移除 |
结论:FP12 + Rocky 9 组合下 cgroup 资源限制无法启用,唯一解法=FP15+ 二进制(SOP 第十一章) |
| 25 | 排查教训:strace 下普通用户也报同一错误 |
ptrace 阻止 setuid 程序(eauth)提权,签名随之无效 | 排查 setuid 程序时不用 strace 做行为对比;服务端有 userok: eauth authentication failed 记录 |
跨轮根因索引(不重复搬运,原文见对应章节):
| 主题 | 位置 |
|---|---|
| failover 四条根因的完整叙述与验证 | SOP.md 第九章 |
| root 权限三条根因与部署器固化 | SOP.md 第十章 |
| cgroup v1 结论与后续处置 | SOP.md 第十一章;cgroup_v1/SOP.md 第九章 |
| submit 接入暴露的 2 处既有缺陷(keyscan 注释行、known_hosts 前缀比对) | submit_node/SOP.md 附录 A |
挂载选项等价判定(actimeo 被内核展开)与 /tmp 输出不可见 |
SOP.md 第十三章 |
本地 scratch 安全判据(三态 unknown 中止)与 TMPDIR 未注入 |
SOP.md 第十四章;local_scratch/SOP.md 第八章 |
5. 处置过程¶
- 每条根因的修复动作见第 4 章「修复」列,均已固化进部署器(同一变更第二次复跑零变更、 全阶段跳过),非一次性手工修补。
- 涉及共享配置的修复(
lsf.conf/lsb.params/lsb.users/lsb.hosts)一律先cp -a备份再改,生效方式按归属区分:lsadmin reconfig(LIM 类)与badmin mbdrestart(batch 类)。 - 回滚路径见各专题 SOP 第 7 章与对应
backup/README.md台账。
6. 恢复验证¶
| 判据 | 命令 | 预期 |
|---|---|---|
| 无漂移 | .venv/bin/python main.py -c config/lsf_deploy.yaml --drift |
退出码 0,全阶段「无漂移」 |
| 幂等复跑 | .venv/bin/python main.py -c config/lsf_deploy.yaml |
全阶段「零变更跳过」 |
| 集群状态 | bhosts -w(经管理员) |
3 台 work ok + 2 master 与 hpc-submit closed_Full/MAX=0 |
| 作业链路 | 从 hpc-submit 提交作业 |
终态 DONE,EXEC_HOST 落在 lsf-work-0x |
| 巡检 timer | systemctl is-active lsf-health.timer lsf-user-sync.timer |
active active |
7. 复盘¶
有效的做法
- 部署器幂等 + 独立只读漂移检测:每次修复后可复跑验证,避免「修完不知道是否留了半状态」。
- 停机 / 重启前置门禁(
bjobs -u all无RUN才动):failover 与升级类高危动作未造成作业损失。 - 判据改用系统真实标识形态(
bhosts STATUS=ok而非lshosts;systemctl cat而非 sysv 脚本 存在性):第 9、5 条正是「判据选错导致假 done」。
拖慢恢复的做法
- 幂等判断只看 primary:
/etc/lsf.sudoers只补了 master-01,其余 4 台长期缺失(第 23 条)。 2>/dev/null丢弃诊断输出,使 failover 首次误报「未接管」(第 17 条)。- 把
reconfig当成万能生效手段:LSF_ROOT_USER必须mbatchd restart(第 22 条)。 - 早期逐项探测未合并,单次
--dry-run达 382–433 条远端命令(2026-10-07 批量化后降至个位数量级)。
8. 行动项¶
| # | 行动项 | 责任人 | 期限 | 状态 |
|---|---|---|---|---|
| 1 | cgroup 作业级 cpu/mem 限制改用 FP15+ 二进制(介质受 IBM 侧阻断) | 项目负责人(等 IBM 放行) | 介质到位后 | 阻塞(外部) |
| 2 | 升级 FP15 时一并移除 5 台 cgroup v1 内核参数 | 项目负责人 | 同 1 | 待办 |
| 3 | 作业级 TMPDIR 指向本地 scratch |
项目负责人 | 2026-10-08 | 已闭环:LSB_JOB_TMPDIR=/local_scratch/users + LSB_SET_TMPDIR=Y,实测 TMPDIR=/local_scratch/users/<jobID>.tmpdir(0700,作业结束自动清理),见 tmpdir_inject_20261008/SOP.md |
来源:
/home/rain/Documents/LSF/lsf_ins/docs/INCIDENT-20260924-部署期故障排障台账.md| 最后更新:2026-10-08 03:49(由build/sync.py同步,请勿在站点侧修改)