集群管理命令总结

前言

在进行TPC性能测试时用到两个集群管理命令:clushpssh,这俩命令都可以在多台服务器上并发执行相同命令,其中个人比较推荐 clush,因为感觉 clush 比较好用,本文来总结一下 clushpssh 的安装配置和使用。

Python

clushpssh 都是基于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,对应版本如下:

  • python 2.7.x (2.7.5)
  • ClusterShell 1.9.2
  • PyYAML 6.0.1
  • pathlib 1.0.1
在线安装

能连外网

pip install pathlib
pip install ClusterShell

离线安装

不能连外网

先下载对应的安装包,上传到服务器

  • ClusterShell
    https://pypi.org/project/ClusterShell/#files
    https://files.pythonhosted.org/packages/d0/24/1d574c46a1833da20e17037ab039646e788c9411c9132f91b007be44ddb3/ClusterShell-1.9.2.tar.gz

  • PyYAML
    https://pypi.org/project/PyYAML/#files
    https://files.pythonhosted.org/packages/cd/e5/af35f7ea75cf72f2cd079c95ee16797de7cd71f29ea7c68ae5ce7be1eda0/PyYAML-6.0.1.tar.gz

  • pathlib
    https://pypi.org/project/pathlib/#files
    https://files.pythonhosted.org/packages/ac/aa/9b065a76b9af472437a0059f77e8f962fe350438b927cb80184c32f075eb/pathlib-1.0.1.tar.gz

在通过下面的里面离线安装

pip 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版本)(安装时自动创建)

tree /usr/etc/clustershell//usr/etc/clustershell/
├── clush.conf
├── clush.conf.d
│   ├── README
│   ├── sshpass.conf.example
│   └── sudo.conf.example
├── groups.conf
├── groups.conf.d
│   ├── genders.conf.example
│   ├── README
│   ├── slurm.conf.example
│   └── xcat.conf.example
├── groups.d
│   ├── cluster.yaml.example
│   ├── local.cfg
│   └── README
└── topology.conf.example3 directories, 13 files

默认的组配置文件:/usr/etc/clustershell/groups.d/local.cfg

adm: example0
oss: example4 example5
mds: example6
io: example[4-6]
compute: example[32-159]
gpu: example[156-159]
all: example[4-6,32-159]

也可以新建 /usr/etc/clustershell/groups 配置文件,/usr/etc/clustershell/groups的优先级要比 /usr/etc/clustershell/groups.d/local.cfg 的优先级高

echo "all: 192.168.1.[1-212]" > /usr/etc/clustershell/groups

修改 ssh 端口号
clush.conf

ssh_options: -p 6233

其他配置:

1、.ssh/config

StrictHostKeyChecking no

可参考:Linux 批量添加 known_hosts

2、/etc/ssh/sshd_config 修改 MaxStartups 1000

#MaxStartups 10:30:100
MaxStartups 1000service sshd restart

修改这个原因是因为默认值为10,当并发执行scp的数量超过10时,会存在部分失败,比如我的集群机器数量为22,超过了10,就会存在这个问题。
参考:https://www.coder.work/article/1884598

3、免密登录

简单使用

clush
clush -a pwd
# 汇总和排序
clush -a pwd | clubak -c

clush -a 进入交互式模式

clush -a
Enter 'quit' to leave this interactive mode
Working with nodes: 192.168.1.[1-22]
clush>
pwd
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

交互式模式不支持 clubak

clubak

官方文档: https://clustershell.readthedocs.io/en/latest/tools/clubak.html
-b 和 -c 参数效果一样

cat file
node17: MD5 (cstest.py) = 62e23bcf2e11143d4875c9826ef6183f
node14: MD5 (cstest.py) = 62e23bcf2e11143d4875c9826ef6183f
node16: MD5 (cstest.py) = e88f238673933b08d2b36904e3a207df
node15: MD5 (cstest.py) = 62e23bcf2e11143d4875c9826ef6183f
clubak -b < file
---------------
node[14-15,17] (3)
---------------MD5 (cstest.py) = 62e23bcf2e11143d4875c9826ef6183f
---------------
node16
---------------MD5 (cstest.py) = e88f238673933b08d2b36904e3a207dfclubak -c < file
---------------
node[14-15,17] (3)
---------------MD5 (cstest.py) = 62e23bcf2e11143d4875c9826ef6183f
---------------
node16
---------------MD5 (cstest.py) = e88f238673933b08d2b36904e3a207dfclubak -bL < file
node[14-15,17]:  MD5 (cstest.py) = 62e23bcf2e11143d4875c9826ef6183f
node16:  MD5 (cstest.py) = e88f238673933b08d2b36904e3a207df

scp

从 1 节点传到其他节点

scp -P 6233 192.168.1.1:~/spark-defaults.conf /opt/spark2/conf/

其他

其他参数或者功能可以自己尝试学习使用。

参数

clush
clush -h
Usage: clush [options] commandOptions:--version             show program's version number and exit-h, --help            show this help message and exit-s GROUPSOURCE, --groupsource=GROUPSOURCEoptional groups.conf(5) group source to use-n, --nostdin         don't watch for possible input from stdin--groupsconf=FILE     use alternate config file for groups.conf(5)--conf=FILE           use alternate config file for clush.conf(5)-O KEY=VALUE, --option=KEY=VALUEoverride any key=value clush.conf(5) optionsSelecting target nodes:-w NODES            nodes where to run the command-x NODES            exclude nodes from the node list-a, --all           run command on all nodes-g GROUP, --group=GROUPrun command on a group of nodes-X GROUP            exclude nodes from this group--hostfile=FILE, --machinefile=FILEpath to file containing a list of target hosts--topology=FILE     topology configuration file to use for tree mode--pick=N            pick N node(s) at random in nodesetOutput behaviour:-q, --quiet         be quiet, print essential output only-v, --verbose       be verbose, print informative messages-d, --debug         output more messages for debugging purpose-G, --groupbase     do not display group source prefix-L                  disable header block and order output by nodes-N                  disable labeling of command line-P, --progress      show progress during command execution-b, --dshbak        gather nodes with same output-B                  like -b but including standard error-r, --regroup       fold nodeset using node groups-S, --maxrc         return the largest of command return codes--color=WHENCOLOR   whether to use ANSI colors (never, always or auto)--diff              show diff between gathered outputs--outdir=OUTDIR     output directory for stdout files (OPTIONAL)--errdir=ERRDIR     output directory for stderr files (OPTIONAL)File copying:-c, --copy          copy local file or directory to remote nodes--rcopy             copy file or directory from remote nodes--dest=DEST_PATH    destination file or directory on the nodes-p                  preserve modification times and modesConnection options:-f FANOUT, --fanout=FANOUTuse a specified fanout-l USER, --user=USERexecute remote command as user-o OPTIONS, --options=OPTIONScan be used to give ssh options-t CONNECT_TIMEOUT, --connect_timeout=CONNECT_TIMEOUTlimit time to connect to a node-u COMMAND_TIMEOUT, --command_timeout=COMMAND_TIMEOUTlimit time for command to run on the node-m MODE, --mode=MODErun mode; define MODEs in <confdir>/*.conf-R WORKER, --worker=WORKERworker name to use for command execution ('exec','rsh', 'ssh', etc. default is 'ssh')--remote=REMOTE     whether to enable remote execution: in tree mode,'yes' forces connections to the leaf nodes forexecution, 'no' establishes connections up to the leafparent nodes for execution (default is 'yes')
clubak
clubak -h
Usage: clubak [options]Options:--version             show program's version number and exit-h, --help            show this help message and exit-s GROUPSOURCE, --groupsource=GROUPSOURCEoptional groups.conf(5) group source to use--groupsconf=FILE     use alternate config file for groups.conf(5)Output behaviour:-q, --quiet         be quiet, print essential output only-v, --verbose       be verbose, print informative messages-d, --debug         output more messages for debugging purpose-G, --groupbase     do not display group source prefix-L                  disable header block and order output by nodes-N                  disable labeling of command line-b, -c, --dshbak    gather nodes with same output-B                  like -b but including standard error-r, --regroup       fold nodeset using node groups-S SEPARATOR, --separator=SEPARATORnode / line content separator string (default: ':')-F, --fast          faster but memory hungry mode-T, --tree          message tree trace mode--interpret-keys=INTERPRET_KEYSwhether to interpret keys (never, always or auto)--color=WHENCOLOR   whether to use ANSI colors (never, always or auto)--diff              show diff between gathered outputs--outdir=OUTDIR     output directory for stdout files (OPTIONAL)--errdir=ERRDIR     output directory for stderr files (OPTIONAL)

python3

python3 安装完 clush 之后,直接使用会报错

clush -a
clush: External error: Group source error (GroupResolverSourceError: <default>)

最开始不止如何解决,所以对于默认安装python3的服务器依旧选择先手动安装python2再用python2安装clush比较麻烦,后来发现异常原因是 python3 安装 clush 时自动创建的配置文件路径不对,修改一下路径即可解决。
默认安装路径:/usr/local/etc/clustershell 正确路径:/etc/clustershell 或 /usr/etc/clustershell

mv /usr/local/etc/clustershell /etc/

旧版

最开始是基于旧版(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

安装方法:

## 该安装包只能使用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 进行安装

在线安装
pip install pssh
离线安装

https://files.pythonhosted.org/packages/60/9a/8035af3a7d3d1617ae2c7c174efa4f154e5bf9c24b36b623413b38be8e4a/pssh-2.3.1.tar.gz

 pip install pssh-2.3.1.tar.gz

配置

clush 一样也需要配置:

1、.ssh/config

StrictHostKeyChecking no

可参考:Linux 批量添加 known_hosts

2、/etc/ssh/sshd_config 修改 MaxStartups 1000

#MaxStartups 10:30:100
MaxStartups 1000service sshd restart

修改这个原因是因为默认值为10,当并发执行scp的数量超过10时,会存在部分失败,比如我的集群机器数量为22,超过了10,就会存在这个问题。
参考:https://www.coder.work/article/1884598

3、免密登录

使用示例

pssh -h /root/dkl/host_list.txt -t0 "scp -P 6233 192.168.1.1:/root/dkl/test.sh /tmp/"

host_list.txt

root@192.168.1.1:6233
root@192.168.1.2:6233
root@192.168.1.3:6233
root@192.168.1.4:6233
root@192.168.1.5:6233
root@192.168.1.6:6233
root@192.168.1.7:6233
root@192.168.1.8:6233
root@192.168.1.9:6233
root@192.168.1.10:6233
root@192.168.1.11:6233
root@192.168.1.12:6233
root@192.168.1.13:6233
root@192.168.1.14:6233
root@192.168.1.15:6233
root@192.168.1.16:6233
root@192.168.1.17:6233
root@192.168.1.18:6233
root@192.168.1.19:6233
root@192.168.1.20:6233
root@192.168.1.21:6233
root@192.168.1.22:6233

pssh 只能后台运行,不会有返回值,也没有交互式模式,所以个人感觉不如clush好用。

参数

 pssh --help
Usage: pssh [OPTIONS] command [...]Options:--version             show program's version number and exit--help                show this help message and exit-h HOST_FILE, --hosts=HOST_FILEhosts file (each line "[user@]host[:port]")-H HOST_STRING, --host=HOST_STRINGadditional host entries ("[user@]host[:port]")-l USER, --user=USER  username (OPTIONAL)-p PAR, --par=PAR     max number of parallel threads (OPTIONAL)-o OUTDIR, --outdir=OUTDIRoutput directory for stdout files (OPTIONAL)-e ERRDIR, --errdir=ERRDIRoutput directory for stderr files (OPTIONAL)-t TIMEOUT, --timeout=TIMEOUTtimeout (secs) (0 = no timeout) per host (OPTIONAL)-O OPTION, --option=OPTIONSSH option (OPTIONAL)-v, --verbose         turn on warning and diagnostic messages (OPTIONAL)-A, --askpass         Ask for a password (OPTIONAL)-x ARGS, --extra-args=ARGSExtra command-line arguments, with processing forspaces, quotes, and backslashes-X ARG, --extra-arg=ARGExtra 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 itExample: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime

Python3

Python3 安装 pssh 后有异常,不能使用,可能是因为不支持 Python3。记录一下异常解决过程

No module named ‘version’
pssh
Traceback (most recent call last):File "/usr/local/bin/pssh", line 26, in <module>from psshlib.cli import common_parser, common_defaultsFile "/usr/local/lib/python3.9/site-packages/psshlib/cli.py", line 9, in <module>import version
ModuleNotFoundError: No module named 'version'

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 安装异常:

ImportError: cannot import name 'izip_longest' from 'itertools' (unknown location)

0.1.0 虽然安装成功,但是使用pssh时依旧报异常:

AttributeError: module 'version' has no attribute 'VERSION'

尝试解决安装 0.1.1 遇到的异常,解决方法:解压安装包,修改 version.py ,将其中的 izip_longest改为zip_longest


安装成功 version 0.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

yum install gcc -y
#yum install g++ -y

缺少 gcc 会报一下异常:

configure: error: no acceptable C compiler found in $PATH

编译安装

tar -zxvf Python-2.7.5.tgz
cd Python-2.7.5/
./configure --prefix=/usr/local/python27
make
make install

添加软连接

ln -s /usr/local/python27/bin/python /usr/bin/python2

这样就可以使用 python2 了

python2
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

tar -zxvf pssh-2.3.1.tar.gz
cd pssh-2.3.1/
python2 setup.py install
ln -s /usr/local/python27/bin/pssh /usr/bin/pssh

这样就可以使用pssh了。

假如我们开始使用Python3 pip安装了 pssh,但是忘了卸载pssh,这个时候我们离线安装Python2并且装了pssh时,我们会发现 /usr/bin/pssh文件已经存在,且使用pssh时报和Python3一样的错误,原因是因为我们使用的就是Python3的pssh。
解决方式用两个:

  1. 将 /usr/bin/pssh文件文件中的 #!/usr/bin/python3 改成 #!/usr/bin/python2
  2. 删除 /usr/bin/pssh ,ln -s /usr/local/python27/bin/pssh /usr/bin/pssh

注:有的环境的命令默认去 /usr/bin 路径查找,有的环境的命令默认去 /usr/local/bin 查找,可根据实际情况调整。

总结

本文总结了两个集群管理命令:clushpssh 的安装和使用方式,给出部分使用示例,并记录了 Python2 和 Python3 分别遇到的问题以及解决过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619202.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读所罗门的密码笔记20_更好的自己

1. 民营部门 1.1. 障碍最大的一步&#xff0c;与履行协议所需要的人才和技能有关 1.2. 多样性很好&#xff0c;不要过分依赖任何一种资源&#xff0c;因为政府会出于政治原因淡化问题&#xff0c;不尊重科学&#xff0c;甚至退出协议 1.2.1. 民营部门和非政府组织的强大联盟…

在Mac中打开终端的3种方法

在使用Mac时&#xff0c;有时需要深入研究设置&#xff0c;或者完成一些开发人员级的命令行任务。为此&#xff0c;你需要终端应用程序来访问macOS上的命令行。下面是如何启动它。 如何使用聚焦搜索打开终端 也许打开终端最简单、最快的方法是通过聚焦搜索。要启动聚焦搜索&a…

算法1: 素数个数统计

统计n以内的素数个数 素数&#xff1a;只能被1和自身整除的自然数&#xff0c;0和1除外&#xff1b; 举例&#xff1a; 输入&#xff1a;100 输出&#xff1a;25 import java.util.*; class Test1{public static void main(String[] args){int a 100; //输入数字//…

rocketmq和rabbitmq总是分不清?

1. 官方解答 摘自百度搜索&#xff1a; 2. 通俗易懂的回答

CentOS7离线升级OpenSSH_8.8p1

一、环境 centos7.9,升级openssh到8.8p1最新版本 二、下载升级包 # openssl和zlib为相关依赖 wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.8p1.tar.gz wget https://www.openssl.org/source/openssl-1.1.1j.tar.gz wget http://www.zlib.net/zl…

C语言之offsetof实现分析(九十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

计算机网络——实现smtp和pop3邮件客户端

实验目的 运用各种编程语言实现基于 smtp 协议的 Email 客户端软件。 实验内容 1. 选择合适的编程语言编程实现基于 smtp 协议的 Email 客户端软件。 2. 安装 Email 服务器或选择已有的 Email 服务器&#xff0c;验证自己的 Email 客户端软件是否能进行正常的 Email 收发功…

【web网页制作】html+css旅游家乡山西主题网页制作(3页面)【附源码】

山西旅游网页目录 涉及知识写在前面一、网页主题二、网页效果Page1、景点介绍Page2、酒店精选|出行攻略Page3、景色欣赏 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码4.1 主页模块源码4.2 源码获取方式 作者寄语 涉及知识 山西旅游主题网页制作&am…

JVM虚拟机(五)强引用、软引用、弱引用、虚引用

目录 一、强引用二、软引用三、弱引用四、虚引用五、总结 引文&#xff1a; 在 Java 中一共存在 4 种引用&#xff1a;强、软、弱、虚。它们主要指的是&#xff0c;在进行垃圾回收的时候&#xff0c;对于不同的引用垃圾回收的情况是不一样的。下面我们就一起来看一下这 4 种引用…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题6

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书&#xff0c;赛题&#xff0c;解析等资料&#xff0c;知识点培训服务 添加博主wx&#xff1a;liuliu548…

2440栈的实现类型、b系列指令、汇编掉用c、c调用汇编、切换工作模式、初始化异常向量表、中断处理、

我要成为嵌入式高手之4月11日51ARM第六天&#xff01;&#xff01; ———————————————————————————— b指令 标签&#xff1a;表示这条指令的名称&#xff0c;可跳转至标签 b指令&#xff1a;相当于goto&#xff0c;可随意跳转 如&#xff1a;fini…

代理模式(结构型模式)

目录 1、概述 2、结构 2.1、角色分类 2.2、类图 3、静态代理 3.1、案例类图 3.2、案例代码 4、JDK 动态代理 4.1、案例代码 4.2、底层原理 4.3、执行流程说明 5、CGLib 动态代理 5.1、案例代码 6、三种代理的对比 6.1、JDK代理和CGLib代理 6.2、动态代理和静态…