SOP — LSF Suite CE 10.2.0.12(FP12)原地升级至 10.2.0.15(FP15)¶
- 变更类型:C 类生产变更(改变系统状态,需停机)
- 执行窗口:介质到位后执行;停机预计十几分钟(含启动与冒烟)
- 实现体:
/home/rain/Documents/LSF/lsf_ins/deploy/lsf/的--upgrade子命令 - 文档地位:第 5 章为实现等价的操作序列,供人工复核与兜底;以实现体为准
一、背景¶
集群现运行 IBM Spectrum LSF CE 10.1.0.12(FP12),二进制平台目录为 linux2.6-glibc2.3-x86_64。
lim 日志持续提示该平台包不支持 cgroup v2(见 docs/SOP.md 风险 R1),
导致作业级 cpu/mem 硬限制可能不生效;同时 Rocky 9.8 不在 FP12 官方支持列表内。
IBM 已将 CE 刷新到与 Service Pack 15 同等水平(包名 lsfsce10.2.0.15-x86_64),
其关键变化为:二进制升级到 linux3.10-glibc2.17-86_64(支持 cgroup v2)、
新增 RHEL 9.5 / SLES 15.6 支持、引入与 FP15 兼容的新 lsfd.service、附带 LSF Web Services。
本次变更即把这个 CE 包原地升级进现有共享 LSF_TOP。
二、目标¶
| # | 可验证状态 |
|---|---|
| 1 | lsid 显示社区版 10.1.0.15(FP15) |
| 2 | 新平台目录 /data/nfs/lsf/lsf/10.1/linux3.10-glibc2.17-x86_64/ 就位,旧平台目录保留 |
| 3 | bhosts -w 5 台全 ok;管理员/LDAP 用户/root 三种身份均可提交作业并 DONE |
| 4 | 5 台 /etc/lsf.sudoers 的 LSF_STARTUP_PATH 指向新平台 etc,LSF_EAUTH_KEY 全节点一致且未轮换 |
| 5 | 5 台 /usr/lib/systemd/system/lsfd.service 的 ExecStart/ExecStop 指向新平台 etc/lsf_daemons |
| 6 | lim 日志不再出现「不支持 cgroup v2」提示;LSF_LINUX_CGROUP_ACCT=Y 保持 |
| 7 | 部署器复跑 --upgrade(或 install 阶段)达「零变更、全跳过」 |
三、前置条件¶
- 介质:
lsfsce10.2.0.15-x86_64.tar.gz(约 1.7 GB)已放到操作机/data/nfs/lsf/src/(即 NFS 导出目录)。 来源:IBM Fix Central → 产品IBM Spectrum LSF Suite Community Edition→ 版本 10.2 → 平台 Linux x86_64 → Fix Pack 15 (需 IBM ID 登录;下载后不要改文件名)。 - 配置:
deploy/lsf/config/lsf_deploy.yaml已切到 FP15 三件套(install_package/installer_dir/host_type/binary_tar)。 - 权限:操作机对
/data/nfs/lsf/src有sudo -n权限;5 台节点 root SSH 免密可用。 - 空间:
/data可用 ≥5 GB(新包 1.7 GB + 解压约 3 GB);当前 1.3 TB 可用。 - 执行前检查:
bhosts -w5/5ok、双 timeractive、bjobs -u all无RUN作业(有则停手,见红线②)。
四、影响范围¶
- 主机:
192.168.31.23/24(master-01/02)、192.168.31.25/26/27(work-01~03),共 5 台;共享LSF_TOP在 NFS(宿主机 .249)。 - 是否停服:是。全集群 LSF 停机,期间不能提交/查询作业;Slurm 集群不受影响。
- 窗口:停机从「停用队列」起算,到「作业冒烟通过」为止;含
lsfinstall与 5 台hostsetup。 - 在跑作业:停机前必须为空(
bjobs -u all无RUN);有作业时实现体直接拒绝,--force才放行。 - 不可逆点:无。升级不删除旧平台目录,
conf/与全部节点文件均已备份,可整体回退(见第七章)。
五、分步操作¶
对应实现体:
deploy/lsf/deployer.py::cmd_upgrade、deploy/lsf/stages/lsf_install.py下列命令忠实反映实现体步骤,供复核与手工兜底;以实现体为准。
5.1 介质校验(人工,操作机 .250)¶
ls -lh /data/nfs/lsf/src/lsfsce10.2.0.15-x86_64.tar.gz # 预期 ~1.7G
sha256sum /data/nfs/lsf/src/lsfsce10.2.0.15-x86_64.tar.gz # 记录留档,与下载页比对
tar -tzf /data/nfs/lsf/src/lsfsce10.2.0.15-x86_64.tar.gz | head # 预期顶层 lsfsce10.2.0.15-x86_64/
tar -tzf /data/nfs/lsf/src/lsfsce10.2.0.15-x86_64.tar.gz \
| grep -E 'lsf10.1_lsfinstall.*tar.Z|lsf10.1_linux.*tar.Z' # 预期 安装器 + linux3.10-glibc2.17-x86_64
5.2 一键执行升级(推荐路径)¶
cd /home/rain/Documents/LSF/lsf_ins/deploy/lsf
.venv/bin/python main.py --config config/lsf_deploy.yaml --upgrade
预期:日志依次出现「已停用全部队列」「停止 LSF 守护 × 5」「升级安装(阶段3-6)」 「启动集群(阶段7-8)」「队列已恢复 rc=0」「✅ 升级流程完成」,退出码 0。
5.3 实现体内部等价序列(复核 / 手工兜底用)¶
# ① 红线检查:有 RUN 作业即停手(实现体在停机前自动执行,无 RUN 才继续)
ssh root@192.168.31.23 'su - ldapadmin -s /bin/bash -c "bash -lc \"bjobs -u all\""'
# ② 停用全部队列,防止升级期间派发新作业(高危:影响提交)
ssh root@192.168.31.23 'su - ldapadmin -s /bin/bash -c "bash -lc \"badmin qinact all\""'
# ③ 逐台停守护:先 worker 后 master,与启动顺序相反(高危:停服)
for h in 27 26 25 24 23; do ssh root@192.168.31.$h "systemctl stop lsfd"; done
# ④ 解压新包到 NFS(实现体只解外层,二进制 tar.Z 交给安装器)
sudo -n tar -xzf /data/nfs/lsf/src/lsfsce10.2.0.15-x86_64.tar.gz -C /data/nfs/lsf/src
sudo -n sh -c 'cd /data/nfs/lsf/src/lsfsce10.2.0.15-x86_64/lsf && \
zcat lsf10.1_lsfinstall_linux_x86_64.tar.Z | tar xf -' # 解出 lsfinstall
# ⑤ 兼容冒烟:解出新平台二进制跑 res -V,不通过即中止(实现体自动执行)
# 实现体落标记 /data/nfs/lsf/src/.res_smoke_ok.lsfsce10.2.0.15-x86_64.tar.gz
# ⑥ 升级安装(实现体在 master-01 执行;LSF_TOP 下已有 conf 时自动按升级模式渲染
# install.config —— 不写 LSF_ADD_SERVERS)
cd /data/nfs/lsf/src/lsfsce10.2.0.15-x86_64/lsf/lsf10.1_lsfinstall
yes 1 | ./lsfinstall -f install.config # 预期:备份 conf 后装出新平台目录
# ⑦ 逐台 hostsetup,重建 lsfd.service 指向新平台(高危:覆盖系统单元)
for h in 23 24 25 26 27; do
ssh root@192.168.31.$h "/data/nfs/lsf/lsf/10.1/install/hostsetup --top=/data/nfs/lsf/lsf --boot=y"
done
# ⑧ /etc/lsf.sudoers:只改 LSF_STARTUP_PATH 指向新平台 etc,保留原 LSF_EAUTH_KEY
# (实现体自动执行;先备份原文件)
# ⑨ 启动 + 冒烟 + 恢复队列(实现体阶段7-8 自动完成,最后 badmin qact all)
六、验证¶
S=/data/nfs/lsf/lsf
# 1) 版本
ssh root@192.168.31.23 "source $S/conf/profile.lsf; lsid" # 预期 10.1.0.15
# 2) 平台目录新旧并存
ls -d $S/10.1/linux3.10-glibc2.17-x86_64 $S/10.1/linux2.6-glibc2.3-x86_64
# 3) 集群状态
ssh root@192.168.31.23 "source $S/conf/profile.lsf; bhosts -w" # 预期 5 台 ok
# 4) 节点侧指向新平台
for h in 23 24 25 26 27; do
ssh root@192.168.31.$h "grep '^LSF_STARTUP_PATH' /etc/lsf.sudoers; \
systemctl cat lsfd.service | grep -E '^Exec(Start|Stop)'"
done # 预期均含 linux3.10-glibc2.17-x86_64
# 5) eauth key 未轮换(与升级前备份比对摘要)
md5sum /etc/lsf.sudoers # 各节点一致性;与 backup/etc/<host>/lsf.sudoers 中 key 行比对
# 6) cgroup v2 修复
tail -n 200 $S/log/lim/lim.log.lsf-master-01 | grep -i cgroup # 预期不再出现「不支持 cgroup v2」
# 7) 作业链路冒烟(管理员 / LDAP 用户 / root 三种身份)
su - ldapadmin -s /bin/bash -c 'bash -lc "bsub -I sleep 30; bjobs"'
# 8) 幂等复跑(第二次零变更)
.venv/bin/python main.py --config config/lsf_deploy.yaml --stage install --dry-run # 预期无 pending
七、回滚¶
备份位置:fp15_upgrade/backup/,登记见 fp15_upgrade/backup/README.md。
| 备份内容 | 位置 |
|---|---|
| 共享 conf 全量(升级前) | backup/data/nfs/lsf/lsf/conf/ |
| 旧平台二进制归档(1.6 G) | backup/data/nfs/lsf/lsf/10.1.tar.gz |
5 台 /etc/lsf.sudoers |
backup/etc/<host>/lsf.sudoers |
5 台 lsfd.service 与 profile |
backup/etc/<host>/lsfd.service、profile_and_unit.txt |
| 部署器与配置原文件 | backup/deploy/lsf/** |
回滚步骤(升级失败或验证不达标时执行;旧平台目录升级后仍存在,故可回退):
# 1) 停 LSF(高危)
for h in 27 26 25 24 23; do ssh root@192.168.31.$h "systemctl stop lsfd"; done
# 2) 恢复共享 conf(高危:覆盖)
sudo -n cp -a fp15_upgrade/backup/data/nfs/lsf/lsf/conf/. /data/nfs/lsf/lsf/conf/
# 3) 配置回退:host_type 改回 linux2.6-glibc2.3-x86_64、
# install_package/installer_dir/binary_tar 回退到 10.2.0.12 三件套
cd /home/rain/Documents/LSF/lsf_ins/deploy/lsf
cp -a fp15_upgrade/backup/deploy/lsf/config/lsf_deploy.yaml.bak.* config/lsf_deploy.yaml
# 4) 逐台重跑 hostsetup(单元指回旧平台)+ 恢复 /etc/lsf.sudoers
for h in 23 24 25 26 27; do
ssh root@192.168.31.$h "/data/nfs/lsf/lsf/10.1/install/hostsetup --top=/data/nfs/lsf/lsf --boot=y; \
cp -a fp15_upgrade/backup/etc/192.168.31.$h/lsf.sudoers /etc/lsf.sudoers"
done
# 5) 启动并验证
for h in 23 24 25 26 27; do ssh root@192.168.31.$h "systemctl start lsfd"; done
ssh root@192.168.31.23 "source /data/nfs/lsf/lsf/conf/profile.lsf; lsid; bhosts -w"
回滚失败判据(任一出现即按上面步骤回退,不临场犹豫):
lsid 非 10.1.0.15;启动后 180 s 内 bhosts 不足 5 台 ok;
任一台 ExecStart 或 LSF_STARTUP_PATH 未指向预期平台;
作业冒烟失败或出现 User permission denied。
八、风险说明¶
| # | 风险 | 影响 | 缓解 |
|---|---|---|---|
| R1 | FP15 的 CE 包 entitlement 校验策略变化 | 守护进程可能因授权失败起不来 | 先保留现有 conf/lsf.entitlement 不动;若报授权错误,从 IBM 取 CE 的 FP15 entitlement 后再启动 |
| R2 | lsfinstall 升级分支的交互应答与首次安装不同 |
升级未真正执行(静默装成旧版/中止) | 以「新平台目录是否生成 + lsid 版本」双判据回查,不看退出码;不通过即回滚 |
| R3 | 多版本包并存导致误用旧包 | 升级假成功 | 已修实现体:安装器/tar.Z 查找限定在本包目录,并显式指定 host_type 与 binary_tar |
| R4 | hostsetup 覆盖 /usr/lib/systemd/system/lsfd.service |
单元损坏致守护起不来 | 升级前已备份 5 台单元;判据要求单元指向新平台,异常即恢复备份 |
| R5 | /etc/lsf.sudoers 路径未更新(官方明确点名的坑) |
lsadmin/badmin 启停失败、b* 报权限拒绝 |
实现体逐台校验 LSF_STARTUP_PATH 并改写;LSF_EAUTH_KEY 复用不轮换 |
| R6 | 停机窗口内有作业被中断 | 用户作业丢失 | 停机前 bjobs -u all 检查 RUN,有则拒绝执行 |
| R7 | 旧平台目录被误删 | 丧失快速回退路径 | 升级不删除旧目录;额外保留 10.1.tar.gz 全量归档 |
| R8 | NFS 共享 conf 被 lsfinstall 覆盖 |
自定义配置(LSF_ROOT_USER、LSF_ADMINS、tuning)丢失 |
安装器会自行备份被覆盖的 conf 文件;我方另有全量备份,第十节末逐项核对 |
附录 A:交付物清单¶
| 文件 | 说明 |
|---|---|
fp15_upgrade/SOP.md |
本文档 |
fp15_upgrade/backup/README.md |
备份台账(含回滚对应关系与删除时机) |
fp15_upgrade/backup/** |
备份实体 |
deploy/lsf/(改动) |
main.py 增 --upgrade;deployer.py 增 cmd_upgrade;stages/lsf_install.py 平台/包版本判据改造;config/lsf_deploy.yaml(.example) 切 FP15 |
附录 B:实现体改动要点(相对升级前)¶
- 平台目录不再硬编码:
config.lsf.host_type显式指定,缺省时取已安装平台中版本最高者。 - 安装判据由「
lsf.cluster含主机名」改为「当前平台目录已安装 且lsf.cluster含主机名」——否则升级不触发。 hostsetup判据由「lsfd.service存在」改为「单元指向当前平台目录」——否则升级后不会重建单元。- 安装器与二进制 tar.Z 的查找限定在本包目录内(原先全局递归会命中最旧包)。
- 兼容冒烟标记按安装包区分(
.res_smoke_ok.<包名>),换包必须重冒烟。 - 升级模式的
install.config不写LSF_ADD_SERVERS。 /etc/lsf.sudoers复用现有LSF_EAUTH_KEY,仅改写LSF_STARTUP_PATH。
来源:
/home/rain/Documents/LSF/lsf_ins/fp15_upgrade/SOP.md| 最后更新:2026-09-24 22:12(由build/sync.py同步,请勿在站点侧修改)