前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun
前言
在进行TPC性能测试时用到两个集群管理命令:clush
和 pssh
,这俩命令都可以在多台服务器上并发执行相同命令,其中个人比较推荐 clush
,因为感觉 clush
比较好用,本文来总结一下 clush
和 pssh
的安装配置和使用。
Python
clush
和 pssh
都是基于Python实现,由于不同的系统默认的Python版本不同,由于 Python3 和 Python2 可能由于支持度不同可能会遇到不一样的问题。 目前使用过程中两个命令对于默认安装 Python2 的系统几乎没有遇到任何问题,安装和使用都比较顺利。而对于默认安装Python3的系统安装和使用过程中可能会分别遇到不同的问题,所以本文对于Python2和Python3都进行了总结。 目前用到的系统中,Centos 7 默认安装 Python2,Centos8 和 openeuler22.03 默认安装 Python3 ,如果某些软件或者命令不支持Python3 可以选择离线编译安装 Python2,然后在基于 Python2 进行安装即可。
clush
Clush是一个非常实用的集群管理命令。通过这个命令,用户可以批量管理多台服务器,使它们执行相同的命令,例如安装软件或监测运行状况等,从而达到管理多个节点的目的。
官网
https://clustershell.readthedocs.io/
https://github.com/cea-hpc/clustershell
安装
当前最新版本 ClusterShell 依赖 PyYAML ,PyYAML 依赖 pathlib,对应版本如下:
1 | pip install pathlib |
离线安装
不能连外网
先下载对应的安装包,上传到服务器
ClusterShell
https://pypi.org/project/ClusterShell/#files
https://files.pythonhosted.org/packages/d0/24/1d574c46a1833da20e17037ab039646e788c9411c9132f91b007be44ddb3/ClusterShell-1.9.2.tar.gzPyYAML
https://pypi.org/project/PyYAML/#files
https://files.pythonhosted.org/packages/cd/e5/af35f7ea75cf72f2cd079c95ee16797de7cd71f29ea7c68ae5ce7be1eda0/PyYAML-6.0.1.tar.gzpathlib
https://pypi.org/project/pathlib/#files
https://files.pythonhosted.org/packages/ac/aa/9b065a76b9af472437a0059f77e8f962fe350438b927cb80184c32f075eb/pathlib-1.0.1.tar.gz
在通过下面的里面离线安装1
2
3pip install pathlib-1.0.1.tar.gz
pip install PyYAML-6.0.1.tar.gz
pip install ClusterShell-1.9.2.tar.gz
配置
配置文件路径:/usr/etc/clustershell/ (1.7版本以后) (安装时自动创建)
旧版本路径:/etc/clustershell/ (1.7版本以前,包含1.7版本)(安装时自动创建)
1 | tree /usr/etc/clustershell/ |
默认的组配置文件:/usr/etc/clustershell/groups.d/local.cfg
1 | adm: example0 |
也可以新建 /usr/etc/clustershell/groups 配置文件,/usr/etc/clustershell/groups的优先级要比 /usr/etc/clustershell/groups.d/local.cfg 的优先级高
1 | echo "all: 192.168.1.[1-212]" > /usr/etc/clustershell/groups |
修改 ssh 端口号clush.conf
1 | ssh_options: -p 6233 |
其他配置:
1、.ssh/config
1
StrictHostKeyChecking no
2、/etc/ssh/sshd_config
修改 MaxStartups 1000
1 | #MaxStartups 10:30:100 |
修改这个原因是因为默认值为10,当并发执行scp的数量超过10时,会存在部分失败,比如我的集群机器数量为22,超过了10,就会存在这个问题。
参考:https://www.coder.work/article/1884598
3、免密登录
简单使用
clush
1 | clush -a pwd |
clush -a 进入交互式模式1
2
3
4clush -a
Enter 'quit' to leave this interactive mode
Working with nodes: 192.168.1.[1-22]
clush>
1 | pwd |
交互式模式不支持 clubak
clubak
官方文档: https://clustershell.readthedocs.io/en/latest/tools/clubak.html
-b 和 -c 参数效果一样
1 | cat file |
1 | clubak -b < file |
scp
从 1 节点传到其他节点1
scp -P 6233 192.168.1.1:~/spark-defaults.conf /opt/spark2/conf/
其他
其他参数或者功能可以自己尝试学习使用。
参数
clush
1 | clush -h |
clubak
1 | clubak -h |
python3
python3 安装完 clush 之后,直接使用会报错
1 | clush -a |
最开始不止如何解决,所以对于默认安装python3的服务器依旧选择先手动安装python2再用python2安装clush比较麻烦,后来发现异常原因是 python3 安装 clush 时自动创建的配置文件路径不对,修改一下路径即可解决。
默认安装路径:/usr/local/etc/clustershell 正确路径:/etc/clustershell 或 /usr/etc/clustershell1
2
3
4
5
6
7
8
9
10
11
12
13
14
15mv /usr/local/etc/clustershell /etc/
```
![](https://img.dongkelun.com/linux/clush/c7.png)
### 旧版
最开始是基于旧版(1.7.3)安装包离线安装的,这里记录一下。同时对于某些环境可能新版装着有问题也可以使用这种方式。比如对于默认安装Python3的环境,假如Python3安装不上,可以选择手动离线安装Python2,如果离线安装的没有pip或者pip使用起来有问题,可以通过 python setup.py install 的方式安装,有可能安装好的命令不会默认装到/usr/bin 或者 /usr/local/bin。我们可以通过添加软连接的形式 ,比如 python2的安装目录为 /usr/local/python27,那么clush会安装到 /usr/local/python27/bin/clush, 通过软连接 ln -s /usr/local/python27/bin/clush /usr/bin/clush,这样就可以使用了。
1.7.3 版本的安装包:[https://pan.baidu.com/s/1fBD5jzlcFTwle85giNrCMw](https://pan.baidu.com/s/1fBD5jzlcFTwle85giNrCMw)
安装方法:
```bash
## 该安装包只能使用Python2安装,Python3装完之后使用起来有问题
python2.7 setup.py install
pssh
pssh命令是一个用于在多台主机上并行执行ssh命令的工具,全称为parallel-ssh。它使用Python编写,能够方便地对多台Linux主机进行批量管理。PSSH提供了OpenSSH和相关工具的并行版本。包括pssh、pscp、prsync、pnuke和pslurp。该项目包括可以在自定义应用程序中使用的psshlib,源代码使用Python编写的。
官网
https://code.google.com/archive/p/parallel-ssh/
安装
基于 Python2 进行安装
在线安装
1 | pip install pssh |
离线安装
1 | pip install pssh-2.3.1.tar.gz |
配置
和 clush
一样也需要配置:
1、.ssh/config
1
StrictHostKeyChecking no
2、/etc/ssh/sshd_config
修改 MaxStartups 1000
1 | #MaxStartups 10:30:100 |
修改这个原因是因为默认值为10,当并发执行scp的数量超过10时,会存在部分失败,比如我的集群机器数量为22,超过了10,就会存在这个问题。
参考:https://www.coder.work/article/1884598
3、免密登录
使用示例
1 | pssh -h /root/dkl/host_list.txt -t0 "scp -P 6233 192.168.1.1:/root/dkl/test.sh /tmp/" |
host_list.txt
1 | root@192.168.1.1:6233 |
pssh 只能后台运行,不会有返回值,也没有交互式模式,所以个人感觉不如clush好用。
参数
1 | pssh --help |
Python3
Python3 安装 pssh 后有异常,不能使用,可能是因为不支持 Python3。记录一下异常解决过程
No module named ‘version’
1 | pssh |
https://stackoverflow.com/questions/32423793/importerror-no-module-named-version
尝试安装 version
在线安装失败:
接着尝试离线安装:
下载:https://pypi.org/project/version
最新版:0.1.1 次新版 0.1.0, 0.1.1 安装有异常,所以尝试0.1.0,0.1.0 直接安装成功
0.1.1 安装异常:1
ImportError: cannot import name 'izip_longest' from 'itertools' (unknown location)
0.1.0 虽然安装成功,但是使用pssh时依旧报异常:1
AttributeError: module 'version' has no attribute 'VERSION'
尝试解决安装 0.1.1 遇到的异常,解决方法:解压安装包,修改 version.py ,将其中的 izip_longest改为zip_longest
安装成功 version 0.1.1 之后依旧报异常:1
AttributeError: module 'version' has no attribute 'VERSION'
所以最终改为先手动离线安装Python2,然后基于Python2 安装 pssh
安装Python2
下载
https://www.python.org/downloads/release/python-275/
https://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz
安装gcc
1 | yum install gcc -y |
缺少 gcc 会报一下异常:
1 | configure: error: no acceptable C compiler found in $PATH |
编译安装
1 | tar -zxvf Python-2.7.5.tgz |
添加软连接
1 | ln -s /usr/local/python27/bin/python /usr/bin/python2 |
这样就可以使用 python2 了1
2
3
4
5python2
Python 2.7.5 (default, Apr 11 2024, 17:05:23)
[GCC 10.3.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
这时是没有pip的,本文先不介绍如何安装pip,我们可以直接使用源码的方式安装pssh
1 | tar -zxvf pssh-2.3.1.tar.gz |
这样就可以使用pssh了。
假如我们开始使用Python3 pip安装了 pssh,但是忘了卸载pssh,这个时候我们离线安装Python2并且装了pssh时,我们会发现 /usr/bin/pssh文件已经存在,且使用pssh时报和Python3一样的错误,原因是因为我们使用的就是Python3的pssh。
解决方式用两个:
- 将 /usr/bin/pssh文件文件中的 #!/usr/bin/python3 改成 #!/usr/bin/python2
- 删除 /usr/bin/pssh ,ln -s /usr/local/python27/bin/pssh /usr/bin/pssh
注:有的环境的命令默认去 /usr/bin 路径查找,有的环境的命令默认去 /usr/local/bin 查找,可根据实际情况调整。
总结
本文总结了两个集群管理命令:clush
和 pssh
的安装和使用方式,给出部分使用示例,并记录了 Python2 和 Python3 分别遇到的问题以及解决过程。