我们可能常常需要调整LSF主机组的成员,这需要修改lsb.hosts配置文件并执行badmin reconfig完成。但是如果主机组成员经常发生变化,有没有更好的办法避免手动重新配置LSF?
LSF提供的egroup功能可以帮助我们实现动态调整主机组成员而不用执行badmin reconfig。具体实现方法如下:
1. 在lsb.hosts文件里配置主机组成员时,将GROUP_MEMBER设置成(!)。
2. 编写一个egroup脚本,脚本的输入选项为-m <group_name>,mbatchd会自动调用egroup脚本,通过egroup -m <group_name>运行结果来为主机组的成员赋值。
例如:
1. 在lsb.hosts配置文件里,将主机组hgroup的GROUP_MEMBER参数配置成(!)。
2. mbatchd自动调用egroup -m hgroup,并根据返回结果设置hgroup主机组成员。
接下来我们通过一个具体的示例来配置egroup。
1. 在lsb.hosts里配置egroup主机组
Begin HostGroup
GROUP_NAME GROUP_MEMBER
hgroup1 (!)
hgroup2 (!)
hgroup3 (!)
End HostGroup
注释:
我们在这里配置了hgroup1、hgroup2和hgroup3三个主机组,主机组成员配置成感叹号(!),意味着从egroup里获取成员。
2. 编写egroup脚本和相关文件
(1) egroup脚本如下:
$ cat egroup
#!/bin/sh
hg=/share/host_group # 定义主机组成员文件路径
if [ "$1" == "-m" ]; then
cat $hg/$2 # 简单示例,可以根据需要实现更复杂的逻辑
fi
(2) 配置存放主机组成员名称的文件,内容如下:
$ cat /share/host_group/hgroup1
host1_1 host1_2 host1_3
$ cat /share/host_group/hgroup2
host2_1 host2_2 host2_3
$ cat /share/host_group/hgroup3
host3_1 host3_2 host3_3
(3) 测试egroup脚本:
$ egroup -m hgroup1
host1_1 host1_2 host1_3
$ egroup -m hgroup2
host2_1 host2_2 host2_3
$ egroup -m hgroup3
host3_1 host3_2 host3_3
注释:
-
egroup脚本名称只能是egroup,不能更改成其它名称或者添加扩展名。
-
需要提前创建共享目录/share/host_group,用于存放主机组文件,如果使用别的目录,需要修改egroup脚本里的hg变量。如果不是共享目录,管理节点切换时,新的管理节点有可能访问不到这个目录。
-
在/share/host_group目录下存放主机组成员的文件名需要和对应主机组名相同,如果不同,需要修改egroup脚本。
-
主机组文件里存放成员主机名称,用空格分隔。
-
在egroup脚本里需要处理脚本的两个输入选项,第一个输入选项必须是-m,第二个输入选项是一个主机组名称,egroup脚本的输出则是这个主机组包含的成员。
3. 部署egroup脚本
(1) 将egroup脚本放到$LSF_SERVERDIR目录下,并赋予执行权限。
(2) 在lsb.params文件里配置EGROUP_UPDATE_INTERVAL参数,每24小时(或指定的其它时间周期)自动执行一次egroup:
EGROUP_UPDATE_INTERVAL=24
这个周期从badmin reconfig后开始计时。
(3) 执行badmin reconfig使配置生效。
4. 主机组成员变动
根据需要修改/share/host_group目录下hgroup1、hgroup2和hgroup3文件的内容即可。LSF按照EGROUP_UPDATE_INTERVAL周期性执行egroup脚本自动更新主机组成员。
5. egroup生效后,检查主机组成员
(1) 运行bmgroup命令查看主机组成员:
$ bmgroup hgroup1
GROUP_NAME HOSTS
hgroup1 host1_1 host1_2 host1_3
$ bmgroup hgroup2
GROUP_NAME HOSTS
hgroup1 host2_1 host2_2 host2_3
$ bmgroup hgroup3
GROUP_NAME HOSTS
hgroup1 host3_1 host3_2 host3_3
(2) 修改主机组成员后,在下一个EGROUP_UPDATE_INTERVAL周期,bmgroup命令显示新的主机组成员已经被自动更新:
$ cat /share/host_group/hgroup1
host1_1 host1_2 host1_3 host1_4 host1_5 host1_6
$ bmgroup hgroup1
GROUP_NAME HOSTS
hgroup1 host1_1 host1_2 host1_3 host1_4 host1_5 host1_6
用同样的方法也可以处理用户组,在lsb.users里将用户组成员设置成(!),将egroup脚本的第一个输入选项设置为-u,第二个输入选项设置为一个用户组名称,其它步骤类似。由于篇幅有限,在这里就不作过多介绍。
欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。