跳转至

LSF master 节点排除计算(lsb.hosts MXJ=0)— 变更档案

一、背景

2026-10-06 核查「master 是否为计算节点」时确认:lsf-master-01/02 在 lsf.cluster.lsfce Host 段为 server=1,lsb.hosts 未为其单独设 MXJ(走 default MXJ=!),队列亦无 HOSTS 限制 ⇒ 两台 master 会被派发作业(bhosts MAX=4/2)。

主流规范要求 master(mbatchd / mbschd / master LIM)专用、不接计算作业(IBM KB 702979、7275359)。本集群 hpc-submit 已用同法(MXJ=0)排除,master 却未排除 —— 策略不一致,故按方案 A 补齐。

二、目标

# 目标 判据
1 两台 master 不接作业 bhosts -w 显示 closed_Full 且 MAX=0
2 work 节点调度不受影响 三台 work 仍 ok/MAX=8;冒烟作业派发到 lsf-work-0x 并 DONE
3 幂等 复跑写入动作输出 RESULT=IDEMPOTENT_SKIP,零变更
4 可回滚 备份就位,回滚后恢复 MAX=4/2

三、前置条件

  • 从操作机 root 免密 ssh 到 192.168.31.23(主 master)
  • /data/nfs/lsf/lsf/conf/lsbatch/lsfce/configdir 对 root 可写(实测 WRITABLE_ROOT=yes;目录属主 ldapadmin:root 755)
  • 集群无未完成作业:bjobs -u all → No unfinished job found(HANDOFF 红线②)
  • 共享配置管理员:ldapadmin

四、影响范围

项 内容
变更文件 /data/nfs/lsf/lsf/conf/lsbatch/lsfce/configdir/lsb.hosts(NFS 共享,6 台共用)
生效动作 badmin mbdrestart(仅重启 mbatchd,秒级;不动 LIM / sbatchd)
是否停服 不停服;重启窗口内无法提交/查询作业(本次执行时无作业)
槽位影响 集群可调度槽位由 16(4+2+8×3)降为 10(8×3)
不影响 master 的 mbatchd/LIM/res 角色、备机 failover 资格、submit 节点形态
不可逆环节 无;配置文件可由备份整体还原

五、分步操作

下列序列与本次实机执行完全等价,供阅读与复核。

步骤 1:备份(先备份后动手)

TS=20261006-153241
F=/data/nfs/lsf/lsf/conf/lsbatch/lsfce/configdir/lsb.hosts
cp -a "$F" "$F.bak.$TS"

预期:生成 lsb.hosts.bak.20261006-153241(3349 B)。失败则终止,不进入步骤 2。

步骤 2:幂等写入 MXJ=0(在 master-01 以 root 执行)

F=/data/nfs/lsf/lsf/conf/lsbatch/lsfce/configdir/lsb.hosts
if awk '$1=="lsf-master-01"{x=1} END{exit !x}' "$F"; then
  echo "RESULT=IDEMPOTENT_SKIP"
else
  awk 'BEGIN{d=0}
       /^hpc-submit/ && !d {print "lsf-master-01    0     ()      ()    ()     ()     ()            (Y)   # master 不接作业: MXJ=0";
                            print "lsf-master-02    0     ()      ()    ()     ()     ()            (Y)   # master 不接作业: MXJ=0"; d=1}
       {print}' "$F" > "$F.new"
  cat "$F.new" > "$F"; rm -f "$F.new"
  chown ldapadmin:root "$F"; chmod 644 "$F"
  echo "RESULT=MODIFIED"
fi

注意事项与坑:

  • 结尾必须用 cat "$F.new" > "$F" 而不是 mv:mv 会把属主从 ldapadmin 变成 root;改后仍显式 chown ldapadmin:root + chmod 644,与簇内其它 lsb.* 文件一致。
  • 插入点选在 hpc-submit 行之前,使「两台 master + submit 节点均不接作业」在一屏内可见。
  • 幂等判据为 awk '$1=="lsf-master-01"' 判存在性,复跑即 IDEMPOTENT_SKIP,不产生重复行。
  • 只动 Begin Host 段,不碰 default 行(default 管理其余所有主机,误改影响面最大)。

预期:首次 RESULT=MODIFIED;复跑 RESULT=IDEMPOTENT_SKIP。

步骤 3:生效

su - ldapadmin -s /bin/bash -c "bash -lc 'yes | badmin mbdrestart'"

坑:mbdrestart 是交互命令,必须喂 y;本次只改 lsb.*,故只需 mbdrestart,不需要 lsadmin reconfig(后者用于 lsf.cluster.* 变更)。

预期:mbatchd parallel restart initiated。失败判断:命令报错或 bhosts 长时间不可用 → 见第七章回滚。

步骤 4:验证

见第六章;核心一条:

su - ldapadmin -s /bin/bash -c "bash -lc 'bhosts -w'"

六、验证

# 命令 预期
1 bhosts -w lsf-master-01 closed_Full MAX=0、lsf-master-02 closed_Full MAX=0;三台 work ok MAX=8;hpc-submit closed_Full MAX=0
2 bqueues / badmin showstatus 队列与调度器状态正常,无异常条目
3 冒烟提交 bsub -q normal -o /tmp/smoke_master_noexec.out sleep 3 → bhist -l <jobid> 作业 DONE,且 Dispatched 1 Task(s) on Host(s) <lsf-work-0x>
4 重跑步骤 2 RESULT=IDEMPOTENT_SKIP(零变更)

2026-10-06 实测结果:四项全部通过。

  • bhosts -w:lsf-master-01 / lsf-master-02 均为 closed_Full、MAX=0;lsf-work-01~03 均 ok、MAX=8。
  • 冒烟作业 <944>(ldapadmin 提交):Submitted from host <lsf-master-01> → Dispatched ... on Host(s) <lsf-work-02> → Done successfully(总时长 4s)。
  • 幂等复跑输出 RESULT=IDEMPOTENT_SKIP。

七、回滚

备份位置:

  • 同目录(集群惯例,回滚直接可用):/data/nfs/lsf/lsf/conf/lsbatch/lsfce/configdir/lsb.hosts.bak.20261006-153241
  • 交付物目录副本:backup/data/nfs/lsf/lsf/conf/lsbatch/lsfce/configdir/lsb.hosts.bak.20261006-153241
  • 台账:backup/README.md
F=/data/nfs/lsf/lsf/conf/lsbatch/lsfce/configdir/lsb.hosts
cp -a "$F.bak.20261006-153241" "$F"
chown ldapadmin:root "$F"; chmod 644 "$F"
su - ldapadmin -s /bin/bash -c "bash -lc 'yes | badmin mbdrestart'"
su - ldapadmin -s /bin/bash -c "bash -lc 'bhosts -w'"   # 预期 master-01 MAX=4 / master-02 MAX=2

回滚触发条件(任一即回滚,不靠临场判断):bhosts 出现任一 work 节点非 ok;bqueues / bjobs 报错;冒烟作业不能 DONE,或落到 master 节点执行。

八、风险说明

风险 缓解措施
集群可调度槽位由 16 降至 10 当前作业规模下无实际影响;后续扩容应新增 work 节点,而非复用 master
误改 default 行会影响全部主机 本次仅在 hpc-submit 前插入两行,未触碰 default
与部署器的一致性 已部署器化:本形态落入部署器(lsf.noexec_hosts + 阶段7-8 判据与登记,见第九章);--drift 退出码 0、主流程零变更。未部署器化前 --drift 报阶段7-8 漂移、主流程必失败
mbatchd 重启期间无法提交/查询 执行前确认无未完成作业;重启为秒级,本次收敛轮询 1 次即通过

九、部署器化(2026-10-06 追加)

首次实施走的是手工路径(直接改 NFS 配置 + badmin mbdrestart),未进入部署器期望态,后果:

  • main.py --drift 报错:阶段7-8(up): 漂移主机 ['192.168.31.23'],退出码 1;
  • 主流程会在阶段7-8 判失败:其判据是「bhosts 中 STATUS=ok 的主机数 ≥ exec_nodes 数(5)」, 而 noexec 主机天然是 closed_Full —— badmin hopen 对它无效(实测 Open <lsf-master-01> done 但状态仍 closed_Full/MAX=0),故 ok 数恒为 3,180s 后 启动后 180s 内 bhosts ok 仅 3 台/期望 5。

已把该形态固化进部署器:

文件 改动
config/lsf_deploy.yaml(及 .example) 新增 lsf.noexec_hosts: [lsf-master-01, lsf-master-02]
utils/lsf_config.py 新增 AWK_REPLACE、rewrite_shared_host_line()(幂等写共享配置、保留属主权限)、noexec_hosts()
stages/cluster_up.py ① expected_hosts 改为「提供执行位的节点数」;② probe 增 noexec 项(校验 lsb.hosts 中 MXJ==0);③ execute 增登记步骤(备份 → 改写 → badmin mbdrestart);④ 启动轮询的 hopen 跳过 noexec 主机
stages/submit_node.py _rewrite_shared_file 改为调用共用实现(行为不变)

验证(2026-10-06 实测):

cd /home/rain/Documents/LSF/lsf_ins/deploy/lsf
.venv/bin/python main.py -c config/lsf_deploy.yaml --stage up --dry-run
#   预期:阶段7-8 状态已一致,无漂移(全跳过)
.venv/bin/python main.py -c config/lsf_deploy.yaml --drift
#   预期:退出码 0;18 个阶段全部「无漂移」,无「漂移主机」行
.venv/bin/python main.py -c config/lsf_deploy.yaml
#   预期:退出码 0;全阶段「零变更跳过」(幂等复跑)

从零验证(2026-10-06,全程交给部署器):先把手工作出的两行退回 (cp -a lsb.hosts.bak.20261006-153241 lsb.hosts + mbdrestart,bhosts 恢复 ok/MAX=4/MAX=2),再由部署器自主完成:

步骤 命令 实测结果
① 检测 main.py --drift 退出码 1,阶段7-8(up): 漂移主机 ['192.168.31.23']
② 修复 main.py --stage up 退出码 0;日志 已登记 lsf-master-01/02:lsb.hosts MXJ=0(不提供执行位) → badmin mbdrestart
③ 结果 bhosts -w;读 lsb.hosts 两台 master closed_Full/MAX=0;Host 段出现两行 # no-exec: MXJ=0 不接作业
④ 复核 main.py --drift 退出码 0,18 个阶段全部「无漂移」

即:该形态已完全由部署器产生,不再依赖手工步骤。

结论:部署器部署出来的集群,两台 master 即不参与计算;--drift 与主流程复跑均一致。 回滚:实现体与配置的备份见 backup/README.md 的 deploy/lsf/... 段。

附录 A:交付物清单

文件 说明
lsf_ins/master_noexec/SOP.md 本文(变更档案)
lsf_ins/master_noexec/backup/README.md 备份台账
lsf_ins/master_noexec/backup/data/nfs/lsf/lsf/conf/lsbatch/lsfce/configdir/lsb.hosts.bak.20261006-153241 备份副本

变更留痕:lsf_ins/docs/HANDOFF.md §3、lsf_ins/docs/RUNBOOK.md「配置管理」节。


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