Linux命令--pssh

本文介绍了一种用于简化大规模服务器集群管理的工具pssh及其相关工具集。这些工具能够帮助管理员在多台服务器上并行执行命令、传输文件、同步目录等操作。文章详细解释了pssh的安装过程、命令参数及应用场景。
假如同时给上千台服务器执行一个命令,拷贝一个文件,杀一个进程等,有什么简化运维管理的工具呢?在小型使用中我都是使用for循 环,数量巨大,一方面不确定操作是否成功,一方面for循环语句性能不好估计且是不是同步并行执行.,这类工具比如 pdsh,mussh,cssh,dsh等还有这里提到的pssh:
1  安装:
#wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
#wget http://parallel-ssh.googlecode.com/files/pssh-2.2.2.tar.gz
# tar zxvf pssh-2.2.2.tar.gz
# cd pssh-2.2.2
# python setup.py install

2,命令参数:
Options:
--version show program's version number and exit
--help show this help message and exit
-h HOST_FILE, --hosts=HOST_FILE
hosts file (each line "[user@]host[:port]")
-H HOST_STRING, --host=HOST_STRING
additional host entries ("[user@]host[:port]")
-C, --pcmk_nodes get nodes from pacemaker
-l USER, --user=USER username (OPTIONAL)
-p PAR, --par=PAR max number of parallel threads (OPTIONAL)
-o OUTDIR, --outdir=OUTDIR
output directory for stdout files (OPTIONAL)
-e ERRDIR, --errdir=ERRDIR
output directory for stderr files (OPTIONAL)
-t TIMEOUT, --timeout=TIMEOUT
timeout (secs) (0 = no timeout) per host (OPTIONAL)
-O OPTION, --option=OPTION
SSH option (OPTIONAL)
-v, --verbose turn on warning and diagnostic messages (OPTIONAL)
-q, --quiet turn off informational and status messages (OPTIONAL)
-A, --askpass Ask for a password (OPTIONAL)
-x ARGS, --extra-args=ARGS
Extra command-line arguments, with processing for spaces, quotes, and backslashes
-X ARG, --extra-arg=ARG
Extra command-line argument
-i, --inline inline aggregated output and error for each server
--inline-stdout inline standard output for each server
-I, --send-input read from standard input and send as input to ssh
-P, --print print output as we get it

Example: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime

pssh   多主机并行运行命令
pscp   传输文件到多个hosts,他的特性和scp差不多
pslurp   从多台远程机器拷贝文件
pnuke    kill远程机器的进程
pslurp   从远程主机考本文件到本地
prsync   使用rsync协议从本地计算机同步到远程主机
pssh:
-h 执行命令的远程主机列表  或者 -H user@ip:port  文件内容格式[user@]host[:port]
-l 远程机器的用户名
-p 一次最大允许多少连接
-o 输出内容重定向到一个文件
-e 执行错误重定向到一个文件
-t 设置命令执行的超时时间
-A 提示输入密码并且把密码传递给ssh
-O 设置ssh参数的具体配置,参照ssh_config配置文件
-x 传递多个SSH 命令,多个命令用空格分开,用引号括起来
-X 同-x 但是一次只能传递一个命令
-i 显示标准输出和标准错误在每台host执行完毕后
-I 读取每个输入命令,并传递给ssh进程 允许命令脚本传送到标准输入
-P 打印输出

3,实例
1 pssh  多主机并行运行命令
[root@server pssh-2.2.2]# pssh -P -h test.txt uptime
192.168.9.102:  14:04:58 up 26 days, 17:05,  0 users,  load average: 0.07, 0.02, 0.00
192.168.9.102: [1] 14:04:58 [SUCCESS] 192.168.9.102 9922
192.168.8.171:  14:04:59 up 35 days,  2:01,  6 users,  load average: 0.00, 0.00, 0.00
192.168.8.171: [2] 14:04:59 [SUCCESS] 192.168.8.171 22
192.168.9.104:  14:04:59 up 7 days, 20:59,  0 users,  load average: 0.10, 0.04, 0.01
192.168.9.104: [3] 14:04:59 [SUCCESS] 192.168.9.104 9922
[root@server pssh-2.2.2]# cat test.txt
192.168.9.102:9922
192.168.9.104:9922
192.168.8.171:22   //注意我的端口号不仅是默认的22
假如想将输出重定向到一个文件 加-o file 选项
2 pscp  把文件并行地复制到多个主机上
注意 是从服务器端给客户端传送文件:
[root@server pssh-2.2.2]# pscp -h test.txt /etc/sysconfig/network /tmp/network   //标示将本地的/etc/sysconfig/network传到目标服务器的/tmp/network
3 prsync 使用rsync协议从本地计算机同步到远程主机
[root@server ~]# pssh -h test.txt -P mkdir /tmp/etc
[root@server ~]# prsync -h test.txt -l dongwm -a -r /etc/sysconfig /tmp/etc //标示将本地的/etc/sysconfig目录递归同步到目标服务器的 /tmp/etc目录下,并保持原来的时间戳,使用用户 dongwm
4  pslurp 将文件从远程主机复制到本地,和pscp方向相反:
[root@server ~]# pslurp -h test.txt   -L /tmp/test -l root /tmp/network test  //标示将目标服务器的/tmp/network文件复制到本地的/tmp/test目录下,并更名为test
[1] 14:53:54 [SUCCESS] 192.168.9.102 9922
[2] 14:53:54 [SUCCESS] 192.168.9.104 9922
[root@server ~]# ll /tmp/test/192.168.9.10
192.168.9.102/ 192.168.9.104/
[root@server ~]# ll /tmp/test/192.168.9.102/
总计 4.0K
-rw-r--r-- 1 root root 60 2011-04-22 14:53 test
[root@server ~]# ll /tmp/test/192.168.9.104/
总计 4.0K
-rw-r--r-- 1 root root 60 2011-04-22 14:53 test
5  pnuke 并行在远程主机杀进程:
[root@server ~]# pnuke -h test.txt   syslog //杀死目标服务器的syslog进程,只要ps进程中出现相关词语 都能杀死
[1] 15:05:14 [SUCCESS] 192.168.9.102 9922
[2] 15:05:14 [SUCCESS] 192.168.9.104 9922

06-11
<think>我们正在解决一个在扩展CPFS(CloudParalleledFileSystem)集群节点时出现的错误。错误信息显示在运行`add_cpfs_node.py`脚本时,通过pssh执行远程命令失败,返回错误代码103。根据引用[1],我们注意到pssh被用于在多个客户端节点上执行命令,这与我们的情况类似。错误代码103通常表示pssh在执行远程命令时遇到了问题。可能的原因包括:1.SSH连接问题:pssh需要能够通过SSH无密码登录到目标节点。如果SSH配置不正确(如密钥认证失败、目标节点未包含在已知主机文件中或网络不通),则可能失败。2.远程命令执行失败:即使SSH连接成功,在目标节点上执行的命令也可能失败(如命令不存在、权限不足等)。根据引用[4],CPFS是一个高性能分布式文件系统,它依赖于高速RDMA网络和SSD存储。在添加节点时,需要确保新节点满足CPFS的要求(如安装必要的软件包,配置正确的网络等)。针对该问题,我们按照以下步骤进行排查:###步骤1:验证SSH连接在管理节点上,尝试使用与pssh相同的用户(可能是root)手动SSH到目标节点(26.35.5.32):```bashsshroot@26.35.5.32```-如果连接失败,检查以下方面:-网络连通性:确保管理节点可以访问目标节点的IP(26.35.5.32)。-SSH密钥:管理节点的公钥应添加到目标节点的`~/.ssh/authorized_keys`文件中。-安全组:在云平台上,检查安全组规则是否允许TCP端口22(SSH)的入站访问。###步骤2:检查目标节点状态如果SSH连接成功,检查目标节点是否已安装了CPFS所需的软件。根据引用[1],在添加CPFS节点前,需要在目标节点上安装一些软件包并构建GPL模块。例如:```bashyum-yinstallcppgcc-c++elfutils-libelf-develexportLINUX_DISTRIBUTION=KERNEL_ORG_LINUX/usr/lpp/mmfs/bin/mmbuildgpl```请确保这些命令已经在目标节点上执行成功。###步骤3:检查错误信息中的具体命令根据错误日志,pssh执行的命令是:```bashhostname```这是一个简单的测试命令。如果这个命令都执行失败,说明基础SSH配置有问题。###步骤4:检查add_cpfs_node.py的完整命令错误日志中给出的完整命令是:```bashsudopython/home/admin/cpfs-devops/fileserver_extend/8015/cpfsu/cpfsu.pyclusteraddnodes-Ctest-gpfscore-1.cn-wulanchabu-oxs.cpfs.aliyuncs.com--ncncAgent--ip26.35.5.32--mgfalse--extfalse-tclient-oenforceFilesetQuotaOnRoot=yes,forceAttributeRefresh=60,maxFilesToCache=1572864,maxMBpS=100000,maxStatCache=1572864,maxTcpConnsPerNodeConn=2,pagepool=42949672960,pagepoolMaxPhysMemPct=50,prefetchAggressivenessRead=1,prefetchPct=20,quotaFileWFLockSupport=0,verbsPorts='mlx5_bond_0mlx5_bond_1',verbsRdma=enable,verbsRdmaCm=enable,verbsRdmaSend=yes,workerThreads=1024,nBucketGroups=1024```注意,在`--ip26.35.5.32`这里,参数与值之间应该有空格,正确应为`--ip26.35.5.32`。这可能是参数传递的错误(缺少空格),导致命令解析失败。请检查脚本中的参数拼接部分。###步骤5:权限问题使用sudo执行cpfsu.py时,确保执行用户(admin)具有足够的权限。另外,检查目标节点的sudoers配置是否允许无密码执行相关命令。###步骤6:查看详细日志错误日志提到有输出目录和错误目录(-o和-e参数指定),查看这些日志文件(.pssh/674973和对应的错误文件),了解具体的错误原因。###解决方案建议1.**修正命令参数**:确保在`--ip`参数与值之间加上空格,即`--ip26.35.5.32`。2.**手动测试pssh命令**:使用相同的pssh命令手动测试,观察输出。例如:```bashpssh-OStrictHostKeyChecking=no-OLogLevel=quiet-t60-H"root@26.35.5.32"-o/tmp/output-e/tmp/error"hostname"```检查/tmp/output和/tmp/error中的内容。3.**检查目标节点环境**:在目标节点上,确保已经安装了所有必要的依赖包,并且CPFS客户端软件已经正确构建。###相关问题1.CPFS节点添加过程中如何配置SSH免密登录?2.CPFS节点添加失败的其他常见错误代码及解决方案?3.CPFS集群在扩容节点后如何验证性能?</think> ### CPFS节点添加失败(错误代码103)的解决方法 根据您提供的错误信息和引用内容,我们将重点解决`add_cpfs_node.py`脚本中`pssh`执行失败的问题(错误代码103)。以下是详细的排查与修复方案: --- ### 问题诊断 错误信息核心点: ```bash add_cpfs_node fail, out:{"code": 103, "message": "Execution: cmd[pssh -O StrictHostKeyChecking=no ..." ``` 这表明在通过**pssh**向节点`26.35.5.32`执行命令时失败。结合引用[1][^1]和引用[2][^2]的内容,主要涉及两类问题: 1. **SSH连接问题**:pssh需要无密码SSH访问目标节点 2. **权限与路径问题**:命令执行权限或路径配置错误 --- ### 分步解决方案 #### 1. 验证SSH无密码访问 在管理节点手动测试SSH连接: ```bash ssh -o StrictHostKeyChecking=no root@26.35.5.32 "hostname" ``` - ✅ 成功:返回主机名 - ❌ 失败处理: 1. 检查目标节点`/root/.ssh/authorized_keys`是否包含管理节点的公钥 2. 在目标节点执行修复(引用[1]中密钥相关操作[^1]): ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` #### 2. 检查目标节点环境准备 确保节点满足CPFS加入条件(引用[4][^4]): ```bash # 验证RDMA驱动(CPFS必需) ibstat # 验证存储路径权限(避免引用[2]的PermissionDenied[^2]) ls -ld /datasets ``` - 若权限不足:`chown cpfsadmin:cpfsadmin /datasets` #### 3. 修正pssh命令格式 错误日志显示可疑参数拼接: ```bash --ip26.35.5.32 # 缺少空格 ``` 修正为: ```bash sudo python cpfsu.py ... --ip 26.35.5.32 ... # 添加空格 ``` #### 4. 检查超时参数 pssh默认超时可能导致大文件操作失败(引用[1]中yum安装场景[^1]): ```bash pssh -t 300 ... # 将超时延长至300秒 ``` #### 5. 验证节点状态 排除目标节点异常(引用[3]中异常值识别方法[^3]): ```bash # 检查磁盘挂载状态 ssh root@26.35.5.32 "df -h | grep cpfs" # 检查IP冲突 arp -a | grep 26.35.5.32 ``` --- ### 关键配置参考 CPFS节点添加的最佳实践(引用[4][^4]): ```bash verbsPorts='mlx5_bond_0 mlx5_bond_1' # RDMA端口绑定 verbsRdma=enable # RDMA必须启用 pagepool=42949672960 # 内存配置 workerThreads=1024 # 线程数优化 ``` --- ### 问题总结 | 问题类型 | 检测方法 | 解决方案 | |---------|---------|---------| | SSH连接失败 | `ssh root@IP hostname` | 修复密钥认证[^1] | | 路径权限不足 | `ls -ld /path` | 修改所有权[^2] | | 参数格式错误 | 检查`--ip26.35.5.32` | 添加空格分隔 | | 依赖缺失 | `ibstat; mmfsadm` | 安装CPFS客户端[^1] | | 节点配置冲突 | `df -h; hostname` | 清理冲突资源 | --- ### 相关问题 1. CPFS如何验证RDMA网络是否正常工作? 2. pssh并行执行时如何避免节点间的干扰? 3. CPFS节点添加失败日志应该在哪里查看? 4. Aliyun CPFS与传统HPC文件系统的性能对比指标有哪些? [^1]: pssh需要严格的环境准备,包括无密码SSH和预装依赖包 [^2]: 路径权限错误是分布式系统的常见问题,需验证存储目录所有权 [^3]: 异常节点状态识别可参考统计分析中的离群点检测方法 [^4]: CPFS要求RDMA网络和SSD存储支持以保障高性能
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值