批量部署 自动化之 - [pssh](转)

并行执行命令工具简介

作为运维工程师来讲,机器数量到一定级别的时候,批量运维和管理机器就是一件费神
的事情,还好有很多可以批量并行执行命令的工具,比如 pssh , python fabric
taobao 有在pssh基础之上改造的pgm. 这几个工具都可以帮助我们批量运行命令。当然
随着 puppet, ansible等工具的流行这些并行工具变的弱化了,不过依然还是很有用,今天我们来讲述一下 pssh 的使用方式

python并行执行命令工具

之前在阿里工作的时候,并行工具是pgm , 目前可以选择的工具如下

fabric pssh pgm 

pssh 官方介绍

PSSH provides parallel versions of OpenSSH and related tools.

Included are pssh, pscp, prsync, pnuke, and pslurp. The project includes psshlib which can be used within custom applications.
PSSH is supported on Python 2.4 and greater (including Python 3.1 and greater). It was originally written and maintained by Brent N. Chun. Due to his busy schedule, Brent handed over maintenance to Andrew McNabb in October 2009.

pssh 安装部署

下载 parallel-ssh 并安装

git clone https://github.com/ruiaylin/pssh.git

安装 install

cd pssh/
python setup.py install 

配置待批量管理的服务器列表

host configuration like this : pssh_config

192.168.102.81:10000
192.168.8.183:10000

pssh 也可以配置成为不同的 group ,可以根据不同的组做对应的操作,比如说不同的集群,不同的角色都是可以的。后面有简单的测试。

hostgroups configuration like this :

[email protected]virtual-machine:~/batch# cat /etc/pssh/hostgroups
master: 192.168.19.132,192.168.19.135
slave: 192.168.19.134 

为了管理方便,需要打通管理机器(有些公司叫做跳板机,也有叫做堡垒机)到各个主
机的信任通道,这样会避免每次ssh操作都需要输入密码,机器多的时候会真的疯掉的

打通信任通道 :

cd
mkdir .ssh
ssh-keygen -t dsa
cd .ssh ; ll
[[email protected] .ssh]# ll
total 32
-rw-------  1 root root  1588 Nov 19 14:29 authorized_keys
-rw-------  1 root root   668 Sep 11 16:15 id_dsa
-rw-r--r--  1 root root   602 Sep 11 16:15 id_dsa.pub
-rw-r--r--. 1 root root 14490 Nov 13 14:58 known_hosts
#然后将 id_dsa.pub 文件内容 copy 到 各个主机的
/home/youruser/.ssh/authorized_keys 文件中 , 打通完毕, 如果
操作完成,之后仍然无法直接ssh 登录,问题可能出在 authorized_keys 该文件的属性上面。 一般设置为700

examples :

pssh to execute command

pssh options

OPTIONS
   -h host_file   # -h + 包含IP的文件名
      --hosts host_file
   -H     [[email protected]]host[:port]  # -H + <span style="font-family: Arial, Helvetica, sans-serif;">[用户@]主机IP[:端口]   [  ]内的是可选参数 ,若有多个主机,用" "引起来,主机之间用空格分开</span>
       --host [[email protected]]host[:port]
   -H     "[[email protected]]host[:port] [ [[email protected]]host[:port ] ... ]"
   <span style="white-space:pre">   </span>   --host "[[email protected]]host[:port] [ [[email protected]]host[:port ] ... ]"
   -l user   # -l + 用户名(用于连接远程主机的用户名)
       --user user
   -p parallelism   # -p + 并发数
       --par parallelism
   -t timeout   # -t + 超时秒数
       --timeout timeout
   -o outdir   # -o + 输出目录  说明:会在该目录下创建  <span style="font-family: Arial, Helvetica, sans-serif;">[用户@]主机IP[:端口]</span><span style="font-family: Arial, Helvetica, sans-serif;">  格式的文件名,用于保存输出结果</span>
       --outdir outdir
   -e errdir   # -e + 错误输出目录
      --errdir errdir
   -x args  # -x + ssh连接时可提供的参数 ,例: -x "-o
   StrictHostKeyChecking=no" 表示跳过ssh链接时询问yes/no
       --extra-args args
   -X arg
       --extra-arg arg
   -O options   # -O + SSH配置文件中的选项  可以出现多个 -O 选项
       --options options
   -A
       --askpass
   -i    # -i 参数用于将输出结果直接显示在当前终端
       --inline
       --inline-stdout
   -v  # -v 参数用于显示ssh连接时的错误信息
      --verbose
   -I
       --send-input
          Read input and send to each ssh process.  Since ssh allows a command script to be sent on standard input, the -I option may be used in lieu of the command argument.
   -P  # -P 参数用于当主机连接上之后,输出执行结果,先输出执行结果,
            再显示连接 的主机信息.
     --print

执行命令 , 并check

#创建几个目录
pssh -h pssh_config -l root -i ‘mkdir -p  /root/works/{script,tmp,log} ‘
#check 刚才创建的结果
[[email protected] works]#  pssh -h pssh_config -l root -i ‘ls  /root/works/   ‘
    [1] 14:12:24 [SUCCESS] 192.168.102.81:10000
    log
    script
    tmp
    [2] 14:12:24 [SUCCESS] 192.168.8.183:10000
    log
    script
    tmp

多条命令要用分好分割

pssh -h pssh_config -l root -i ‘cd  /root/works/  ; ls ‘
#执行结果
[[email protected] works]# pssh -h pssh_config -l root -i ‘cd  /root/works/  ; ls ‘
[1] 14:13:33 [SUCCESS] 192.168.8.183:10000
log
script
tmp
[2] 14:13:33 [SUCCESS] 192.168.102.81:10000
log
script
tmp
# 关闭selinux
pssh -h servers.txt -l root -P "sed -i ‘/SELINUX=enforcing/s/SELINUX=enforcing/SELINUX=disabled/‘/etc/sysconfig/selinux"

pscp 集中分到文件到 主机列表的机器

将文件 collect-mysql.py 分发到机器列表对应目录
pscp -h pssh_config  collect-mysql.py   /root/works/tmp/
#check 执行结果
pssh -h pssh_config -l root -i ‘cd  /root/works/tmp ; ls ‘
[1] 14:18:09 [SUCCESS] 192.168.102.81:10000
collect-mysql.py
[2] 14:18:09 [SUCCESS] 192.168.8.183:10000
collect-mysql.py
如果是包含文件夹 ,请使用 如下命令
 pscp -h pssh_config  -l root  -r  /root/bin/*   /root/bin/  

slurp copy文件到管理机器

pslurp -L /root/works/testlurp/ -h ../pssh_config  /root/works/tmp/collect-mysql.py  mysql.py
#
[1] 14:53:55 [SUCCESS] 192.168.102.81:10000
[2] 14:53:55 [SUCCESS] 192.168.8.183:10000
# check the result
    [[email protected] testlurp]# cd /root/works/testlurp/ ; ls *
    192.168.102.81:
    mysql.py
    192.168.8.183:
    mysql.py 

pnuke

The pnuke command is useful when you want to kill a bunch of processes on a set of machines. For example, suppose you’ve got a bunch of java processes running on three nodes that you’d like to nuke (let’s use the three machines from the pssh example). Here you would do the following:

 # pnuke -h ips.txt -l irb2 java
 Success on 128.112.152.122:22
 Success on 18.31.0.190:22
 Success on 128.232.103.201:22

hostgroup 单独测试

配置 /etc/pssh/hostgroups

[email protected]virtual-machine:~/batch# cat /etc/pssh/hostgroups
master: 192.168.19.132,192.168.19.135
slave: 192.168.19.134

pssh :

[email protected]virtual-machine:/etc/pssh# pssh -g master  -i hostname
[1] 14:20:06 [SUCCESS] 192.168.19.132
mytestdb02
[2] 14:20:06 [SUCCESS] 192.168.19.135
mytestdb01
[email protected]-virtual-machine:/etc/pssh# pssh -g master  -i ‘ifconfig |grep inet | grep -v  127 ‘
[1] 14:20:35 [SUCCESS] 192.168.19.135
          inet addr:192.168.19.135  Bcast:192.168.19.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe2a:d6db/64 Scope:Link
          inet6 addr: ::1/128 Scope:Host
[2] 14:20:35 [SUCCESS] 192.168.19.132
          inet addr:192.168.19.132  Bcast:192.168.19.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe78:dfd8/64 Scope:Link
          inet6 addr: ::1/128 Scope:Host
[email protected]-virtual-machine:/etc/pssh#
[email protected]-virtual-machine:/etc/pssh#
[email protected]-virtual-machine:/etc/pssh# pssh -g slave   -i hostname
[1] 14:20:50 [SUCCESS] 192.168.19.134
mytaskdb
[email protected]-virtual-machine:/etc/pssh# 

pscp :

本地create 两个file 用于测试:

[email protected]virtual-machine:~/batch# ls file1 file2
file1  file2
[email protected]-virtual-machine:~/batch# cat file1 file2
test master
test slave
[email protected]-virtual-machine:~/batch#

执行

[email protected]virtual-machine:~/batch# pscp -g slave  file2  /root/bin/filetest
[1] 14:22:28 [SUCCESS] 192.168.19.134
[email protected]-virtual-machine:~/batch# pscp -g master   file1  /root/bin/filetest
[1] 14:22:36 [SUCCESS] 192.168.19.132
[2] 14:22:36 [SUCCESS] 192.168.19.135
[email protected]-virtual-machine:~/batch# 

结果

[email protected]virtual-machine:~/batch# pssh -g master -i ‘cat /root/bin/filetest ‘
[1] 14:23:02 [SUCCESS] 192.168.19.132
test master
[2] 14:23:02 [SUCCESS] 192.168.19.135
test master
[email protected]-virtual-machine:~/batch# pssh -g slave  -i ‘cat /root/bin/filetest ‘
[1] 14:23:10 [SUCCESS] 192.168.19.134
test slave
[email protected]-virtual-machine:~/batch#

总结

pssh 是基于python的一个batch 管理主机的工具, 现在也有 python 的 fabric 模块,也可以完成这类似的工具, 后面有时间可以总结一下。

时间: 2024-08-06 06:05:36

批量部署 自动化之 - [pssh](转)的相关文章

自动化批量部署Linux系统(Kickstart+DHCP+NFS(http)+TFTP+PXE)

自动化批量部署Linux系统 (Kickstart+DHCP+NFS(http)+TFTP+PXE) 楓城浪子原创(除原理流程图外),转载请标明出处! 更多技术博文请见个人博客:https://fengchenglangzi.000webhostapp.com 微信bh19890922 QQ445718526.490425557 序: 本文主要介绍自动化部署操作系统,主要借助的工具包含(Kickstart+DHCP+NFS(http)+TFTP+PXE),至于每种工具用途及作用请自行补脑,本文主

自动化运维系列之SaltStack批量部署Apache服务

自动化运维系列之SaltStack批量部署Apache服务 saltstack原理 SalStack由master和minion构成,master是服务端,表示一台服务器:minion是客户端,表示多台服务器.在Master上发送命令给符合条件的minion,Minion就会执行相应的命令.Master和Minion之间是通过ZeroMQ(消息队列)进行通信的. SaltStack的Master端的监听端口是4505和4506,4505端口是Master和Minion认证通信端口:4506端口是

自动化运维Ansible批量部署服务+shell脚本批量推送公钥

一.概述分析 由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下.这时,部署自动化运维就可以尽可能安全.高效地完成这些工作.一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的ABem程序来完成管理功能,如: Puppet.Func. Zabbix等:另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible. Fabric等. - 下面介绍几款功能类似的自动化运

基于Cobbler实现多版本系统批量部署

前言 运维自动化在生产环境中占据着举足轻重的地位,尤其是面对几百台,几千台甚至几万台的服务器时,仅仅是安装操作系统,如果不通过自动化来完成,根本是不可想象的.记得前面我们探究了基于PXE实现系统全自动安装,但PXE同时只能提供单一操作系统的批量部署,面对生产环境中不同服务器的需求,该如何实现批量部署多版本的操作系统呢?Cobbler便可以的满足这一实际需求,本文带来的是基于Cobbler实现多版本操作系统批量部署. Cobbler 简介 Cobbler是一款自动化操作系统部署的实现工具,由Pyt

CentOS 6.3下CHEF批量部署APACHE

之前的博文我介绍了如何搭建CHEF环境以及创建编写cookbook,resipes用来批量将cookbook下发到客户端执行相应的部署操作. NOW,本篇文档我们会详细介绍如何利用CHEF独有的框架语言来批量部署安装APACHE,并加载其HTTPS模块等功能. 相信如果你看了本篇文档,利用CHEF实现一个批量自动化部署将不是什么难事. CHEF环境部署详见: http://showerlee.blog.51cto.com/2047005/1408467 操作系统:CentOS-6.3-x86-6

企业实战脚本案例3:批量管理自动化运维100台小规模服务器

批量管理自动化运维100台小规模服务器 目录 1.脚本背景介绍 2.脚本技术需求分析 2.1 SSH免登陆认证 2.2 Expect实现key分发 2.2 PSSH家族命令详解 3.脚本功能及实现过程 3.1 脚本运行环境介绍 3.2 脚本功能介绍 3.3 脚本编写思路 3.4 脚本编写案例 一.脚本背景介绍 在企业中经常会用遇到小规模的集群服务器,在日常的管理中经常会遇到重复性的动作,如更新备上百台服务器上的ssh公钥.备份上百台服务器上的/etc/passwd配置文件等等,通常情况下采用专用

centos7使用cobbler(2.8)批量部署

一.    批量部署操作系统的前提 要想批量部署操作系统,得具备以下条件: 客户机支持pxe网络引导 服务器端和客户端建立网络通信(DHCP) 服务器端要有可供客户机开机引导的引导文件 服务器端的可引导文件还必须能传递到客户机(TFTP) 客户机无人值守安装包括安装定制的软件或服务(KICKSTART文件) 1.    认识一下PXE 预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口(Network Interface

PXE+kickstart实现批量部署linux系统

当企业有大量的新机需要安装系统,如果每台都接上系统光盘并人工选择配置安装,无疑工作量巨大.而 PXE+kickstart 的安装方式能够实现自动化批量部署,特别适用于这种场景. 一.批量部署方式 ①物理机:PXE 负载均衡 ②虚拟机:映像文件模板 分布式文件系统 无论是针对物理机还是虚拟机的批量部署,都会对文件服务器造成巨大的压力,可以分别使用负载均衡和分布式文件系统的方式缓解 二.PXE工作原理 客户机通过支持PXE的网卡请求DHCP服务器 --> DHCP服务器给客户端分配IP地址等,并告诉

学习环境搭建&lt;一&gt;批量部署,无人值守,部署salt master/minion

%新人自学的,肯定有不对的地方,指出来大家共同学习% 准备: rhel-server-6.4-x86_64-dvd.iso salt.tar.gz 第一步: 准备一台服务器,用以管理其他服务器 system---→       rhel-server-6.4-x86_64-dvd.iso ip---→                20.10.10.111 hostname----→  admin.black.com 配置好yum源 mkdir /iso mount /dev/cdrom /is