OpenLava 完全入门(一):认识 OpenLava 与从零部署
OpenLava 完全入门(一):认识 OpenLava 与从零部署
摘要:OpenLava 是一个开源的分布式作业调度系统,功能类似商业 LSF,广泛用于 EDA、渲染、科学计算等需要大规模并行计算的场景。本文从零介绍 OpenLava 是什么、核心架构、主要组件,带你一步步完成 Master + 3 节点计算集群的安装部署,并验证第一个作业的提交。读完你会拥有一套可用的 OpenLava 集群。
适用版本:OpenLava 4.0(CentOS 7 / Rocky Linux 8 / Ubuntu 20.04)
零、读前必看
0.1 适合谁
- ✅ 需要管理一批计算节点,统一调度 EDA/仿真/渲染任务
- ✅ 听说过 LSF / OpenLava,想从零搭建一套
- ✅ 用过 SGE/Slurm,想了解 OpenLava
- ❌ 已经在用商业 LSF,想找替代方案的迁移指南
0.2 你需要准备什么
| 项目 | 要求 |
|---|---|
| 服务器 | 至少 2 台(1 台 Master + 1 台计算节点),建议 4 台起 |
| 操作系统 | CentOS 7.x / Rocky 8 / Ubuntu 20.04(本文以 CentOS 7 为例) |
| 网络 | 节点之间互通,主机名能互相解析 |
| NFS(推荐) | 共享家目录,作业文件统一存放 |
| root 权限 | 所有节点安装软件需要 root |
一、OpenLava 是什么
1.1 一句话介绍
OpenLava 是一个开源的分布式作业调度系统(Workload Manager)。
你有一批计算服务器,用户要跑各种任务(仿真、编译、渲染),OpenLava 帮你做:
用户提交作业(bsub)
│
▼
┌─────────────────┐
│ Master (LIM) │ ← 收集资源、做调度决策
│ sbatchd │ ← 管理本地作业
└────────┬────────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
compute01 compute02 compute03
(执行节点) (执行节点) (执行节点)
类比:OpenLava 就像一个"计算资源的操作系统"——它管理一堆 CPU/内存/GPU,用户只管说"我要 8 核 16G 内存跑一个任务",它自动找空闲机器去跑。
1.2 为什么选 OpenLava
| 特性 | 说明 |
|---|---|
| 开源免费 | Apache 2.0 协议,可商用 |
| LSF 兼容 | 命令语法几乎和 LSF 一样,迁移成本低 |
| 成熟稳定 | 源自 Platform LSF 开源版,有十多年历史 |
| 支持多种资源 | CPU、内存、GPU、自定义资源(license 等) |
| 队列管理 | 多队列、优先级、公平分享 |
| 并行作业 | 支持 MPI 跨节点并行 |
1.3 与 Slurm / SGE 对比
| 系统 | 优点 | 缺点 |
|---|---|---|
| OpenLava | LSF 兼容、命令简洁、EDA 生态好 | 社区相对小 |
| Slurm | 社区活跃、超算领域主流 | 配置稍复杂 |
| SGE | 经典老牌 | 发展缓慢 |
如果你所在团队之前用 LSF,或者做 EDA 芯片设计,OpenLava 上手最顺。
二、核心架构
2.1 组件总览
| 组件 | 全称 | 作用 | 运行在哪 |
|---|---|---|---|
| LIM | Load Information Manager | 采集节点负载信息,参与调度决策 | 所有节点(Master + 计算) |
| sbatchd | Batch Daemon | 接收作业、管理本地作业执行 | 所有节点 |
| mbatchd | Master Batch Daemon | 全局作业调度(只有 Master 有) | Master 节点 |
| mbschd | Master Scheduler Daemon | 调度策略计算(FairShare、优先级) | Master 节点 |
| res | Resource Execution Service | 任务执行代理 | 所有节点 |
| pim | Process Information Manager | 进程信息采集 | 所有节点 |
2.2 作业提交流程
用户 bsub 提交作业
│
▼
sbatchd(本地)→ 转发给 mbatchd(Master)
│
▼
mbatchd 收下作业,放进队列(PEND 状态)
│
▼
mbschd 定期调度:根据资源 + 优先级 + FairShare 决定在哪跑
│
▼
mbatchd 通知目标节点的 sbatchd 启动作业
│
▼
目标节点 res 拉起用户进程,作业开始运行(RUN 状态)
│
▼
作业完成 → sbatchd 上报 mbatchd → 状态变 DONE / EXIT
2.3 状态机
作业在生命周期里会经历这些状态:
| 状态 | 含义 |
|---|---|
| PEND | 排队中,等待资源 |
| RUN | 正在运行 |
| DONE | 正常结束(退出码 0) |
| EXIT | 异常结束(非 0 退出码) |
| SUSP | 挂起(管理员挂起或资源不足被抢占) |
| PSUSP | 用户主动挂起 |
| USUSP | 系统挂起 |
| SSUSP | 调度器挂起 |
三、环境准备
本文使用 4 台 CentOS 7 机器:
>
- `master` 192.168.1.10 — Master 节点
- `compute01` 192.168.1.11 — 计算节点
- `compute02` 192.168.1.12 — 计算节点
- `compute03` 192.168.1.13 — 计算节点
3.1 所有节点:基础配置
# 1. 关闭防火墙(生产环境请精确放行端口)
systemctl stop firewalld
systemctl disable firewalld
# 2. 关闭 SELinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 3. 设置主机名(每台机器对应修改)
hostnamectl set-hostname master # master 节点执行
# hostnamectl set-hostname compute01 # compute01 执行
# 4. 配置 /etc/hosts,让所有节点能互相解析
cat >> /etc/hosts << 'EOF'
192.168.1.10 master
192.168.1.11 compute01
192.168.1.12 compute02
192.168.1.13 compute03
EOF
# 5. 配置 NTP 时间同步(集群时间一致很重要!)
yum install -y ntp
systemctl start ntpd
systemctl enable ntpd
3.2 所有节点:创建 lsf 用户和共享目录
# 创建运行用户(所有节点 UID/GID 要一致!)
groupadd -g 500 lsf
useradd -u 500 -g lsf -m lsf
echo "lsf" | passwd --stdin lsf
# 创建安装目录
mkdir -p /opt/openlava
chown lsf:lsf /opt/openlava
**坑点 1**:`/etc/hosts` 里**不要**把主机名指向 `127.0.0.1`,必须指向真实 IP,否则 LIM 通信会出问题。检查:`hostname -i` 应该返回真实 IP,不是 127.0.0.1。
3.3 NFS 共享家目录(推荐)
# ===== Master 节点(NFS Server)=====
yum install -y nfs-utils
mkdir -p /home/lsf
echo "/home/lsf *(rw,sync,no_root_squash)" >> /etc/exports
systemctl start nfs
systemctl enable nfs
exportfs -a
# ===== 计算节点(NFS Client)=====
yum install -y nfs-utils
echo "master:/home/lsf /home/lsf nfs defaults 0 0" >> /etc/fstab
mount -a
四、安装 OpenLava
4.1 获取源码
# 方式一:从 GitHub 下载
cd /tmp
wget https://github.com/openlava/openlava/archive/refs/tags/4.0.tar.gz -O openlava-4.0.tar.gz
tar zxf openlava-4.0.tar.gz
cd openlava-4.0
# 方式二:git clone
# git clone https://github.com/openlava/openlava.git
# cd openlava
# git checkout 4.0
4.2 安装依赖
# CentOS 7
yum install -y gcc gcc-c++ make tcl-devel ncurses-devel bison flex byacc
# Ubuntu
# apt install -y build-essential tcl-dev libncurses5-dev bison flex
4.3 编译安装
cd /tmp/openlava-4.0
# 配置:指定安装目录和用户
./configure --prefix=/opt/openlava \
--with-lsf-admin-user=lsf \
--with-lsf-admin-group=lsf
# 编译(-j 并行加快)
make -j4
# 安装
make install
# 设置权限
chown -R lsf:lsf /opt/openlava
4.4 环境变量
# 写入 /etc/profile.d/,所有用户都能使用
cat > /etc/profile.d/openlava.sh << 'EOF'
export LSF_ENVDIR=/opt/openlava/etc
export LSF_SERVERDIR=/opt/openlava/sbin
export LSF_BINDIR=/opt/openlava/bin
export LSF_LIBDIR=/opt/openlava/lib
export PATH=$PATH:$LSF_BINDIR:$LSF_SERVERDIR
export LD_LIBRARY_PATH=$LSF_LIBDIR:$LD_LIBRARY_PATH
EOF
source /etc/profile.d/openlava.sh
# 验证命令可用
which bsub
# /opt/openlava/bin/bsub
**所有节点都要做这一步**(安装 + 环境变量)。嫌麻烦可以把 `/opt/openlava` 整个目录打包,scp 到各节点解压。
五、配置集群
5.1 配置 lsf.cluster 文件
# Master 节点上编辑
vi /opt/openlava/etc/lsf.cluster.openlava
写入以下内容:
Begin ClusterAdmins
Administrators = lsf
End ClusterAdmins
Begin Host
HOSTNAME model type server r1m mem swp RESOURCES
master IntelI7 linux 1 3.5 16G 32G (mg)
compute01 IntelI7 linux 1 3.5 32G 64G (compute)
compute02 IntelI7 linux 1 3.5 32G 64G (compute)
compute03 IntelI7 linux 1 3.5 32G 64G (compute)
End Host
字段说明:
| 字段 | 含义 |
|---|---|
| HOSTNAME | 主机名(必须和 hostname 输出一致) |
| model | 机器型号(自定义字符串,用于调度) |
| type | 机器类型(linux / windows 等) |
| server | 1=计算节点(可跑作业),0=管理节点 |
| r1m | CPU 基准值(数字越大越快,调度权重参考) |
| mem | 内存 |
| swp | 交换分区大小 |
| RESOURCES | 自定义资源标签(后面会讲) |
5.2 配置 lsf.shared(共享资源定义)
vi /opt/openlava/etc/lsf.shared
Begin Resource
RESOURCENAME TYPE INTERVAL INCREASING CONSUMABLE DESCRIPTION
mg Boolean 30 N N (master node)
compute Boolean 30 N N (compute node)
End Resource
5.3 配置 lsb.params
vi /opt/openlava/etc/lsb.params
Begin Parameters
MBD_SLEEP_TIME = 10
SBD_SLEEP_TIME = 7
JOB_SCHEDULING_INTERVAL = 30
MAX_RSCHED_TIME = 30
End Parameters
5.4 配置 lsb.queues(队列)
vi /opt/openlava/etc/lsb.queues
Begin Queue
QUEUE_NAME = normal
PRIORITY = 30
NICE = 20
QJOB_LIMIT = 1000
UJOB_LIMIT = 100
PJOB_LIMIT = 50
HOSTS = compute01 compute02 compute03
USERS = all
End Queue
Begin Queue
QUEUE_NAME = short
PRIORITY = 40
NICE = 10
QJOB_LIMIT = 500
UJOB_LIMIT = 50
RUNLIMIT = 30
HOSTS = compute01 compute02 compute03
USERS = all
End Queue
Begin Queue
QUEUE_NAME = high
PRIORITY = 50
NICE = 10
QJOB_LIMIT = 200
UJOB_LIMIT = 30
HOSTS = compute01 compute02 compute03
USERS = lsf
End Queue
三个队列:`normal`(普通)、`short`(短作业,30 分钟上限)、`high`(高优先级,只有 lsf 用户能提交)。
5.5 配置 lsb.hosts(主机属性)
vi /opt/openlava/etc/lsb.hosts
Begin Host
HOST_NAME MXJ JL/U DISPATCH_WINDOW ADJUST
compute01 8 - () 1.00
compute02 8 - () 1.00
compute03 8 - () 1.00
master 0 - () 1.00
End Host
MXJ = Maximum Jobs Per Host,每台机器最多跑多少个作业槽位。master 设为 0 表示 Master 节点不跑作业。
5.6 同步配置到所有节点
# Master 节点执行,把配置 scp 过去
for host in compute01 compute02 compute03; do
scp /opt/openlava/etc/lsf.cluster.openlava lsf@$host:/opt/openlava/etc/
scp /opt/openlava/etc/lsf.shared lsf@$host:/opt/openlava/etc/
scp /opt/openlava/etc/lsb.params lsf@$host:/opt/openlava/etc/
scp /opt/openlava/etc/lsb.queues lsf@$host:/opt/openlava/etc/
scp /opt/openlava/etc/lsb.hosts lsf@$host:/opt/openlava/etc/
done
六、启动集群
6.1 所有节点:启动 LIM + sbatchd
# 以 lsf 用户执行
su - lsf
# 启动所有服务
lsadmin limstartup
lsadmin resstartup
badmin hstartup
# 查看状态
lsid
# My cluster name is openlava
# My master name is master
6.2 查看节点状态
# 查看所有主机
bhosts
# HOST_NAME STATUS JL/U MAX NJOBS RUN SSUSP USUSP RSV
# compute01 ok - 8 0 0 0 0 0
# compute02 ok - 8 0 0 0 0 0
# compute03 ok - 8 0 0 0 0 0
# 查看负载
lsload
# HOST_NAME status r15s r1m r15m ut pg ls it tmp swp mem
# master ok 0.0 0.0 0.0 1% 0.0 1 10 20G 32G 16G
# compute01 ok 0.0 0.0 0.0 1% 0.0 1 12 50G 64G 32G
**状态 ok 表示正常**。如果是 `unavail`,说明节点的 LIM 没起或网络不通。
6.3 查看队列
bqueues
# QUEUE_NAME PRIO STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SUSP
# normal 30 Open:Active - 100 - - 0 0 0 0
# short 40 Open:Active - 50 - - 0 0 0 0
# high 50 Open:Active - 30 - - 0 0 0 0
七、提交第一个作业
# 1. 提交一个简单的 sleep 作业
bsub -q normal sleep 60
# Job <1234> is submitted to queue <normal>.
# 2. 查看作业状态
bjobs
# JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
# 1234 lsf RUN normal master compute01 sleep 60 Jan 15 10:00
# 3. 等作业完成后看历史
bhist 1234
# Summary of time in seconds spent in various states:
# JOBID USER JOB_NAME PEND PSUSP RUN USUSP SSUSP UNKWN TOTAL
# 1234 lsf sleep 60 1 0 60 0 0 0 61
🎉 看到 RUN 状态,说明集群跑通了!
八、常见安装问题
8.1 lim 启动失败
# 看日志
tail -f /opt/openlava/log/lim.log.master
常见原因:
/etc/hosts里主机名指向 127.0.0.1- 主机名和
lsf.cluster配置不一致 - 端口被占用(LIM 默认 6881)
8.2 作业一直 PEND
# 查看为什么挂起
bjobs -p 1234
# Job is waiting for the following resources: ...
常见原因:
- 计算节点的 MXJ 槽位跑满了
- 队列的 QJOB_LIMIT 到上限了
- 用户的 UJOB_LIMIT 到上限了
- 没有满足资源要求的节点
8.3 提交时报错 "User not authorized"
检查 lsb.queues 里 USERS = all 是否正确,或者用户是否在允许列表里。
九、写在最后
这一篇我们从零搭了一套 4 节点 OpenLava 集群,跑通了第一个 sleep 作业。你现在拥有了:
- ✅ 一个 Master + 三个计算节点
- ✅ 三个优先级不同的队列
- ✅ bsub / bjobs / bhosts 基础命令可用
下一篇我们详细讲作业管理的各种命令:bsub 的参数、bjobs 过滤、bkill / bstop / bresume 控制作业生命周期、bpeek 看实时输出、bmod 修改作业参数等。
你踩过哪些 OpenLava 安装的坑? 评论区聊聊,我加进文章里。
OpenLava #作业调度 #LSF #HPC #EDA #运维
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







