【昇腾】Ascend Snt9B多机批量执行命令方案
1. 背景介绍
在使用华为云裸金属服务器Ascend Snt9B机器进行多机训练/推理作业时,往往需要将多机的环境配置的完全一致。如果逐台登录主机,逐台使用环境配置脚本来配置,虽然可以完成任务,但是效率低下。为提高效率,可以在单节点通过脚本实现多台主机批量执行命令,具体步骤如下所示。
2. 多机批量执行方案
2.1 选择信任节点并生成密钥
可以将多机中的一台作为信任节点,通过如下命令生成ssh的rsa密钥:
ssh-keygen -t rsa
执行后,会在/.ssh目录生成ssh的公钥和私钥。
2.2 配置信任节点对其他多机的免密登录
配置该信任节点免密登录到所有主机。
首先创建主机列表文件hostlist,将所有主机的vpc ip写在文件中。
本文以两台华为云Snt9B裸金属服务器为例,将server1作为信任节点,它们的vpc ip分别为:
172.16.0.73 server1
172.16.0.186 server2
执行如下命令:
$ vim hostlist
172.16.0.73
172.16.0.186
在与信任节点hostlist文件相同的目录下,编写免密登录脚本,本文将其命名为config-ssh.sh:
#!/bin/sh
hosts=`sed -n '/^[^#]/p' hostlist`
for host in $hosts
do
echo ""
echo HOST $host
scp .ssh/id_rsa.pub $host:~/
ssh $host 'cat id_rsa.pub >> .ssh/authorized_keys'
done
给予权限并执行该脚本:
chmod u+x config-ssh.sh
./config-ssh.sh
在执行时,会需要在信任节点输入其他节点的ssh密码,来将信任节点的rsa公钥发给其他节点,并写入authorized_keys文件。如下图,需要输入server1和server2的密码。
这样就使得信任节点可以免密登录到所有主机了。
2.3 在信任节点实现多机批量处理
在信任节点创建批量执行脚本,本文将其命名为doCommand.sh:
#!/bin/sh
doCommand()
{
hosts=`sed -n '/^[^#]/p' hostlist`
for host in $hosts
do
echo ""
echo HOST $host
scp "$@" $host:~/
ssh $host sh ./"$@"
done
return 0
}
if [ $# -lt 1 ]
then
echo "$0 cmd"
exit
fi
doCommand "$@"
echo "return from doCommand"
该脚本执行时需要一个参数,即需要被多机批量执行的脚本。本文创建了runnn.sh脚本,具体内容如下:
#!/bin/sh
echo "hello world!!!"
给予权限并执行doCommand.sh:
chmod u+x doCommand.sh
./doCommand.sh "runnn.sh"
该命令的意思是:在hostlist文件中的每台机器分别执行runnn.sh脚本。效果如下:
可以将环境配置的脚本放在信任节点上,并将其作为doCommand.sh执行时的参数。
./doCommand.sh "环境配置脚本"
这样就实现了在单机上,对多机批量执行环境配置脚本了。
- 点赞
- 收藏
- 关注作者
评论(0)