NPU Snt9B裸金属服务器多机批量执行命令
场景描述
在使用NPU Snt9B裸金属服务器进行多机训练/推理作业时,往往需要将多机的环境配置的完全一致。如果逐台登录主机,逐台使用环境配置脚本来配置,虽然可以完成任务,但是效率低下。为了提高效率,本文介绍如何在单节点通过脚本方式实现多台主机批量执行命令。
操作步骤
- 选择信任节点并生成密钥。可以将多机中的一台作为信任节点,通过如下命令生成ssh的rsa密钥:
ssh-keygen -t rsa
执行后,会在/.ssh目录生成ssh的公钥和私钥。
- 配置信任节点对其他多机的免密登录
配置该信任节点免密登录到所有主机。首先创建主机列表文件hostlist,将所有主机的vpc ip写在文件中。本文以两台华为云Snt9B裸金属服务器为例,将server1作为信任节点,它们的vpc ip分别为:
- 172.16.0.73 server1
- 172.16.0.186 server2
执行如下命令将vpc ip写入到hostlist:
$ 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的密码。
图1 执行config-ssh.sh这样就使得信任节点可以免密登录到所有主机了。
- 在信任节点实现多机批量处理。在信任节点创建批量执行脚本,本文将其命名为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脚本。效果如下:
图2 执行doCommand.sh可以将环境配置的脚本放在信任节点上,并将其作为doCommand.sh执行时的参数。
./doCommand.sh "环境配置脚本"
这样就实现了在单机上,对多机批量执行环境配置脚本了。