本文全面介绍IBM Spectrum LSF集群的日常管理任务,包括集群配置、队列管理、资源控制、用户管理和性能监控等核心管理职责。

LSF管理概述

LSF管理员的主要职责包括:

  • 集群配置:定义主机、队列和资源
  • 策略管理:配置调度策略和资源分配
  • 用户管理:用户组、公平共享和配额
  • 监控维护:集群健康检查和性能优化
  • 故障排除:诊断和解决集群问题

核心管理命令

集群管理命令:lsadmin

lsadmin用于管理LSF守护进程和主机:

1
2
3
4
5
6
7
8
9
10
11
# 启动LIM守护进程
lsadmin limstartup

# 重启LIM
lsadmin limrestart

# 查看LIM状态
lsadmin ckconfig

# 重新加载配置
lsadmin reconfig

批处理管理命令:badmin

badmin用于管理批处理系统:

1
2
3
4
5
6
7
8
9
10
11
# 启动mbatchd和mbschd
badmin hstartup

# 重启批处理守护进程
badmin mbdrestart

# 重新加载配置
badmin reconfig

# 检查配置
badmin ckconfig

主机管理

添加主机到集群

1. 更新lsf.shared

1
2
3
# $LSF_ENVDIR/lsf.shared
ClusterName    Servers                 Clients
cluster1       master01 master02       (all clients)

2. 更新lsf.cluster.cluster1

1
2
3
# 定义新主机
HOSTNAME       model   type server  RESOURCES
compute10      !       !    1       (linux mem)

3. 在新主机上安装LSF

参见安装指南

4. 启动LSF守护进程

1
2
3
# 在新主机上
lsadmin limstartup
badmin hstartup

5. 验证

1
2
bhosts compute10
lsload compute10

主机状态管理

1
2
3
4
5
6
7
8
9
10
11
# 关闭主机(不接受新作业)
badmin hclose compute10

# 打开主机
badmin hopen compute10

# 禁用主机(停止调度)
badmin hshutdown compute10

# 重新启用主机
badmin hstartup compute10

主机组(Host Groups)

lsf.cluster中定义:

1
2
3
4
5
Begin HostGroup
GROUP_NAME    GROUP_MEMBER
compute_nodes (compute[01-20])
gpu_nodes     (gpu[01-10])
End HostGroup

使用主机组:

1
bsub -m "gpu_nodes" ./gpu_app

队列管理

队列配置:lsb.queues

队列是LSF调度的基本单位。典型队列配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Begin Queue
QUEUE_NAME   = normal
PRIORITY     = 30
NICE         = 20
RUN_WINDOW   = 8:00-18:00  # 运行时间窗口
USERS        = all
HOSTS        = all
```bash
DESCRIPTION  = Normal priority queue
End Queue

Begin Queue
QUEUE_NAME   = urgent
PRIORITY     = 50
NICE         = 0
RUN_WINDOW   = ()  # 24小时
USERS        = admin_group
HOSTS        = all
MAX_JOBS     = 10  # 最大作业数
RUNLIMIT     = 2:00  # 2小时运行限制
DESCRIPTION  = High priority urgent queue
End Queue

队列优先级

  • PRIORITY:越高越优先(范围0-100)
  • NICE:Unix nice值,影响作业CPU优先级

队列资源限制

1
2
3
4
5
6
7
8
9
Begin Queue
QUEUE_NAME   = bigmem
HOSTS        = bigmem[01-05]
RES_REQ      = select[mem>64000]  # 仅接受大内存主机
MEMLIMIT     = 128G  # 作业内存限制
CPULIMIT     = 48:00  # CPU时间限制(小时:分钟)
RUNLIMIT     = 24:00  # 运行时长限制
PROCESSLIMIT = 128    # 进程数限制
End Queue

队列管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看所有队列
bqueues

# 查看队列详细信息
bqueues -l normal

# 打开/关闭队列
badmin qopen normal
badmin qclose normal

# 激活/停用队列
badmin qact normal
badmin qinact normal

队列状态:

  • Open:接受新作业
  • Closed:不接受新作业
  • Active:调度挂起的作业
  • Inactive:不调度作业

用户和用户组管理

用户组配置:lsb.users

1
2
3
4
5
6
Begin UserGroup
GROUP_NAME    USERS
admin_group   (admin1 admin2 admin3)
dev_team      (developer1 developer2)
guest_users   (guest1 guest2)
End UserGroup

公平共享(Fair Share)

确保不同用户组获得公平的资源份额:

1
2
3
4
5
6
7
Begin User
USER_NAME     MAX_JOBS    SHARES
admin_group   100         30
dev_team      50          20
guest_users   10          5
default       20          10
End User
  • MAX_JOBS:用户最大并发作业数
  • SHARES:公平共享权重

用户限额(User Limits)

1
2
3
4
5
6
# 在lsb.users中配置
Begin User
USER_NAME     MAX_JOBS    MAX_PEND    MAX_CPU
john          50          100         500
team_a        200         500         2000
End User

资源定义和管理

静态资源

lsf.shared中定义:

1
2
3
4
5
6
Begin Resource
RESOURCENAME  TYPE    INTERVAL INCREASING  DESCRIPTION
mem           Numeric ()       Y           Memory (MB)
tmp           Numeric ()       Y           Temp space (MB)
license_tool  Numeric ()       N           Tool licenses
End Resource

动态资源

通过ELIM(External Load Information Manager)脚本报告:

1
2
3
4
5
6
7
8
#!/bin/sh
# elim.gpu
echo "BEGIN"
nvidia-smi --query-gpu=index --format=csv,noheader | \
  while read gpu_id; do
    echo "1 gpu_$gpu_id 1"
  done
echo "END"

配置ELIM:

1
2
# lsf.conf
LSF_ELIM_ARGS="$LSF_SERVERDIR/elim.gpu"

资源需求字符串

用户通过-R选项指定资源需求:

1
2
3
4
5
6
7
8
# 请求GPU资源
bsub -R "select[gpu_0>0]" ./cuda_app

# 请求许可证
bsub -R "rusage[license_tool=1]" ./licensed_app

# 组合条件
bsub -R "select[mem>16000 && linux] rusage[tmp=10000]" ./my_job

配置文件详解

主要配置文件

文件 用途 修改后重载命令
lsf.conf 全局LSF配置 lsadmin reconfig
lsf.shared 跨集群共享配置(主机类型、资源) lsadmin reconfig
lsf.cluster.名称 集群特定配置(主机定义) lsadmin reconfig
lsb.params 批处理系统参数 badmin reconfig
lsb.queues 队列定义 badmin reconfig
lsb.hosts 执行主机配置 badmin reconfig
lsb.users 用户和用户组 badmin reconfig
lsb.resources 资源定义 badmin reconfig

配置变更流程

  1. 编辑配置文件
  2. 检查语法badmin ckconfiglsadmin ckconfig
  3. 重新加载badmin reconfiglsadmin reconfig
  4. 验证:检查日志和执行测试

重要:重新加载配置不会影响正在运行的作业。

集群监控

实时监控

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 主机负载
lsload

# 主机状态
bhosts

# 队列状态
bqueues

# 作业统计
bjobs -sum

# 集群摘要
bsummary

日志文件

关键日志位置($LSF_LOGDIR):

日志文件 内容
lim.log.主机名 LIM日志
mbatchd.log.主机名 mbatchd日志
mbschd.log.主机名 mbschd日志
lsb.events 作业事件日志
lsb.acct 作业会计日志

监控作业负载

1
2
3
4
5
6
7
8
# 按队列统计
bjobs -sum -q normal

# 按用户统计
bjobs -sum -u all

# 查看集群利用率
bhosts -w | awk '{sum+=$4} END {print sum " slots used"}'

调度策略

抢占式调度

允许高优先级作业抢占低优先级作业:

1
2
3
4
5
6
7
8
9
10
# lsb.queues
Begin Queue
QUEUE_NAME   = high_priority
PREEMPTION   = PREEMPTABLE[low_priority]
End Queue

Begin Queue
QUEUE_NAME   = low_priority
PREEMPTABLE  = YES
End Queue

回填调度(Backfilling)

1
2
# lsb.params
BACKFILL_POLICY=1

允许小作业在不延迟大作业的前提下提前运行。

作业预留(Reservation)

1
2
# 为作业预留资源
bsub -U "reservation_id" -J reserved_job ./critical_task

性能调优

mbatchd参数调优

1
2
3
4
# lsb.params
MBD_SLEEP_TIME = 10        # mbatchd调度间隔(秒)
JOB_ACCEPT_INTERVAL = 1    # 作业接受间隔
MAX_SBD_FAIL = 3          # sbatchd失败重试次数

作业调度优化

1
2
# 限制队列中的挂起作业数,减少调度开销
badmin qmod -W 1000 normal  # 最多1000个挂起作业

数据库优化

定期清理作业历史:

1
2
3
4
5
# 归档旧事件日志
mv $LSF_LOGDIR/lsb.events $LSF_LOGDIR/lsb.events.old

# 重启mbatchd生成新日志
badmin mbdrestart

高可用性和故障转移

多主控配置

1
2
3
# lsf.conf
LSF_MASTER_LIST="master01 master02 master03"
LSF_GET_CONF=lim
  • Primary Master故障时自动切换到Secondary
  • 所有Master需访问共享LSF_ENVDIR

手动切换主控

1
2
# 在secondary master上
badmin hstartup -f

故障主机处理

1
2
3
4
5
6
7
8
9
# 1. 关闭故障主机
badmin hclose failed_host

# 2. 迁移作业到其他主机
bmig <job_id> target_host

# 3. 修复后重新启用
badmin hopen failed_host
badmin hstartup failed_host

安全管理

认证配置

1
2
3
# lsf.conf
LSB_AUTH=eauth  # 使用增强认证
LSF_AUTH_DAEMONS="eauth"

访问控制

1
2
3
4
5
# lsb.hosts
Begin Host
HOST_NAME   MXJ  r1m   DISPATCH_WINDOW  # Jobs
compute10   4    ()    (5:18:00-20:00)  # 时间窗口控制
End Host

审计日志

LSF自动记录:

  • 所有作业提交和执行
  • 管理操作
  • 配置变更

查看审计:

1
grep "badmin" $LSF_LOGDIR/mbatchd.log.*

集群维护

滚动维护

对主机进行维护而不停止整个集群:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 关闭主机调度
badmin hclose compute10

# 2. 等待运行中作业完成
watch "bjobs -m compute10"

# 3. 停止LSF服务
badmin hshutdown compute10

# 4. 执行维护(硬件更换、OS更新等)

# 5. 重新启动LSF
badmin hstartup compute10
badmin hopen compute10

升级期间的管理

参见安装升级指南中的滚动升级章节。

定期维护任务

每日

  • 检查日志错误
  • 监控作业队列长度
  • 验证主机健康状态

每周

  • 审查资源利用率
  • 分析作业失败趋势
  • 清理临时文件

每月

  • 归档日志文件
  • 审查用户配额
  • 性能基准测试
  • 配置备份

故障排查

常见问题诊断

作业无法提交

1
2
3
4
5
6
7
8
9
10
# 检查mbatchd状态
badmin showstatus

# 检查mbatchd日志
tail -f $LSF_LOGDIR/mbatchd.log.*

# 常见原因:
# - mbatchd未运行
# - 队列关闭或不活动
# - 用户达到限额

作业不调度

1
2
3
4
5
6
7
8
9
# 查看挂起原因
bjobs -p

# 检查资源可用性
bhosts
lsload

# 检查队列状态
bqueues -l queue_name

主机无响应

1
2
3
4
5
6
7
8
# 检查LIM状态
lsadmin limstatus

# 重启LIM
ssh problematic_host lsadmin limrestart

# 如无法登录,从Master重启
badmin hrestart problematic_host

调试模式

启用详细日志:

1
2
3
4
5
# 设置环境变量
export LSF_LOG_MASK=LOG_DEBUG

# 或在启动时指定
LSF_LOG_MASK=LOG_DEBUG badmin mbdrestart

最佳实践

1. 配置管理

  • 使用版本控制(Git)管理配置文件
  • 在测试环境验证配置变更
  • 记录所有配置更改

2. 容量规划

  • 定期审查资源利用率
  • 基于增长趋势规划扩容
  • 监控队列等待时长

3. 性能监控

  • 使用LSF RTM(Enterprise Manager)进行可视化监控
  • 设置告警阈值
  • 建立性能基线

4. 备份策略

1
2
3
4
5
# 自动化配置备份脚本
#!/bin/bash
BACKUP_DIR=/backup/lsf_config
DATE=$(date +%Y%m%d)
tar czf $BACKUP_DIR/lsf_config_$DATE.tar.gz $LSF_ENVDIR

5. 文档化

  • 维护集群拓扑文档
  • 记录硬件配置
  • 编写运维手册
  • 记录故障处理流程

总结

LSF集群管理是一项系统性工程,涉及配置管理、性能调优、故障排查和日常维护等多个方面。通过合理的队列设计、资源策略和监控机制,管理员可以确保LSF集群高效、稳定地运行,为用户提供优质的计算服务。

掌握lsadminbadmin等核心管理命令,熟悉配置文件结构,并建立完善的监控和备份机制,是成为优秀LSF管理员的基础。


参考资源