• 服务器集群(五)——LSF之OpenLava 4.0


    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系统服务账号

    useradd 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、启动openlava,/etc/init.d/openlava start

    7、在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
        
  • 相关阅读:
    [SDOI2012]任务安排
    JavaScript数据存储和深浅拷贝实际运用
    在VUE中使用Echarts
    JavaScript的原型链
    关于JavaScript的43道题①
    JS为什么是单线程的?
    HTTP协议②缓存
    HTTP协议①介绍
    树形结构的数据渲染(element-ui&VUE)
    js中定义变量之②var let const的区别
  • 原文地址:https://www.cnblogs.com/linagcheng/p/16205709.html
Copyright © 2020-2023  润新知