Torque(2.4.6)+maui(3.3.1)下对用户配置节点的办法

原创作者:zhangguangping

转载自:点击打开链接


最近配置集群的时候,遇到了一个问题:我们的集群组分比较复杂,想对不同的用户对不同的节点有不同的使用权。所以需要将节点对用户分配。这个问题困扰了几天。几天来,看手册,上网搜资料,将所有能找到的办法都试了,还是不理想。并且发现Torque和maui的讨论区以及小木虫论坛上都有人问过这个问题。
下面我把我的解决办法分享给大家,希望对大家有用。如果有虫友有更高级的办法,欢迎跟帖指教,将不胜感激。
首先我介绍一下我尝试过的思路。
第一:maui手册上提到,可以对节点进行partition,利用这个功能可以实现将节点分配给用户。(但是这个办法操作了之后,发现不好用,并且maui讨论区里面有人说这个功能有许多bug,还不成熟)
具体做法是:
1.编辑/usr/local/maui下面的maui.cfg文件(这个是maui的配置文件)
添加
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=sugon
NODECFG PARTITION=powerlead
NODECFG PARTITION=powerlead
NODECFG PARTITION=powerlead
NODECFG PARTITION=powerlead
NODECFG PARTITION=powerlead
NODECFG PARTITION=powerlead
NODECFG PARTITION=powerlead
NODECFG PARTITION=powerlead
NODECFG PARTITION=powerlead
NODECFG PARTITION=dell
NODECFG PARTITION=dell
NODECFG PARTITION=dell
NODECFG PARTITION=dellmolpro
NODECFG PARTITION=dellmolpro
NODECFG PARTITION=dellmolpro
中的*是计算节点的名字,后面的sugon,powerlead,dell,dellmolpro是给节点分的区,总共将所有节点分为四个块。
然后再在文件中添加:
GROUPCFG PLIST=dellmolpro PDEF=dellmolpro
GROUPCFG PLIST=sugon:powerlead:dell PDEF=sugon
GROUPCFG PLIST=sugon:powerlead:dell PDEF=sugon
GROUPCFG PLIST=sugon:powerlead:dell PDEF=powerlead
GROUPCFG PLIST=dell:powerlead PDEF=dell
表示用户组siesta的用户可以使用的分区列表是sugon:powerlead:dell,其中sugon分区是默认的分区,任务优先提交到这个分区。
剩下的就是将不同的用户分配到不同的用户组就可以了。
上面看着挺好的想法。但是具体计算的时候发现,编写完了脚本之后,提交任务的时候,确实按照上面说的操作了。比如siesta用户组的成员将sugon:powerlead:dell 分区提交满了之后,他会侵占dellmolpro分区,这个是不希望看到。
因为想让用户的任务在规定的分区上计算,分区满了,就排队,直到自己的分区有资源位置,用户在提交任务的时候,脚本里面添加
#PBS -W x=PARTITION:powerlead
就表示将任务只提交到powerlead分区。但是这个具体操作起来不能用。表现为有时候可以用,有的时候不能用,有的分区可以这样写,有的分区却不能这样写。总之一句话,不稳定。(确实如maui论坛里面说的那样,bug有点多)
第二:看到maui论坛上,每有人问及这个问题,总是有人回答说最好用standing reservation功能。仔细看了看手册,并且看到论坛里面还有人说用这个功能的时候,用户没法同时使用两个reservation,并且看到配置起来较麻烦,所以放弃了这个思路。
第三:万般无奈之时想到了Torque的队列和nodes文件的备注。
1.修改/var/spool/torque/server_priv/nodes文件
node01  np=12    sugon      siesta  dalton gaussian 
node02  np=12    sugon      siesta  dalton gaussian 
node03  np=12    sugon      siesta  dalton gaussian 
node04  np=12    sugon      siesta  dalton gaussian 
node05  np=12    sugon      siesta  dalton gaussian 
node06  np=12    sugon      siesta  dalton gaussian 
node07  np=12    sugon      siesta  dalton gaussian 
node08  np=12    sugon      siesta  dalton gaussian 
node09  np=12    sugon      siesta  dalton gaussian 
node10  np=12    sugon      siesta  dalton gaussian 
node11  np=12    sugon      siesta  dalton gaussian 
node12  np=12    sugon      siesta  dalton gaussian 
node31  np=8     powerlead  siesta  dalton gaussian others
node32  np=8     powerlead  siesta  dalton gaussian others
node33  np=8     powerlead  siesta  dalton gaussian others
node34  np=8     powerlead  siesta  dalton gaussian others
node35  np=8     powerlead  siesta  dalton gaussian others
node36  np=8     powerlead  siesta  dalton gaussian others
node38  np=8     powerlead  siesta  dalton gaussian others
node39  np=8     powerlead  siesta  dalton gaussian others
node40  np=8     powerlead  siesta  dalton gaussian others
node41  np=8     dell             siesta  dalton gaussian others
node42  np=8     dell             siesta  dalton gaussian others
node43  np=8     dell             siesta  dalton gaussian others
node44  np=8     dell             molpro
node45  np=8     dell             molpro
node46  np=8     dell             molpro
将每一个节点分配上属性,每一个节点可以加多个属性,这一点是该方法成功的关键所在。
2.然后创建一系列的队列,并且指定队列只接受哪个用户组的任务,为了简单起见,每一个用户组创建一个相似的队列。然后给队列指定默认的资源。
举一例如下:
创建siesta用户对应的队列SIESTA
qmgr -c "create queue SIESTA queue_type=execution"
创建SIESTA队列,并且指定类型为execution
qmgr -c "set queue SIESTA started=true"
指定SIESTA队列中的任务可以被调度执行
qmgr -c "set queue SIESTA enabled=true"
指定SIESTA队列可以接受新的任务
qmgr -c "set queue SIESTA acl_group_enable=true"
指定SIESTA队列专属某一个用户组
qmgr -c "set queue SIESTA acl_groups=siesta"
指定SIESTA队列的专属用户组为siesta用户组,只有属于siesta用户组的用户才能向改队列中提交任务,其他的用户组不可以。当然,一个用户可以属于多个用户组。
qmgr -c "set queue SIESTA acl_group_sloppy=true"
指定是不是只看用户的第一用户组来决定对队列的使用权。如果该项没有,则只有第一用户组为siesta的用户组才能向该队列对提交任务,如果该项为true,表示检查用户的其他用户组属性。
qmgr -c "set queue SIESTA resources_default.neednodes=siesta"
指定SIESTA队列使用的计算节点是siesta属性的(上面1中指定的)
创建完毕后,可以用qmgr -c "p s"查看创建的队列情况,如下
# Create and define queue SIESTA
#
create queue SIESTA
set queue SIESTA queue_type = Execution
set queue SIESTA resources_default.neednodes = siesta
set queue SIESTA acl_group_enable = True
set queue SIESTA acl_groups = siesta
set queue SIESTA acl_group_sloppy = True
set queue SIESTA enabled = True
set queue SIESTA started = True
其他的用户组都可以类比着创建自己的专属队列。
3.启动服务节点的pbs_server服务和maui服务:
qterm -t quick
停止pbs_server服务
pbs_server
重启pbs_server服务
ps -A |grep maui
找出maui的进程号
18066 ?        00:00:00 maui
杀掉maui进程
kill 18066
重新启动maui
/usr/local/software/maui-3.3.1/sbin/maui 
好了,到此为止,大功告成。可以使用了
属于siesta用户组的用户提交任务,就可以默认提交到node01-node43上,只要提交满了,就排队,不能提交到node44-node46上。
但是siesta用户组的成员如果想将自己的某一个任务提交到sugon上,而不是powerlead或者dell上,则可以在自己的脚本中写上:
#PBS -l nodes=1:sugon:ppn=8
表示该任务只向sugon机器提交,如果sugon满了,就排队,即使powerlead和dell有空闲。
如果写为#PBS -l nodes=1:dell:ppn=8
那么siesta用户组的用户只能提交到node41,42,43这三个上,如果满了,就排队,直到这三个节点有空余。不会侵占到node44-node46上。
也就是说这儿对节点属性的要求和队列本身对节点的要求是 “与(and)”的关系。
如果写成:
#PBS -l nodes=1:ppn=8
那么就会从node43倒序向node01检查,看是否有空闲资源。也就是说dell机器优先。
这种做法有一个不令人满意的地方:如果other用户组的用户用OTHER队列向sugon提交任务的话,那么可以提交,并且不出错,但是任务始终在排队状态,永远不会被执行。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值