LSF 集群运行手册(RUNBOOK)¶
服务:IBM Spectrum LSF Suite Community Edition 10.2.0.12(LSF 10.1 FP12) 部署档案见 SOP.md;本文面向日常运维与值班,命令均可直接粘贴。
目录¶
- 服务概览 / 2. 接入与凭据 / 3. 日常速查表 / 4. 日常操作 / 5. 配置管理 /
- 备份与恢复 / 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.hostsMXJ=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)、 LDAP192.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、fairshareBegin 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同步,请勿在站点侧修改)