目录
LSF集群中可以对用户和计算节点进行分组设置,划分多层级的用户群组(user group)和节点群组(host group),让管理员可以更加方便地对一组用户或者节点进行统一的管理设置。
但是有一些场景中,需要经常对群组设置进行修改,例如:
当前集群的用户中,有一部分是固定部门成员,这些用户的权限基本不会经常改变,但是有另一部分用户是根据需求,不断在各部门或项目之间变换,经常会被调配到不同的部门和项目中,也需要管理员经常对他们的权限或者隶属的用户组进行对应的调整。
如果管理员使用普通的方法修改这部分用户所属的群组,每修改一次,就需要重启一次管理节点上的mbatchd服务进程,而这个mbatchd重启之后需要依次重新与各节点上的sbatchd服务进程进行验证通信,再重新把这些节点一个个地加入到集群中并变为可用的状态。
如果集群比较忙,并且计算节点比较多,每一次重启服务进程都要对作业的调度产生明显的影响。有没有更好的办法呢?
LSF中有一个动态群组的设置,对于用户群组和节点群组都可以应用,管理员只需要按照平时的设置方法定义一个群组的名称,以及各种属性。
只有当定义群组成员时会有所不同:动态群组的群组成员会被指定到一个文本文件中,这个文件会列出所有群组成员,当管理员需要修改群组成员时,只需要修改这个文件中对应的部分就可以了,LSF的服务进程会周期性的从这个文件中获取内容,来完成对群组用户的修改。
除了可以省去重启mbatchd服务进程,减少对作业调度的影响以外,有些集群有非常大量的用户,如果使用配置文件的形式进行修改和增减,管理员的工作量很大而且很容易出现错误,这种情况下也可以通过这种动态群组的方法,来使用一些脚本输出指定群组的成员列表,减少管理员的工作量,防止出现手误的情况。
具体的设置示例
这是我们常规看到的用户群组,以及对应的配置:
要想使用动态群组定义,首先要设置EGROUP_UPDATE_INTERVAL参数来定义更新频率,否则动态群组定义的内容无法动态更新到LSF集群中,只能通过管理员用badmin reconfig来触发,这个操作不会重启mbatchd服务进程本身,只是重新读取配置文件并且刷新正在运行的mbatchd服务进程中对应的内存数据,效率比重启mbatchd进程要高,但还是没有自动更新方便。
1、设置egroup更新频率
默认情况下EGROUP_UPDATE_INTERVAL的值为-1,LSF不会根据egroup的内容自动更新相应群组配置。
在lsb.params中设置合适的频率,这里单位默认是小时,如果想设置以分钟为单位的频率,要在数字后加上m。
这个参数是指LSF间隔多久去检查一次egroup,设置的过于频繁会浪费管理节点的资源,因为即使没有修改文件,LSF也会根据这个频率去不停地检查egroup的输出。这里为了测试方便,我们定义为5分钟,在实际应用中,可以根据“需要修改配置的频率”等需要设定成十分钟、半小时、一小时等间隔。
2、定义lsb.users文件
打开lsb.users文件,将群组ug1的GROUP_MEMBER定义为(!):
3、在$LSF_SERVERDIR下建立egroup文件
在$LSF_SERVERDIR下建立一个可执行文件egroup,填写内容使其最终的输出内容为想要指定的群组成员列表。示例中我们用echo来实现,在现实配置时,我们可以通过cat文本文件,使用脚本输出用户名等方式。
4、为egroup文件设定可执行权限
5、重启管理节点上的mbatchd服务进程
检查bugroup输出,确认已经启用动态egroup中的设置。我们看到,群组ug1的用户显示为egroup文件的输出内容——tadmin1 tadmin2。
同时检查刚才设置的EGROUP_UPDATE_INTERVAL参数的值,确认生效。
6、修改egroup输出
接下来我们修改egroup的输出内容。
在23:30,修改了egroup文件;然后在23:32,最新的群组成员已经更新到了LSF中。
管理多个群组
如果需要同时动态管理多个群组的成员,怎么办呢?
如果有多个群组的成员设置成了(!),LSF在检查egroup时会提供相应的群组名称作为参数,我们就可以根据参数名称来编写对应的egroup脚本内容。
例如,lsb.users设置如下:
我们将egroup的内容改为下面这样:
重启mbatchd为ug1和ug2启用动态群组:
修改egroup,改变ug1和ug2的成员:
等待bugroup得到最新的成员列表。
同时管理节点群组和用户群组
动态群组egroup也可以用于定义节点群组成员,同样是在lsb.hosts中定义相关群组,并且将群组成员定义为(!),来启用动态成员管理。
LSF在调用egroup时,第二个参数是群组名称,第一个参数则是用于区分要更新的是节点群组(host group)还是用户群组(user group),因此,参照下面例子修改egroup脚本:
重启mbatchd进程使动态群组设置生效:
修改节点群组和一个用户群组的成员:
等待新的动态成员生效:
提示
如果在lsb.users或lsb.hosts里设置了(!),但是还没有在egroup中为该群组设置相应的输出,就通过badmin mbdrestart或badmin reconfig命令尝试使配置生效,LSF就会认为该群组的成员为空,并且不会在配置中加载这个群组,如果碰巧同时为这个群组设置了其他调度策略相关的配置,比如设置了limit,或者在某个队列中使用了这个群组作为成员,LSF就会提示这个群组不存在,并且忽略所有相关的调度设置。
动态群组管理是一个比较实用的配置管理方法,可以根据需要灵活的对用户和计算节点的分组进行管理,提高集群管理效率。
欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。