问题场景描述
跑测试的时候,经常需要将任务部署到多个client端,发起对集群的测试。我们很熟悉xargs这个命令,这个命令可以10路并发创建100个文件,但是xargs对于单台Linux非常好用,但是无法部署任务到多台机器,如果需要部署任务到多台机器,则需要parallel来帮忙了,如果呢说多往remote client部署任务,执行指令,必须解决的一个问题是ssh 免密登陆,否则任务无法执行,也顺便说一下ssh免密的实现
环境准备
先在发起任务的主机检查有没有安装parallel的deb包
先检查当前系统有没有安装parallel包
dpkg -l parallel
安装parallel包
sudo apt-get install parallel
ssh免密登陆client
通常我们通过ssh登陆其他主机时会提示输入password,提示如下
可以通过 man ssh-keygen命令查看ssh help
首先生成密钥
ssh-keygen -t rsa
在/root/.ssh会有如下几个文件
authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
id_rsa : 生成的私钥文件
id_rsa.pub : 生成的公钥文件
know_hosts : 已知的主机公钥清单
如果希望ssh公钥生效需满足至少下面两个条件:
1) .ssh目录的权限必须是700
2) .ssh/authorized_keys文件权限必须是600
实现免密登陆
1. 通过ssh-copy-id的方式
ssh-copy-id -i ~/.ssh/id_rsa.pub hostip
【eg: ssh-copy-id -i ~/.ssh/id_rsa.pub 172.17.37.170】
2. 通过scp将公钥写入到remote client文件中
scp -p ~/.ssh/id_rsa.pub remote_ip:/root/.ssh/authorized_keys
成功实现免密登陆
通过parallel部署任务到remote client
1. 通过parallel下发sleep命令
seq 100 | parallel -j 5 -S 172.17.37.170 sleep {}
2. 在remote client监控成功收到sleep指令
通过parallel执行python程序或者shell脚本
执行方式
1. 在当前node执行程序 / 脚本
parallel ::: 'python3 create_5M_file.py'
parallel ::: 'bash ss.sh'
2. 在多个远端node执行程序 / 脚本
seq 2 | parallel -j 2 -S 172.17.37.131 -S 172.17.37.170 python3 create_5M_file.py
3. 在多个remote client部署linux命令
seq 100 | parallel -j 5 -S 172.17.37.131 -S 172.17.37.170 touch /root/test/{}
4. 在一个远端node部署任务【一定记得通过:::指定参数】
parallel -j 1 -S 172.17.37.170 ::: 'python3 /root/create_5M_file.py'
remote已成功收到指令,并在执行中
问题解决
希望对大家有帮助