LSF之OpenLava 4.0
一、OpenLava简介
OpenLava是100%免费、开源、兼容IBM LSF的工作负载调度器,支持各种高性能计算和分析应用。伴随成千上万次的下载和安装,OpenLava的可扩展性和健壮性已经在拥有数十万个内核和和几百万作业的集群上得到了验证。
由于OpenLava的命令行和文件格式与大多数LSF功能相兼容,因此用户和管理员都将非常熟悉OpenLava的操作。组织和机构可以充分利用数以百计的商业和开源软件的已有集成,保留他们在设计、集成和技能方面的已有投资,并快速摆脱在生产环境中对商业许可证的依赖和限制。
二、OpenLava安装
1、安装依赖包
yum install -y tcl-devel
yum install -y ncurses-devel
2、安装OpenLava
# pwd: /data/packages
[root@master packages]# tar -zxvf openlava-4.0.tar.gz
[root@master packages]# cd openlava-4.0
[root@master openlava-4.0]# ./configure --prefix=/data/softwares/openlava
[root@master openlava-4.0]# make -j 4
[root@master openlava-4.0]# make install
cp -rf /data/softwares/openlava/etc/openlava /etc/init.d/
cp -rf /data/packages/openlava-4.0/config/* /data/softwares/openlava/etc/
cp -rf /data/softwares/openlava/etc/openlava.sh /etc/profile.d/
cp -rf /data/softwares/openlava/etc/openlava.csh /etc/profile.d/
三、配置OpenLava
1、配置hostname
在集群中,必须修改所有主机的hostname为集群中唯一
hostnamectl set-hostname master
2、配置域名
编辑/etc/hosts
添加格式:”ip hostname“,用空格间隔ip和hostname,可以配置hostname别名,参考localhost,也是使用空格间隔
3、配置openlava主机
编辑/data/softwares/openlava/etc/lsf.cluster.openlava
- HOSTNAME为配置在
/etc/hosts
中的主机名 - 默认选择从上到下,最上面的一个host作为master主机
4、添加openlava系统服务账号
- 使用openlava的所有服务器,都应当有该user和usergroup,所有openlava用户的id必须相同
- 可以通过指定id,在本地创建
- 也可以通过nis共享创建
# 与 lsf.cluster.<cluster_name> 中的 Administrators 对应
useradd openlava
chown -R openlava:openlava /data/softwares/openlava/
#或
groupadd --system openlava
useradd --system -g openlava -d /usr/lib/openlava -s /sbin/nologin openlava
chown -R openlava:openlava /data/softwares/openlava/
四、启动openlava
#1.设置环境变量,如果退出terminal重新terminal忽略此步
source /etc/profile.d/openlava.sh
#2.启动openlava服务
/etc/initd./openlava start
#3.检查openlava服务是否启动
chkconfig openlava on
1、也可以使用systemd管理openlava服务
新增/usr/lib/systemd/system/openlava.service
,并添加以下内容
[Unit]
Description=openlava
Wants=network-online.target
After=network.target
[Service]
Type=simple
User=openlava
RemainAfterExit=yes
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/bash /data/softwares/openlava/etc/openlava start
ExecReload=/usr/bin/bash /data/softwares/openlava/etc/openlava restart
ExecStop=/usr/bin/bash /data/softwares/openlava/etc/openlava stop
[Install]
WantedBy=multi-user.target
使用方法:
systemctl daemon-reload
systemctl enable openlava
systemctl start openlava
五、添加一台新主机到集群需要配置
1、新主机安装依赖包:yum install -y tcl-devel ncurses-devel
2、新主机通过NFS将openlava安装目录、users主目录 挂载到集群中
3、新主机通过NIS将user同步到服务器
4、新主机拷贝/data/softwares/openlava/etc/openlava
到/etc/init.d/
5、新主机,拷贝/data/softwares/openlava/etc/openlava.sh
到/etc/profile.d/
6、master主机的/etc/hosts
中添加 新主机的 ip hostname
7、新主机的/etc/hosts
中添加 master主机的 ip hostname 和 新主机的 ip hostname
- 集群中的
/etc/hosts
应当保持同步
8、添加lsf主机,修改 /data/softwares/openlava/etc/lsf.cluster.openlava
9、启动openlava,/etc/init.d/openlava start
‘
10、在OpenLava master服务器执行重载
badmin reconfig
lsadmin reconfig
六、基本使用
1、lsid
查看OpenLava master端的name以及集群name
2、lsload
查看所有服务器的 load 信息
3、lshost
查看各节点的系统信息,CPU 内存等
4、bhosts
4.1、bhosts简单使用
查看各节点情况,包括状态和正在运行的 Job 情况等
STATUS列展示节点状态
- OK:可用——可接受新的作业的正常状态
- unavail:不可用
- 可能原因:主机关闭,LIM和sbatchd不可达
- unreach:无法连接
- 可能原因:LIM在运行,但是sbatchd不可达
- close:关闭——不接受新的作业
- 可能原因:该节点的最大作业数被设置为 0;该节点被临时关闭;该节点正在运行的作业数量已达上限
4.2、bhosts指定主机
查看某一台主机的具体信息
bhosts -l <hostname>
5、bqueues
查看所有队列
bqueues -l <queue_name> # 查看指定队列的详细情况
6、bsub
提交作业
bsub -q <队列名> -m <机器名> -n <线程数> -o <标准输出文件> -e <标准错误输出文件> -J <作业名> <命令>
#示例
bsub sleep 100 #随机选择节点单线程执行
bsub -m ctsh -n 5 test.sh #指定 ctsh 预定 5 个 CPU core 执行 test.sh
bsub -Ip vim testfile.txt #分配一个节点以 Interactive 方式打开 vim
-q
:指定队列名,如果不指定,默认使用 normal 队列-m
:指定主机名,可以仅指定一台服务器执行任务。不指定会默认调度到同一种架构的服务器;如果集群存在多种类型服务器,必须指定主机名才能在异构的服务器上执行-n
:指定并发量,一般用于多并发的 Job-o
:可选参数,指定作业执行中的标准输出文件-e
:可选参数,指定作业执行中的标准错误输出文件-J
:可选参数,指定作业名,不指定默认为提交作业执行的命令名-i
:指定作业的输入文件-Ip
:提交一个交互式作业并开启一个伪终端,交互式任务时必选
7、bjobs
列出所有未完成的任务
-
bjobs
:列出所有未完成作业 -
bjobs -r
:查看正在运行的作业 -
bjobs -p
:查看排队等待的作业 -
bjobs -d
:查看已经完成的作业 -
bjobs -u <username>
:查看某个用户的作业信息 -
bjobs -u all
:查看所有用户的作业 -
bjobs -l <job_id>
:查看指定jobid作业的详情
STAT作业状态:
DONE
:已完成RUN
:运行中PEND
:排队等候调度PSUSP
:作业在排队中被挂起USUSP
:作业在计算中被用户挂起SSUSP
:作业被调度系统挂起,一般是系统 Load 过高,内存不足等原因
作业排队常见原因:
-
User has reached the pre-user job slot limit of the queue
用户作业达到了排队中作业所在队列的个人作业进程数上限。
此队列中用户正在运行的作业有计算结束,才会再分配后续的排队作业。
-
The slot limit reached; 4hosts
排队中作业达到了所在队列可使用节点数的上限。
此队列中所有用户正在运行的作业有计算结束,才会再分配此队列中排在最前边的作业。
-
The user has reached his job slot limit
用于已运行的作业数达到了系统规定的上限。
需已运行的作业有新的计算结束,排队中的作业才会进入系统调度。
-
The queue has reached its job slot limit
队列中已经运行的所有作业达到了系统上队列总作业进程数的上限。
需该队列中已运行的作业有新的计算结束,才会调度该队列中排在第一位的作业。
8、bhist
查看作业历史
bhist -a
:查看所有历史提交的作业(包括未完成的作业)
9、bpeek
bpeek <job_id>
查看运行中作业的输出,包括运行中的标准输出和错误
10、bstop
挂起一个job
bstop <job_id>
11、bresume
恢复挂起的作业
bresume <job_id>
12、bkill
kill掉作业,即杀死作业的进程
- 如果job_id为0,表示kill所有job
bkill <job_id>
七、配置文件
1、lsf.cluster.<cluster_name>文件
#Administrator 分区:
Begin ClusterAdmins
#配置项 建议配置 说明
Administrators = openlava #LSF 管理账号
End ClusterAdmins
#Host分区
#字段说明
#配置项 配置 说明
HOSTNAME 主机名 xxx 配置具体服务器的主机名
Modle ! 让系统检测
Type ! 也可以配置 x86_64
Server 1 or 0 是否为服务器,如客户端为 0
r1m ()
RESOURCES (mg) or () mg 代表 master
#示例
Begin Host
HOSTNAME model type server r1m RESOURCES
# yourhost IntelI5 linux 1 3.5 (cs)
master IntelI5 linux 1 3.5 (cs)
slaver4 IntelI5 linux 1 3.5 (cs)
slaver3 IntelI5 linux 1 3.5 (cs)
End Host
2、lsf.shared文件
定义lsf.cluster.<cluster_name>
中使用的cluster_name
, type
, model
, RESOURCES
3、lsb.users文件
定义用户群组,可以在queue中指定该queue只能被那个user或usergroup调用
该文件定义的User
、UserGroup
可以在lsb.hosts
和lsb.queues
文件中使用
#参数说明
MAX_JOBS:每个用户或用户组可以同时运行的最大作业数
JL/P:每个用户或用户组可以在任何一个处理器上同时运行的最大作业数。
- 如果groupname用@标识,代表其中的每一个用户
()
和-
用于指定默认值(无穷大),在指定用户名或组名时不能省略。
4、lsb.hosts文件
定义Host
和HostGroup
,在lsb.queues
文件中定义queue时会用到
5、lsb.queues文件
定义queue,每个queue可以配置多个参数,包括QUEUE_NAME
、USERS
,HOSTS
等参数
QJOB_LIMIT:#此队列中的作业可以使用的最大作业槽数。默认值是无限的
UJOB_LIMIT:#任何一个用户可用于此队列中作业的最大作业槽数。默认值是无限的
PJOB_LIMIT:#任何一个处理器上可用于此队列中作业的最大作业插槽数。默认值是无限的
HJOB_LIMIT:#指定可以分派到主机的作业数,而不管主机上有多少处理器
CPULIMIT、FILELIMIT、DATALIMIT、STACKLIMIT、CORELIMIT、MEMLIMIT:#该队列中的作业可能使用的各种资源的限制。这些是硬限制。用户在提交作业时指定的限制是软限制。如果其中任何一个未定义,则假定极限为无穷大。除了CPULIMIT之外,其他所有文件都以千字节为单位。CPULIMIT在几分钟内完成。CPULIMIT是在工作级别的基础上实施的,而其他限制是在每个流程的基础上实施的。当到达CPULIMIT时,SIGXCPU被发送到作业,然后依次是SIGINT、SIGTERM和SIGKILL
PROCLIMIT:#队列可以接受的并行作业的处理器限制(并行限制)。如果提交的作业请求的处理器数量超过此限制,则该作业将被拒绝。如果未定义,则默认值为无穷大。
SWAPLIMIT:#作业中所有进程的最大虚拟内存,并以KB为单位指定。当达到此限制时,SIGQUIT被发送到作业,然后依次是SIGINT、SIGTERM和SIGKILL
PROCESSLIMIT:#指定可以作为作业一部分的并发进程数。当达到此限制时,SIGINT、SIGTERM和SIGKILL将按顺序发送到作业
USERS:#限制可以将作业提交到此队列的用户(默认为“所有用户”)。
HOSTS:#限制提交到此队列的作业可以在哪些主机上执行
PRE_EXEC:#在执行主机上运行从该队列调度的作业之前执行的命令。它在作业的用户ID下执行,标准输入、输出和错误重定向到/dev/null
POST_EXEC:#在从该队列中调度的作业在执行主机上完成运行后执行的命令。如果PRE_EXEC命令以0退出状态退出,但作业的执行环境设置失败,也会运行该命令。它在作业的用户ID下执行,标准输入、输出和错误重定向到/dev/null
RES_REQ:#一个资源需求字符串,指定将作业分派到主机的条件。还可以在此字符串中指定资源保留和位
STOP_COND:#一个资源需求字符串,指定停止正在运行的作业的条件。停止作业时,只考虑字符串的“select”部分
RESUME_COND:#一个资源需求字符串,指定恢复挂起作业的条件。恢复已停止的作业时,只考虑字符串的“选择”部分
FAIRSHARE:#FAIRSHARE策略用于调度队列中的作业。默认情况下,作业是基于FIFO进行调度的。fairshare调度程序将队列槽的特定部分分配给每个参与者用户。关键字USER_SHARES用于指定每个用户的共享。用户共享的值由一个或多个[用户名,共享]对组成
HOSTS_SHARES:#用于控制一台主机的多少个CPU内核应该绑定到特定队列中的作业。HOSTS_SHARES的值由一个或多个[hostname,share]|[hostgroup,share]|[all,share]对组成
6、lsb.params文件
定义一些默认参数
八、注意事项
1、root用户默认无法使用bsub提交作业
-
当时用root用户提交任何作业时,都会出现以下错误:
User permission denied. Job not submitted.
-
默认LSF配置不允许root用户运行交互式(
bsub -I
)或批处理作业 -
如需要使用root用户提交作业,请执行以下操作
-
将此参数添加到
lsf.conf
LSF_ROOT_REX=local
-
在master上重启mbatchd
badmin mbdrestart
-
在所有执行主机上重启res
lsadmin resrestart all
-
九、LSF守护进程及相关进程
1)管理节点(Master)
mbatchd
管理批处理守护进程,运行在管理主机上。负责系统中作业的总体状态。接收作业提交和信息查询请求。管理队列中保存的作业。将作业分派到mbschd确定的主机上。
master lim
LIM运行在管理主机上。从集群中主机上运行的LIMs接收负载信息。将负载信息转发给mbatchd,后者将该信息转发给mbschd以支持调度决策。如果管理主机LIM不可用,管理候选主机上的LIM将自动接管。
pim
进程信息管理器(PIM)运行在每个服务器主机上。由LIM启动,它定期检查PIM并在PIM死亡时重新启动PIM。收集主机上运行的作业进程信息,如作业所使用的CPU、内存等,上报给sbatchd。
res
远程执行服务器(RES)运行在每个服务器主机上。接受远程执行请求,以提供清晰和安全的作业和任务远程执行。
sbatchd
运行在每一个主机上,包括管理主机,接收mbatchd运行任务的请求,并管理本地运行的任务,负责执行本地策略和维护主机上的作业状态。sbatchd会为每一个任务创建一个sbatchd的子进程,子进程运行在res的实例中,来创建每一个任务的执行环境,当任务完成之后子进程则退出。
mbschd
管理批调度程序守护程序,运行在管理主机上。与mbatchd一起工作。根据工作要求、策略和资源可用性做出调度决策并向mbatchd发送调度决策,mbatchd根据调度决策进行作业的分派。
Parent LiM
运行在管理主机的lim,从各个主机上运行的lim出收集各个主机的负载信息,并将负载信息转发给mbatchd,mabatchd会将这些信息转发给mbschd来调配调度策略,如果管理主机上的lim变成不可用,那么候选管理主机上的lim将会自动接替此lim的位置。
2)计算节点(Compute Hosts)
sbatchd
运行在每一个主机上,包括管理主机,接收mbatchd运行任务的请求,并管理本地运行的任务,负责执行本地策略和维护主机上的作业状态。sbatchd会为每一个任务创建一个sbatchd的子进程,子进程运行在res的实例中,来创建每一个任务的执行环境,当任务完成之后子进程则退出。
res
远程执行服务器(RES)运行在每个服务器主机上。接受远程执行请求,以提供清晰和安全的作业和任务远程执行。
lim
加载信息管理器(LIM)运行在每个服务器主机上。收集主机负载和配置信息,转发给管理主机上运行的管理主机LIM。报告lsload和显示的信息
pim
进程信息管理器(PIM)运行在每个服务器主机上。由LIM启动,它定期检查PIM并在PIM死亡时重新启动PIM。收集主机上运行的作业进程信息,如作业所使用的CPU、内存>
等,上报给sbatchd。
ELIM: External LIM (ELIM)是一个站点可定义的可执行文件,用于收集和跟踪自定义动态负载索引。ELIM可以是shell脚本或已编译的二进制程序,它返回您定义的动态资源的值。ELIM可执行文件必须命名为ELIM.anthing,并且位于LSF_SERVERDIR中定义的路径中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)