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:root755)- 集群无未完成作业:
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同步,请勿在站点侧修改)