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.queuesUSERS = all 是否正确,或者用户是否在允许列表里。

九、写在最后

这一篇我们从零搭了一套 4 节点 OpenLava 集群,跑通了第一个 sleep 作业。你现在拥有了:

  • ✅ 一个 Master + 三个计算节点
  • ✅ 三个优先级不同的队列
  • ✅ bsub / bjobs / bhosts 基础命令可用

下一篇我们详细讲作业管理的各种命令:bsub 的参数、bjobs 过滤、bkill / bstop / bresume 控制作业生命周期、bpeek 看实时输出、bmod 修改作业参数等。


你踩过哪些 OpenLava 安装的坑? 评论区聊聊,我加进文章里。

OpenLava #作业调度 #LSF #HPC #EDA #运维

发表回复

后才能评论