跳转至

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 -w 5/5 ok、双 timer active、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:实现体改动要点(相对升级前)

  1. 平台目录不再硬编码:config.lsf.host_type 显式指定,缺省时取已安装平台中版本最高者。
  2. 安装判据由「lsf.cluster 含主机名」改为「当前平台目录已安装 且 lsf.cluster 含主机名」——否则升级不触发。
  3. hostsetup 判据由「lsfd.service 存在」改为「单元指向当前平台目录」——否则升级后不会重建单元。
  4. 安装器与二进制 tar.Z 的查找限定在本包目录内(原先全局递归会命中最旧包)。
  5. 兼容冒烟标记按安装包区分(.res_smoke_ok.<包名>),换包必须重冒烟。
  6. 升级模式的 install.config 不写 LSF_ADD_SERVERS。
  7. /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 同步,请勿在站点侧修改)