当前位置: 首页 > 工具软件 > pssh > 使用案例 >

运维之道 | PSSH 自动化集群管理、自动化脚本管理

颜昕
2023-12-01

前言

PSSH是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的。类似pdsh,但是相对pdsh更为简便,使用前必须在各个服务器上配置好密钥认证访问

一、主机规划

主机IP
管理主机192.168.182.10
被管理主机 - 1192.168.182.11
被管理主机 - 2192.168.182.12

二、PSSH 安装

1、yum安装
[root@master ~]# yum install -y pssh
2、源码编译安装

百度网盘 ------- 提取码:ltwl

[root@master ~]# wget http://parallel-ssh.googlecode.com/files/pssh-2.3.1.tar.gz
[root@master ~]# tar xf pssh-2.3.1.tar.gz
[root@master ~]# cd pssh-2.3.1/
[root@master ~]# python setup.py build
[root@master ~]# python setup.py install	///centos6-py版本为2.6、centos7-py版本为2.7
3、ubuntu安装
[root@master ~]# sudo apt-get install pssh

PS1:ubuntu安装完pssh后,输入pssh,也许会提示:No command ‘pssh’ found, did you mean:…

[root@master ~]# echo "alias pssh=parallel-ssh" >> ~/.bashrc && . ~/.bashrc

PS2:安装完pssh后,还安装了pscpprsyncpnukepslurp。和pssh命令无效的问题相同,它们默认也只能使用全名,不能只用简称。需要执行如下命令:

echo "alias pscp=parallel-scp" >> ~/.bashrc && . ~/.bashrc
echo "alias prsync=parallel-rsync" >> ~/.bashrc && . ~/.bashrc
echo "alias pnuke=parallel-nuke" >> ~/.bashrc && . ~/.bashrc
echo "alias pslurp=parallel-slurp" >> ~/.bashrc && . ~/.bashrc

二、PSSH 命令格式

命令格式pssh [OPTIONS] command [...]

--version:查看版本
--help:查看帮助,即此信息
-h:主机文件列表,内容格式"[user@]host[:port]"
-H:主机字符串,内容格式"[user@]host[:port]"
-l:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输入文件【可选】
-t:TIMEOUT 超时时间设置,0无限制【可选】
-O:SSH的选项
-v:详细模式
-A:手动输入密码模式
-x:额外的命令行参数使用空白符号,引号,反斜线处理
-X:额外的命令行参数,单个参数模式,同-x
-i:每个服务器内部处理信息输出
-P:打印出服务器返回信息

三、生成密钥免密管理

[root@master ~]# ssh-keygen
[root@master ~]# for i in {0,1,2}; do ssh-copy-id -i 192.168.1.1$i ; done

四、PSSH 命令行集群管理

1、单个主机管理
[root@master ~]# pssh -H root@192.168.182.11 -i date
[1] 10:40:09 [SUCCESS] root@192.168.182.11
2020年 02月 06日 星期四 10:40:09 CST
2、文件列表集群管理
  • 编写ip地址集群脚本ip.txt
[root@master ~]# cat ip.txt 
192.168.182.11
192.168.182.12
  • 执行 pssh -h ip.txt -i 命令
[root@master ~]# pssh -h ip.txt -i date
[1] 10:43:52 [SUCCESS] 192.168.182.11
2020年 02月 06日 星期四 10:43:52 CST
[2] 10:44:02 [SUCCESS] 192.168.182.12
2020年 02月 06日 星期四 10:44:02 CST
3、将pssh查询结果输出到指定目录文件中
[root@master ~]# pssh -h ip.txt -i -o /villian/pssh/ date

[root@master ~]# ll /villian/pssh/
总用量 8
-rw-r--r--. 1 root root 43 2月   6 10:49 192.168.182.11
-rw-r--r--. 1 root root 43 2月   6 10:49 192.168.182.12

五、基于 PSSH 的其他命令

1、基于pssh的pscp.pssh命令

功能是将本地文件批量复制到远程主机

  • -v:显示复制过程
  • -a: 复制过程中保留常规属性
  • -r :递归复制目录

命令pscp -h ip文件 本地目录文件名 远程文件存放目录

[root@master ~]# pscp -H 192.168.182.11 /root/ip.txt ~/
[1] 10:58:21 [SUCCESS] 192.168.182.11
[root@slave ~]# ll
-rw-r--r--  1 root root      30 2月   6 10:58 ip.txt
2、基于pssh的pslurp.pssh命令

功能是将远程主机的文件批量复制到本地

  • -L :指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称
  • -r :递归复制目录

命令pslurp -h ip文件 -L 本地目录 远程文件 本地文件名称

[root@master ~]# pslurp -H 192.168.182.11 -L /root/villian/ /root/villian.sh zwl.sh

[root@master 192.168.182.11]# pwd
/root/villian/192.168.182.11
[root@master 192.168.182.11]# ls
zwl.sh
3、基于pssh的pnuke 命令

功能是用于批量远程结束进程
命令pnuke -h ip文件 进程名

[root@master ~]# pnuke -H 192.168.182.11 httpd
[1] 11:23:40 [SUCCESS] 192.168.182.11

六、批量集群管理

1、获取每台机器的 uptime
  • 新建ip集群文本
[root@master ~]# cat ip.txt 
root@192.168.182.11
root@192.168.182.12
  • 执行uptime命令
[root@master ~]# pssh -h ip.txt -i uptime
[1] 11:20:15 [SUCCESS] root@192.168.182.11
 11:20:15 up  1:17,  1 user,  load average: 0.00, 0.01, 0.03
[2] 11:20:15 [SUCCESS] root@192.168.182.12
 11:20:15 up 38 min,  1 user,  load average: 0.00, 0.01, 0.05
  • 保存执行结果
[root@master ~]# pssh -h ip.txt -i -o /villian/pssh-1 uptime
[1] 11:21:35 [SUCCESS] root@192.168.182.11
 11:21:35 up  1:18,  1 user,  load average: 0.06, 0.03, 0.04
[2] 11:21:35 [SUCCESS] root@192.168.182.12
 11:21:35 up 39 min,  1 user,  load average: 0.00, 0.01, 0.05
[root@master ~]# ll /villian/pssh-1/
总用量 8
-rw-r--r--. 1 root root 61 2月   6 11:21 root@192.168.182.11
-rw-r--r--. 1 root root 62 2月   6 11:21 root@192.168.182.12

2、批量修改 hostname
  • 创建ip集群文本
[root@master ~]# cat hosts  ///注意,是hosts文件,不是hosts.txt文本
192.168.182.11 V1			///IP与主机名Hostname对应关系
192.168.182.12 V2			///IP与主机名Hostname对应关系
  • 创建hostname.sh批量修改脚本
[root@master ~]# cat hostname.sh 
#!/bin/bash
ip=`ifconfig ens33 | grep 'inet' | awk '{print $2}' | tr -d 'addr:'`
hostname=`cat /home/test/hosts | grep $ip | awk '{print $2}'`
echo $ip
echo $hostname
hostnamectl set-hostname --static $hostname
hostname $hostname
  • hostshostname.sh脚本发送至被管理主机
[root@master ~]# pscp -h ip.txt /root/hosts /home/test   
[root@master ~]# pscp -h ip.txt /root/hostname.sh /home/test             
  • 批量授予hostname.sh可执行权限
[root@master ~]# pssh -h ip.txt -i 'chmod +x /home/test/hostname.sh'
  • 批量执行hostname.sh
pssh -h ip.txt -i 'sh  /home/test/hostname.sh'
 类似资料: