凉城旧巷
Python从入门到自闭,Java从自闭到放弃,数据库从删库到跑路,Linux从rm -rf到完犊子!!!

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调用

该文件定义的UserUserGroup可以在lsb.hostslsb.queues文件中使用

#参数说明
MAX_JOBS:每个用户或用户组可以同时运行的最大作业数
JL/P:每个用户或用户组可以在任何一个处理器上同时运行的最大作业数。
  • 如果groupname用@标识,代表其中的每一个用户
  • ()-用于指定默认值(无穷大),在指定用户名或组名时不能省略。

 

4、lsb.hosts文件

定义HostHostGroup,在lsb.queues文件中定义queue时会用到

 

5、lsb.queues文件

定义queue,每个queue可以配置多个参数,包括QUEUE_NAMEUSERSHOSTS等参数

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中定义的路径中。

posted on 2022-04-29 10:31  凉城旧巷  阅读(8262)  评论(4编辑  收藏  举报