跳转至

LSF 集群运行手册(RUNBOOK)

服务:IBM Spectrum LSF Suite Community Edition 10.2.0.12(LSF 10.1 FP12) 部署档案见 SOP.md;本文面向日常运维与值班,命令均可直接粘贴。

目录

  1. 服务概览 / 2. 接入与凭据 / 3. 日常速查表 / 4. 日常操作 / 5. 配置管理 /
  2. 备份与恢复 / 7. 监控与告警 / 8. 故障处置 / 9. 安全与权限 / 10. 容量与性能 / 11. 附录

1. 服务概览

  • 干什么:EDA 学习集群的批处理调度(bsub 提交 → 排队 → 分发到节点执行)。
  • 拓扑【已确认】:
主机 IP 角色
lsf-master-01 192.168.31.23 主 master(mbatchd/lim/res/sbatchd + 健康巡检 + 用户同步);不接作业(lsb.hosts MXJ=0)
lsf-master-02 192.168.31.24 备 master(candidate);不接作业(同上)
lsf-work-01~03 192.168.31.25~27 计算节点(8C/15G 每台),集群唯一的执行节点
hpc-submit 192.168.31.28 submit 节点(只提交不执行;lsb.hosts 中 MXJ=0,bhosts 显示 closed_Full/MAX=0)

执行节点现有 3 台(work-01~03);两台 master 保留 LSF 守护与管理角色但不接作业 (2026-10-06 起,lsb.hosts MXJ=0,见 ../master_noexec/SOP.md)。涉及 LSF 守护 / /etc/lsf.sudoers / sssd / 包的批量操作,submit 节点同样适用(即 6 台;批量循环时把 28 一并加入 ip 列表)。

  • 依赖:NFS 宿主机 192.168.31.249(LSF_TOP=/data/nfs/lsf/lsf、家目录 /data/nfs/home、 作业共享目录 /projects)、节点本地盘 /local_scratch(宿主 KVM 虚盘,仅 .25–.27)、 LDAP 192.168.31.10(用户与认证)。任一依赖失效的业务影响:LSF_TOP 不可见→全集群停摆; /projects 不可见→引用该目录的作业失败(.25–.28 受管,hard 挂载,见 ../projects_mount/SOP.md); /local_scratch 未挂载→引用 $LOCAL_SCRATCH 的作业失败(见 ../local_scratch/SOP.md); LDAP 不可达→新登录失败(已登录会话靠 sssd 缓存存活)。
  • 重要性:个人学习集群(非生产),但与 Slurm 集群共用宿主机 NFS 与 LDAP——改动宿主机导出时注意 Slurm 侧。

2. 接入与凭据

  • 登录:任一节点 root(操作机已免密);普通用户用 LDAP 账号(rain01/cloud01/cy01/david01/lws01/cq01/ldapadmin…)。
  • 账号清单:
账号 用途
root 系统管理、LSF 守护启停(但 b* 查询类命令会被拒,见场景3)
ldapadmin LSF_ADMINS 之首:一切 b* 命令(bsub/bqueues/badmin…)用它执行
rain01 等 9 个 LDAP 用户 业务提交(loginShell=/bin/csh,脚本调用需 -s /bin/bash)
  • 凭据取用(文档不写值): bash # LDAP bind 密码(部署器与同步脚本用) sudo cat /home/rain/Documents/LSF/lsf_ins/deploy/lsf/config/credentials.yaml # 操作机 600 ssh root@192.168.31.23 "cat /etc/lsf-usermgmt/ldap.pass" # 节点侧 600 # eauth 密钥 ssh root@192.168.31.23 "cat /etc/lsf.sudoers"
  • 客户端接入示例: bash ssh root@192.168.31.23 # 操作机→任一节点 su - rain01 -s /bin/bash -c "bash -lc 'bsub sleep 60'" # 以 LDAP 用户提交

3. 日常速查表

以下命令在 master-01 执行;A='su - ldapadmin -s /bin/bash -c'(b* 类必须经它)。

ssh root@192.168.31.23
source /data/nfs/lsf/lsf/conf/profile.lsf      # 设置 LSF 环境(或加进 .bashrc)
A="su - ldapadmin -s /bin/bash -c"

$A "bash -lc 'bhosts -w'"           # 预期 3 行 work ok + 3 行 closed_Full/MAX=0(2 master + submit)
$A "bash -lc 'bqueues'"             # 队列状态
$A "bash -lc 'bjobs -a -w'"         # 当前+近期作业
$A "bash -lc 'bhist -w | tail'"     # 作业历史
lsid                                # 集群/主master信息(root 可用,ls* 不受限)
lshosts                             # 节点静态资源
tail -f /data/nfs/lsf/lsf/log/mbatchd.log.lsf-master-01   # 主master日志
systemctl is-active lsfd lsf-health.timer lsf-user-sync.timer
ssh root@192.168.31.25 'findmnt -n -o SOURCE,TARGET /local_scratch; df -h /local_scratch | tail -1'  # 执行节点本地层

4. 日常操作

启动/停止/重启 LSF(6 台都要——含 hpc-submit,其 lim/res/sbatchd 同属 LSF 守护; lsfstartup 在本环境有交互空转坑【已确认】,勿用):

# 停(高危:中断全部作业,先确认 bjobs 无 RUN)
for ip in 23 24 25 26 27 28; do ssh root@192.168.31.$ip "systemctl stop lsfd"; done
# 起
for ip in 23 24 25 26 27 28; do ssh root@192.168.31.$ip "systemctl start lsfd"; sleep 3; done
# 等待收敛后必须 hopen(停启可能把节点标成 closed_LIM)
su - ldapadmin -s /bin/bash -c "bash -lc 'badmin hopen lsf-master-02 lsf-work-01 lsf-work-02 lsf-work-03'"
# 验证:bhosts -w 3 行 work ok + 3 行 closed_Full/MAX=0(2 master + submit 节点均不接作业)
# (起服后 1-2 分钟 LIM 才互相发现,勿急)

单节点重启:ssh root@<节点> "systemctl restart lsfd";随后若 bhosts 显示该节点 closed/closed_LIM,用上面的 badmin hopen <节点> 恢复。

主备 failover 演练(高危:会真实停止主 master 的 LSF;须先确认无 RUN):

cd /home/rain/Documents/LSF/lsf_ins/deploy/lsf
.venv/bin/python main.py --config config/lsf_deploy.yaml --failover-test

要点:脚本会先暂停 lsf-health.timer(不暂停的话,巡检自愈会在 1 分钟内把停掉的主 master 拉回,备机就没有接管窗口);停主 master 后等待备机接管(≤600s,实测约 2 分钟),随后自动恢复 主 master、执行 badmin hopen 并校验 bhosts 全 ok;失败路径也会自动恢复主 master。 原理与根因见 SOP 第九章。

改配置生效:改 conf/lsf.conf、lsb.* 后(改前先 cp -a X X.bak.$(date +%Y%m%d-%H%M%S)):

su - ldapadmin -s /bin/bash -c "bash -lc 'yes y | badmin reconfig'"   # 批处理类
su - ldapadmin -s /bin/bash -c "bash -lc 'yes y | lsadmin reconfig'"  # lim/res类(ls*其实root可用)

排障入口:root 直接 ssh root@192.168.31.25(节点间已全互信)。

5. 配置管理

文件(均在 NFS /data/nfs/lsf/lsf/) 管什么 生效方式
conf/lsf.conf LSF_RSH/STRICT_CHECKING/LSF_ADMINS/LSF_MASTER_LIST;LSB_JOB_TMPDIR+LSB_SET_TMPDIR(作业级 TMPDIR → /local_scratch/users) 按参数而定:LSB_*TMPDIR 须 bctrld restart sbd all(mbdrestart/reconfig 均无效);其余改后重启 lsfd(6 台)
conf/lsf.cluster.lsfce 集群主机拓扑 lsadmin reconfig
conf/lsbatch/lsfce/configdir/lsb.params 调度参数(KEY = value 带等号) badmin reconfig
.../configdir/lsb.users 用户限额(Begin User 段)与 fairshare(Begin Share 段) badmin reconfig
.../configdir/lsb.queues 队列 badmin reconfig
.../configdir/lsb.hosts 主机级 MXJ(lsf-master-01/02、hpc-submit = 0 → 不接作业) badmin mbdrestart
节点 /etc/sssd/sssd.conf LDAP 认证(600) systemctl restart sssd
节点 /etc/lsf.sudoers eauth 密钥(6 台必须一致) 改后重启 lsfd
部署器 deploy/lsf/config/lsf_deploy.yaml 部署器的全部期望态(含 lsf.noexec_hosts:不提供执行位的主机,
阶段7-8 负责登记其 lsb.hosts MXJ=0)
重跑部署器生效

易错点:lsb.params 必须 KEY = value;lsb.users 的 sed ^End User 会误伤 End UserGroup; 改共享文件前先备份,且改完必须 reconfig,否则运行态与文件不一致。

6. 备份与恢复

  • 备份位置与台账:../deploy/lsf/backup/README.md(部署器)、 backup/README.md(docs/ 三件套)、../master_noexec/backup/README.md(master 排除计算)。
  • 手工备份模板(改配置前必做): bash cd /data/nfs/lsf/lsf/conf && cp -a lsf.conf lsf.conf.bak.$(date +%Y%m%d-%H%M%S)
  • 恢复:cp X.bak.<ts> X → 对应 reconfig/重启 → 验证(见场景)。
  • 部署器级回滚:cd deploy/lsf && .venv/bin/python main.py --config config/lsf_deploy.yaml --rollback。

7. 监控与告警

  • 内置巡检(master-01):lsf-health.timer 每 15 分钟跑 /usr/local/bin/lsf_health_check.sh ——检查 lim/res/mbatchd 进程、NFS 挂载、磁盘≥85% 告警、节点 UNKWN 自动 badmin hclose(记 /var/lib/lsf-health/drained,恢复自动 hopen)。 bash journalctl -u lsf-health.service --since '1 day ago' | tail # 每次执行记录 tail /var/log/lsf-health.log # ALERT/OK 台账 systemctl status lsf-health.timer # 必须 active
  • 用户同步:lsf-user-sync.timer 每日 03:30;journalctl -u lsf-user-sync.service 看 CREATE/UPDATE/DELETE。
  • 关键日志:/data/nfs/lsf/lsf/log/mbatchd.log.<host>、lim.log.<host>、res.log.<host>、 sbatchd.log.<host>;巡检告警关键字 ALERT。
  • 重点盯:timer 掉 active;bhosts 出现 unavail/closed;磁盘 ALERT disk-usage。

8. 故障处置

场景1:bhosts 显示节点 unavail / 作业不派发

诊断 1. su - ldapadmin -s /bin/bash -c "bash -lc 'bhosts -w'" → 哪台非 ok 2. ssh root@<该节点> "pgrep -x lim && pgrep -x sbatchd" → 守护是否在 3. ssh root@<该节点> "tail -5 /data/nfs/lsf/lsf/log/lim.log.<该节点>" → 找死因

处置:守护没在 → systemctl start lsfd;起来了仍非 ok → badmin hopen <主机>(经 ldapadmin)。 验证:bhosts -w 该行回到 ok,且 1 分钟内有 NJOBS 派发。

场景2:任何 LSF 命令报 libnsl.so.1: cannot open shared object file

诊断:ldd /data/nfs/lsf/lsf/10.1/linux2.6-glibc2.3-x86_64/bin/lshosts | grep nsl 处置:dnf install -y libnsl(6 台;libnsl2 不行,它只给 .so.3)。 验证:ldconfig -p | grep libnsl.so.1 有输出,bqueues 恢复。

场景3:b* 命令报 User permission denied

背景【已确认】:2026-09-24 第三轮变更已修复该问题——根因是 LSF 安全默认值 (lsf.conf 缺 LSF_ROOT_USER,默认禁止 root 从命令行执行 LSF 命令)。现已设 LSF_ROOT_USER=Y 并重启 mbatchd。本场景保留,供复发或新节点排查。

诊断 1. 看是谁被拒:ls*(lshosts/lsload/lsid)正常而 b* 失败 → 问题在 eauth 认证链,与 LIM 无关 2. grep -n 'LSF_ROOT_USER' $LSF_ENVDIR/lsf.conf → 缺该行或值非 Y 时 root 必被拒 3. 逐台核对认证文件是否齐备且一致: bash for ip in 23 24 25 26 27 28; do printf '%s ' $ip; ssh root@192.168.31.$ip \ "grep '^LSF_EAUTH_KEY=' /etc/lsf.sudoers | md5sum | cut -c1-8; stat -c %a /etc/lsf.sudoers"; done 预期:6 行摘要一致、权限均为 600 4. 服务端留痕:grep -E 'verifyEAuth|userok' $LSF_LOGDIR/mbatchd.log.lsf-master-01 (eauth 认证失败会记录 userok: eauth authentication failed)

处置 - 仅 root 被拒 → 在共享 conf/lsf.conf 追加 LSF_ROOT_USER=Y(改前备份),然后 su - ldapadmin -s /bin/bash -c "bash -lc 'yes y | badmin mbdrestart'" ——必须 mbatchd restart,reconfig 对该参数无效 - 某台连 ldapadmin 也被拒 → 该台 /etc/lsf.sudoers 缺失或密钥不一致:从 master-01 scp 补齐并 chmod 600 - 所有用户都失败 → 认证三件套被破坏,按 SOP 第五章阶段3-6 末尾重做: hostsetup --setuid + 6 台 /etc/lsf.sudoers 一致 + <machdep>/bin/eauth 软链存在

验证:6 台任一节点下,root 与 ldapadmin 的 bqueues 均能输出队列表。

场景4:LSF 起不来 / lsfstartup 卡在 Error(s) found ... continue? 循环

诊断:ls -la /data/nfs/lsf/lsf/log/Install.err(历史残留);pgrep -af lsfstartup(挂起进程) 处置:

pkill -9 -f '[l]sfstartup'                          # 杀挂起
rm -f /data/nfs/lsf/lsf/log/Install.err /data/nfs/lsf/lsf/log/Install.log
for ip in 23 24 25 26 27 28; do ssh root@192.168.31.$ip "systemctl start lsfd"; done
su - ldapadmin -s /bin/bash -c "bash -lc 'badmin hopen lsf-master-02 lsf-work-01 lsf-work-02 lsf-work-03'"

验证:bhosts -w 全 ok。勿用 lsfstartup(本环境会空转,见 SOP R5)。

场景5:用户 su - rain01 报错/进不了预期 shell

诊断:getent passwd rain01(无输出=sssd 挂);getenforce;systemctl status sssd 处置:sssd 死 → systemctl restart sssd;LDAP 侧问题 → 检查 389 可达 (timeout 5 bash -c 'cat < /dev/null > /dev/tcp/192.168.31.10/389'); authselect current 非 sssd + with-mkhomedir → authselect select sssd with-mkhomedir --force (执行前必须先确认 getent 正常,否则 SSH 可能失效;异常立即 authselect select minimal --force 回退)。 注意 LDAP 用户 shell 是 csh,脚本里用 su - <用户> -s /bin/bash -c。

场景6:从 submit 节点(hpc-submit)提交被拒

症状:在 192.168.31.28 上 bsub 返回 User permission denied. Job not submitted.; mbatchd 日志(/data/nfs/lsf/lsf/log/mbatchd.log.lsf-master-01)出现 userok: eauth authentication failed for <user>/192.168.31.28。

诊断 1. eauth 文件权限与 key 摘要(两处必须一致,权限必须 600) bash ssh root@192.168.31.28 "stat -c '%a' /etc/lsf.sudoers; grep '^LSF_EAUTH_KEY=' /etc/lsf.sudoers | md5sum" ssh root@192.168.31.23 "grep '^LSF_EAUTH_KEY=' /etc/lsf.sudoers | md5sum" 预期:均输出 600 与相同的 md5 摘要。 2. 本机守护是否齐全 bash ssh root@192.168.31.28 "for d in lim res sbatchd; do pgrep -x \$d >/dev/null && echo \$d=ok || echo \$d=down; done" 预期:三行均 ok。

处置:权限非 600 → ssh root@192.168.31.28 "chmod 600 /etc/lsf.sudoers"; key 摘要不同或缺守护 → 重跑阶段 14(沿用集群 key、置 600、拉起守护并重做冒烟):

cd /home/rain/Documents/LSF/lsf_ins/deploy/lsf
.venv/bin/python main.py -c config/lsf_deploy.yaml --stage submit

验证:bsub -o /tmp/.x.out sleep 5 返回 Job <...>;bjobs -a -o "stat exec_host" 中 EXEC_HOST 不得出现 hpc-submit(该主机 MXJ=0,永不接作业)。

场景7:作业报 /local_scratch 不存在 / 不可写

症状:作业日志出现 /local_scratch/...: No such file or directory,或写 $LOCAL_SCRATCH 失败。

诊断 1. 三台执行节点是否挂载(预期 /dev/vdb → /local_scratch,xfs) bash for h in 25 26 27; do ssh root@192.168.31.$h \ 'findmnt -n -o SOURCE,TARGET,FSTYPE /local_scratch || echo "未挂载"'; done 2. 部署器视角是否漂移(预期含 阶段15(local-scratch): 无漂移,rc=0) bash cd ~/Documents/LSF/lsf_ins/deploy/lsf .venv/bin/python main.py -c config/lsf_deploy.yaml --drift; echo "rc=$?" 3. 目录权限(预期 drwxrwxrwt) bash ssh root@192.168.31.25 'ls -ld /local_scratch/users' 4. 作业内 TMPDIR 是否指向本地 scratch(由 conf/lsf.conf 的 LSB_JOB_TMPDIR + LSB_SET_TMPDIR 控制) bash grep -n 'LSB_JOB_TMPDIR\|LSB_SET_TMPDIR' /data/nfs/lsf/lsf/conf/lsf.conf # 预期:LSB_JOB_TMPDIR=/local_scratch/users 与 LSB_SET_TMPDIR=Y # 缺任一行 → 先跑部署器阶段3-6 补齐,再 `bctrld restart sbd all`(不重启 sbatchd 不生效)

处置 - 未挂载 / 有漂移 → 由部署器收敛,勿手工挂载: bash cd ~/Documents/LSF/lsf_ins/deploy/lsf .venv/bin/python main.py -c config/lsf_deploy.yaml --stage local-scratch - 节点重启后掉挂载 → 查 fstab 是否含 UUID=… /local_scratch xfs defaults,noatime 0 0 (按 UUID 绑定,不依赖设备名);缺则同上跑部署器补齐。 - 权限异常 → chmod 1777 /local_scratch/users,随后跑一次 --drift 确认未再漂移。

验证:findmnt /local_scratch 有输出且 df -h /local_scratch 显示 50G; 作业内 mkdir -p $LOCAL_SCRATCH && echo ok 成功;echo $TMPDIR 预期 /local_scratch/users/<jobID>.tmpdir(0700,LSF 自动创建、作业结束自动删除)。

9. 安全与权限

  • 凭据:deploy/lsf/config/credentials.yaml(操作机 600)、/etc/lsf-usermgmt/ldap.pass(节点 600)、 /etc/sssd/sssd.conf(600)、/etc/lsf.sudoers(含 eauth key)。不入 git、不进文档、不进命令行。
  • 轮换 LDAP bind 密码:改操作机 credentials.yaml 与 6 台 /etc/lsf-usermgmt/ldap.pass + /etc/sssd/sssd.conf 的 ldap_default_authtok → systemctl restart sssd(6 台)→ 跑一次同步脚本验证。
  • eauth key 轮换:6 台同步改 /etc/lsf.sudoers 的 LSF_EAUTH_KEY → 6 台 systemctl restart lsfd。
  • SELinux 当前 Permissive/Disabled(部署时关闭,备份见台账);firewalld 已禁用——依赖内网隔离, 对外暴露前必须恢复防火墙并放行 7858-7875 与 6878/6881/6882/6891。

10. 容量与性能

  • CE 版硬限制:≤10 主机、单/双路 ≤64 核/台、≤2500 活动作业、每台 ≤1 GPU、App Center ≤10 并发。 当前:3 台执行节点(lsf-work-01~03,8 核/台 = 24 核)/ JL/U 4-8,余量大 (另 2 台 master 与 hpc-submit 均 MAX=0,不接作业)。
  • 已调优基线(阶段10):MBD_SLEEP_TIME = 15(派发间隔,短作业吞吐)、JOB_ACCEPT_INTERVAL = 0、 用户默认 MAX_JOBS=100 / JL/P=5、fairshare Begin Share Default 100。
  • 已知瓶颈:FP12 二进制(linux2.6-glibc2.3)只认 cgroup v1,而 Rocky 9 默认 cgroup v2-only, 作业级 cpu/mem 硬限制不可用。切回 cgroup v1 的兜底已于 2026-09-24 实测且无效 (RHEL9 systemd 仍保留 cgroup2 挂载,LSF 检测到 v2 即放弃;根因见 cgroup_v1/SOP.md 第九章)。 唯一解法=升级 FP15+ 二进制(介质待 IBM 放行,见 fp15_upgrade/SOP.md)。 现状:5 台已带 systemd.unified_cgroup_hierarchy=0 运行(无收益,待升级时一并移除)。
  • 磁盘:LSF_TOP 与日志在宿主机 HDD(/data,1.3T 可用);巡检对挂载点 ≥85% 告警。

11. 附录

  • 术语:LSF_TOP 共享安装目录;lsfd.service=systemd 单元(等价 sysv 的 lsf);LSF_ADMINS=可执行 b* 管理的账号列表;closed_LIM=被 LIM 层关闭(hopen 恢复);CE=Community Edition。
  • 相关文档:SOP.md(变更档案与排障台账)、HANDOFF.md(当前状态快照)、 backup/README.md(备份台账)。
  • 修订记录:
日期 修改人 内容
2026-09-24 部署执行人 首版(随 13 阶段部署交付)
2026-09-24 部署执行人 第二轮:补主备 failover 演练操作(第4章)
2026-09-24 部署执行人 第三轮:场景3 重写(root b* 权限已修复,补 LSF_ROOT_USER 与 mbatchd restart 生效方式、认证文件核对)

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