以下是关于 OpenLava 分布式作业调度系统的核心架构、组成、实战部署、常用命令及配置案例的详细解析:
一、OpenLava 简介
OpenLava 是 IBM Spectrum LSF 的开源分支版本,保留了 LSF 的核心调度功能,适用于中小型集群的作业管理。其核心优势在于 轻量化 和 兼容性,适合预算有限但需要高效调度的场景(如科研、教育、中小型企业)。
二、核心架构与组成
1. 核心架构
OpenLava 采用 主从架构,包含以下核心组件:
组件 | 功能描述 |
---|---|
Master Node | 主节点,运行 mbatchd (作业管理)和 mbschd (调度器) |
Execution Node | 执行节点,运行 sbatchd (作业执行守护进程)和 LIM (资源监控) |
Submission Node | 作业提交节点,用户通过 bsub 提交作业 |
GUI/CLI Tools | bjobs 、bhosts 、bqueues 等命令行工具 |
2. 功能模块
- 资源管理:监控 CPU、内存、GPU 等资源。
- 作业调度:支持优先级调度、队列管理、资源预留。
- 策略引擎:可自定义调度策略(如公平共享、回填调度)。
- 集群通信:通过 TCP 协议实现节点间通信(默认端口
6879
、6881
)。
三、实战部署指南
1. 系统准备
- 操作系统:CentOS/RHEL 7+、Ubuntu 18.04+
- 依赖项:
yum install -y openssh-clients ntp gcc make # CentOS apt-get install -y openssh-client ntp gcc make # Ubuntu
- 网络要求:节点间 SSH 免密登录、NTP 时间同步。
2. 安装步骤
(1) 下载与编译
wget https://github.com/openlava/openlava/releases/download/3.3/openlava-3.3.tar.gz
tar -zxvf openlava-3.3.tar.gz
cd openlava-3.3
./configure --prefix=/opt/openlava
make && make install
(2) 主节点配置
# 设置主节点名称
echo "OPENLAVA_MASTER=master-hostname" >> /etc/openlava.conf
# 初始化集群
source /opt/openlava/etc/openlava.sh
lsadmin reconfig
(3) 执行节点配置
# 所有节点同步配置文件
scp /opt/openlava/etc/openlava.* node1:/opt/openlava/etc/
# 启动执行节点服务
systemctl start openlava-sbatchd
(4) 验证安装
# 查看节点状态
bhosts
# 输出示例:
HOST_NAME STATUS JL/U MAX NJOBS RUN SSUSP USUSP
master ok - - 0 0 0 0
node1 ok - - 0 0 0 0
四、常用命令
1. 作业管理
命令 | 功能描述 | 示例 |
---|---|---|
bsub |
提交作业 | bsub -n 4 -q queue ./job.sh |
bjobs |
查看作业状态 | bjobs -l JOBID |
bkill |
终止作业 | bkill JOBID |
bqueues |
查看队列信息 | bqueues -l high_priority |
2. 资源监控
命令 | 功能描述 |
---|---|
bhosts |
查看节点资源状态 |
lsload |
显示节点负载(CPU/内存) |
lshosts |
列出集群所有主机 |
3. 集群管理
命令 | 功能描述 |
---|---|
lsadmin |
管理集群服务(启动/停止) |
badmin |
重新加载配置或重启服务 |
五、配置案例
案例 1:定义队列与资源限制
编辑 /opt/openlava/etc/lsf.cluster.openlava
:
Begin Queue
QUEUE_NAME = normal
PRIORITY = 30
RES_REQ = "rusage[mem=4096]"
SLOTS = 8 # 最大并行作业数
End Queue
Begin Queue
QUEUE_NAME = high_priority
PRIORITY = 100
RES_REQ = "rusage[mem=8192]"
SLOTS = 4
End Queue
重新加载配置:
badmin reconfig
案例 2:GPU 资源调度
- 定义 GPU 资源:
Begin Resource RESOURCENAME TYPE INTERVAL DESCRIPTION gpu Numeric 60 GPU数量 End Resource
- 提交 GPU 作业:
bsub -q gpu_queue -R "rusage[gpu=2]" ./gpu_job.sh
案例 3:作业依赖
提交两个顺序执行的作业:
bsub -J "step1" job1.sh
bsub -J "step2" -w "done(step1)" job2.sh
六、故障排查与优化
1. 常见问题
- 节点无法加入集群:
- 检查 SSH 免密登录和防火墙规则(开放端口
6879
、6881
)。 - 验证时间同步:
ntpq -p
。
- 检查 SSH 免密登录和防火墙规则(开放端口
- 作业卡在 PEND 状态:
- 检查队列资源限制:
bqueues -l QUEUE_NAME
。 - 查看资源需求是否匹配:
bjobs -l JOBID
。
- 检查队列资源限制:
2. 性能优化
- 资源预留:为关键作业预留资源。
Begin Host HOST_NAME node1 RESOURCES gpu=4 # 预留4块GPU End Host
- 日志管理:定期清理
/opt/openlava/log
。 - 调度策略:启用回填调度(Backfill)提高资源利用率。
七、总结
OpenLava 的核心优势在于其 轻量级 和 与 LSF 的兼容性,适合需要快速部署且预算有限的场景。关键配置要点包括:
- 合理设计队列优先级和资源限制。
- 确保节点间网络和时钟同步。
- 定期监控资源使用情况(如
lsload
、bhosts
)。