【Linux运维入门】PSSH-轻量集群管理工具

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010028869/article/details/51547926

服务器多了,原始操作就会出现弊端,假如同时给成百上千台服务器执行一个命令,拷贝一个文件,杀一个进程等,就需要逐个连接服务器进行操作,累死运维小哥。有什么简化运维管理的工具呢?

可以编写shell脚本使用for循环,但是这样做一方面不确定操作是否成功,另一方面for循环语句性能不好,因为命令是同步执行的。那有什么效率高,且使用方便的工具呢?这类工具已经有很多了,比如 pdsh,mussh,cssh,dsh等还有这里提到的pssh:

pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似pdsh,个人认为相对pdsh更为简便。


安装pssh

pssh安装还是非常简单的,前提需要Python环境的支持。

#下载安装包
wget http://parallel-ssh.googlecode.com/files/pssh-2.3.1.tar.gz

#解压
tar -zxvf pssh-2.3.1.tar.gz
cd pssh-2.3.1

#安装
python setup.py install


介绍pssh命令,参数

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


远程控制服务器

远程控制服务器有两种模式:登录模式和命令模式

登录模式:将会登录到远程服务器的终端

命令模式:只会远程执行命令,返回结果,不会登录。
如下所示:

[root@test pssh]# pssh -H [email protected] -A -P  date
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
192.168.22.211: 20160323日 星期三 14:56:24 CST
[1] 14:56:25 [SUCCESS] root@192.168.22.211

-A:提示输入密码,-P:返回执行结果


建立安全连接

操作的时候每次都要输入密码,服务器数量多的话操作很麻烦,所以要用到ssh安全连接,将本地加密的安全密钥文件,拷贝到远程服务器上。建立一个单向信任的连接,放到 .ssh文件夹中,下面测试将在22.210服务器上进行。

ssh-keygen 创建公钥和密钥,使用数字签名RSA

[root@test pssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
55:6c:23:2a:2b:9b:21:b7:6f:73:02:b7:49:7c:fb:43 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|           ..    |
|          ..+    |
|         ..o .   |
|      . ..       |
|     . oS        |
|  . = = . E      |
|   o X + o       |
|    + * o .      |
|     o.+ ...     |
+-----------------+

查看是否创建

[root@test pssh]# cd /root/.ssh/
[root@test .ssh]# ls
id_rsa  id_rsa.pub  known_hosts

将公钥复制到远程主机上

[root@test .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
root@192.168.22.211's password: 
Now try logging into the machine, with "ssh '[email protected]'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

在次连接远程主机时,不用输入密码

[root@test .ssh]# ssh [email protected]
Last failed login: Wed Mar 23 14:49:56 CST 2016 from 192.168.22.210 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Wed Mar 23 14:47:37 2016 from 192.168.22.210
[root@adminjc ~]# 


PSSH小试

编写Host文件

[root@test .ssh]# vim HostList

插入内容:格式为:用户名+@+主机ip+:端口号,端口号默认为22,可不写。其他端口号要写明

root@192.168.22.211
root@192.168.22.212
root@192.168.22.213
root@192.168.22.214

以上写的就是要远程控制的主机列表

PSSH批量执行命令,并行命令的执行。

pssh -h HostList -P "command" 

""里面可以输入命令串

例如:

在从节点建立新目录/home/slave/test

pssh -h HostList -P "mkdir /home/slave/test"

执行日志命令,返回各服务器时间

[root@test .ssh]# pssh -h HostList -P date
192.168.22.212: 20160323日 星期三 16:30:43 CST
[1] 16:30:43 [SUCCESS] root@192.168.22.212
192.168.22.211: 20160323日 星期三 16:30:43 CST
192.168.22.214: 20160323日 星期三 16:30:44 CST
[2] 16:30:43 [SUCCESS] root@192.168.22.211
[3] 16:30:43 [SUCCESS] root@192.168.22.214
192.168.22.213: 20160323日 星期三 16:30:44 CST
[4] 16:30:44 [SUCCESS] root@192.168.22.213
[root@test .ssh]# 

-p选项指定同时执行的线程数

[root@test .ssh]# pssh -h HostList -p 2  -P date

pscp命令,批量复制文件到远程主机

pscp是远程拷贝文件,如从主节点将文件分发到所有从节点

[root@test .ssh]# vim psshtest
[root@test .ssh]# pscp -h HostList  -r psshtest  /usr/local/
[1] 16:40:26 [SUCCESS] root@192.168.22.211
[2] 16:40:26 [SUCCESS] root@192.168.22.213
[3] 16:40:26 [SUCCESS] root@192.168.22.214
[4] 16:40:26 [SUCCESS] root@192.168.22.212
[root@test .ssh]# 


小结

pssh就介绍到这,集群管理工具有很多,比如后面要说的SaltStack,puppet,func等功能一个比一个强大。

环境加速成长,当只有一台服务器时,手工操作其实也没事,完全应付的过来;但是当服务器数量多了以后,就必要要考虑,怎么才能提高效率,减少错误。选择合适的工具能够有立竿见影的效果。

猜你喜欢

转载自blog.csdn.net/u010028869/article/details/51547926