LSF实践专题(9):LSF多集群的使用

 单个LSF集群可以支持数万个以上计算节点,完全能满足绝大多数计算集群的需要。LSF同时还提供了多集群(Multi-Cluster)的功能,可以将分散在不同地域的多个LSF集群组成逻辑上一个统一的计算集群,从而实现计算资源的充分利用。国内目前使用LSF多集群的案例并不多,但在国外已经有不少实际案例。例如欧洲的飞机制造商Airbus,就使用了多达几十个集群的LSF多集群。在考虑使用LSF多集群时,除了LSF层面的设置,还需要考虑存储、统一账号管理、网络带宽等问题,本文暂不涉及这些方面。

先来了解一下LSF多集群的一些基本概念。

提交集群:是指根据需要会将作业转发到其它LSF集群去运行的集群,也称为本地集群(local cluster)。

执行集群:是指实际运行提交集群转发过来的作业的集群,也称为远端集群(remote cluster)。

转发模式:LSF有两种实现多集群的模式,分别是转发模式(forwarding model)和租赁模式(leasing model)。转发模式是指将作业从本地集群发送到远端集群去执行;租赁模式是指将远端集群的节点加入到本地集群来运行作业,看起来像是本地集群增加了远端集群的部分节点一样。LSF已经逐渐放弃了租赁模式,在未来版本将会彻底废弃,所以本文只介绍转发模式。

LSF多集群的配置和使用过程

1. 在lsf.conf配置文件中,确保各个集群的LSF daemon监听端口相同(可以根据实际情况调整监听端口的值,大多数情况下直接使用默认值就可以):

  • LSF_LIM_PORT

  • LSF_RES_PORT

  • LSB_MBD_PORT

  • LSB_SBD_PORT

2.  在各个集群的lsf.shared文件中,需要配置各个集群名和管理节点名:

Begin Cluster
ClusterName       Servers
lsfcluster1       (host1 host2)
lsfcluster2       (hosta hostb)
End Cluster

注释:

  • 上述配置可以写两个或更多个LSF集群;

  • 默认情况下,在lsf.shared文件中是没有Servers这一列的,需要手工添加;

  • Servers一列配置的是各个LSF集群的管理节点,填写的主机名需要在各个集群都能被正确解析。

3. 在提交集群(lsfcluster1)配置发送队列:

Begin Queue
PRIORITY = 30
QUEUE_NAME = sendqueue
USERS = all
# HOSTS = none
HOSTS = host1 host2
SNDJOBS_TO = recvqueue@lsfcluster2
DESCRIPTION = the queue that sends jobs to remote cluster
End Queue

注释:

  • 队列名称可以任意填写;

  • SNDJOBS_TO = recvqueue@lsfcluster2表示作业将会被发送到lsfcluster2集群的recvqueue队列运行;

  • 如果HOSTS = none,表示发到这个队列的作业都会被转发到lsfcluster2运行,即本地集群不为该队列提供任何计算节点;如果为HOSTS配置了具体的节点,作业会优先在这些节点上运行,只有当这些节点没有空闲slots时,作业才会被转发到远端lsfcluster2集群去运行。

4. 在执行集群(lsfcluster2)配置接收队列:

Begin Queue
QUEUE_NAME = recvqueue
PRIORITY = 40
NICE = 10
USERS = all
HOSTS = all
RCVJOBS_FROM = lsfcluster1
DESCRIPTION = the queue that receives jobs from remote cluster
End Queue

注释:

  • 队列名称需要与提交集群lsfcluster1上的队列设置保持一致(lsfcluster1上发送队列设置了SNDJOBS_TO = recvqueue@lsfcluster2,因此lsfcluster2的接收队列名需要是recvqueue);

  • RCVJOBS_FROM = lsfcluster1,表示接受来自lsfcluster1集群的作业;

  • 执行集群本地也可以提交作业到这个队列运行。

5. 配置生效后可以用lsclusters和bclusters命令查看各集群状态:

在提交集群lsfcluster1查看状态:

$ lsclusters
CLUSTER_NAME   STATUS   MASTER_HOST     ADMIN    HOSTS  SERVERS
lsfcluster1      ok       host1      lsfadmin        6        4
lsfcluster2      ok       hosta      lsfadmin        2        2
$ bclusters
[Job Forwarding Information ]
LOCAL_QUEUE     JOB_FLOW   REMOTE     CLUSTER    STATUS
sendqueue       send       recvqueue  lsfcluster2  ok

在执行集群lsfcluster2查看:

$ lsclusters
CLUSTER_NAME   STATUS   MASTER_HOST     ADMIN     HOSTS  SERVERS
lsfcluster2      ok       hosta       lsfadmin        2        2
lsfcluster1      ok       host1       lsfadmin        6        4
$ bclusters
[Job Forwarding Information ]
LOCAL_QUEUE     JOB_FLOW     REMOTE     CLUSTER    STATUS
recvqueue       recvqueue       -       lsfcluster1  ok

注释:当bclusters输出状态为ok的时候,表示两个集群连通正常。

6. 默认情况下,lshosts和lsload命令不显示对方集群的节点信息,如果希望lshosts和lsload命令可以看到对方集群的节点,只要在lsf.cluster.<cluster_name>文件进行如下配置即可:

(假设修改的是lsfcluster1集群的lsf.cluster.lsfcluster1文件)

Begin RemoteClusters
CLUSTERNAME EQUIV
lsfcluster2     Y
End RemoteClusters

这样配置后,在lsfcluster1集群中运行lshosts和lsload命令就能看到lsfcluster2集群的节点信息了。

查看本地集群节点信息:

$ lshosts lsfcluster1
HOST_NAME     type    model  cpuf ncpus maxmem maxswp server RESOURCES
host1        X86_64   PC6000 116.1    8  15.5G   5.9G    Yes (mg awshost)
host2        X86_64   PC6000 116.1    8  15.5G   5.9G    Yes (bigmem awshost)
host3        X86_64   PC6000 116.1    8   7.5G   5.9G    Yes (rhel6)
host4        X86_64   PC6000 116.1    8   7.5G   5.9G    Yes (bigmem rh30)
$ lsload lsfcluster1
HOST_NAME       status  r15s   r1m  r15m   ut    pg  ls    it   tmp   swp   mem
host1              ok   0.0    0.0   0.1   0%   0.0   1   179   39G  5.9G    7G
host2              ok   0.0    0.0   0.1   0%   0.0   0   252   39G  5.9G    7G
host3              ok   0.0    0.0   0.1   0%   0.0   1     0   26G  5.9G 14.7G
host4              ok   0.0    0.0   0.1   0%   0.0   0   253   48G  5.9G 14.9G

查看远端集群节点信息:

$ lshosts lsfcluster2
HOST_NAME     type    model  cpuf ncpus maxmem maxswp server RESOURCES
hosta        X86_64 Intel_EM  60.0   16  46.9G  63.9G    Yes (rh30)
hostb        X86_64 Intel_EM  60.0    8  47.1G      -    Yes ()
$ lsload lsfcluster2
HOST_NAME       status  r15s   r1m  r15m   ut    pg  ls    it   tmp   swp   mem
hosta               ok   0.0   0.0   0.0   0%   0.0   0    65  484G 63.9G   45G
hostb               ok   0.0   0.5   0.2   1%   0.0   1     3  342G    0M 39.7G

查看所有集群的全部节点信息:

$ lshosts
HOST_NAME     type      model  cpuf ncpus maxmem maxswp server RESOURCES
hosta         X86_64 Intel_EM  60.0    16  46.9G  63.9G    Yes (rh30)
hostb         X86_64 Intel_EM  60.0     8  47.1G      -    Yes ()
host1         X86_64   PC6000 116.1     8  15.5G   5.9G    Yes (mg awshost)
host2         X86_64   PC6000 116.1     8  15.5G   5.9G    Yes (bigmem awshost)
host3         X86_64   PC6000 116.1     8   7.5G   5.9G    Yes (rhel6)
host4         X86_64   PC6000 116.1     8   7.5G   5.9G    Yes (bigmem rh30)
$ lsload
HOST_NAME       status  r15s   r1m  r15m   ut    pg  ls    it   tmp   swp   mem
hosta               ok   0.0   0.0   0.0   0%   0.0   0    65  484G 63.9G   45G
hostb               ok   0.0   0.5   0.2   1%   0.0   1     3  342G    0M 39.7G
host1               ok   0.0   0.0   0.1   0%   0.0   1   179   39G  5.9G    7G
host2               ok   0.0   0.0   0.1   0%   0.0   1     0   26G  5.9G 14.7G
host3               ok   0.0   0.0   0.1   0%   0.0   0   253   48G  5.9G 14.9G
host4               ok   0.0   0.0   0.1   0%   0.0   0   253   39G  5.9G    7G

7. 提交作业测试:

在提交集群lsfcluster1向发送队列sendqueue提交一个作业:

$ bsub -q sendqueue sleep 10000
Job <1234> is submitted to queue <sendqueue>.
$ bjobs -l 1234
Job <1234>, User <lsfadmin>, Project <default>, Status <RUN>, Queue <sendqueue>, Comman
                     d <sleep 10000>
Sat Jan 15 14:27:00: Submitted from host <host1>,
                     CWD </lsf/lsfcluster1/conf>;
Sat Jan 15 14:31:26: Job <1234> forwarded to cluster <lsfcluster2> as Job <4321>;
Sat Jan 15 14:31:27: Started 1 Task(s) on Host(s) <hosta@lsfcluster2>, Allo
                     cated 1 Slot(s) on Host(s) <hosta@lsfcluster2>, Execut
                     ion Home </home/lsfadmin>, Execution CWD <lsf/lsfcluster1/conf>;

在执行集群查看该作业运行情况,注意在执行集群该作业的JOB ID是4321:

$ bjobs -l 4321
Job <4321>, User <lsfadmin>, Project <default>, Status <RUN>, Queue <recvqueue>, Comman
                     d <sleep 10000>
Sat Jan 15 15:42:36: Submitted from host <host1@lsfcluster1:1234>, CWD </lsf/lsfcluster1/conf>;
Sat Jan 15 15:42:36: Job <1234> of cluster <lsfcluster1> accepted as Job <4321>;
Sat Jan 15 15:42:37: Started 1 Task(s) on Host(s) <hosta>, Allocated 1 Slot
                     (s) on Host(s) <hosta>, Execution Home </home/lsfadmin>, E
                     xecution CWD </lsf/lsfcluster1/conf>;

可以发现,lsfcluster1的sendqueueu队列里的作业1234被转发到lsfcluster2的recvqueue队列执行了,在lsfcluster2该作业的作业号是4321。

至此,我们配置了一个基本的LSF多集群并验证了其基本使用。

 欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。

HPC常青园

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ivyent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值