当前位置: 首页 > 科技观察

ClusterShell:在集群节点上并行运行命令的好工具

时间:2023-03-12 06:09:28 科技观察

过去我们写了两篇关于如何在多个远程服务器上并行运行命令的文章:ParallelSSH(PSSH)和DistributedShell(DSH)。今天,我们将讨论相同类型的主题,但它允许我们在集群节点上执行相同的操作。您可能会想,我可以编写一个小的shell脚本来实现这一点,而不是安装这些第三方包。当然,你是对的,如果你要在十几个远程系统中运行一些命令,那么你不需要使用它。但是,您的脚本将需要一些时间才能完成此任务,因为它是按顺序运行的。想一想如果你在超过一千台服务器上运行一些命令会是什么样子?在这种情况下,您的脚本几乎没有用处。此外,完成任务需要很长时间。因此,为了克服此类问题和情况,我们需要能够在远程计算机上并行运行命令。为此,我们需要在并行应用程序中使用它。我希望这个解释能消除您对并行实用程序的疑虑。ClusterShellClusterShell是一个事件驱动的开源Python库,旨在在服务器场或大型Linux集群上并行运行本地或远程命令。(clush是ClusterShell)。它将处理在HPC集群上遇到的常见问题,例如在节点组上运行、使用优化的执行算法运行分布式命令、收集结果并合并相同的输出或检索返回代码。ClusterShell可以利用系统上已安装的现有远程shell工具,例如SSH。ClusterShell的主要目标是通过为开发人员提供轻量级但可扩展的PythonAPI来改进高性能集群的管理。它还提供方便的命令行工具,如clush、clubak和cluset/nodeset,允许传统的shell脚本利用这个库的一些功能。ClusterShell是用Python编写的,它需要Python(v2.6+或v3.4+)才能在您的系统上运行。如何在Linux上安装ClusterShell?ClusterShell包在大多数发行版的官方包管理器中都可用。因此,请使用您的发行版的包管理器工具进行安装。对于Fedora系统,使用DNF命令安装clustershell。$sudodnfinstallclustershell如果系统默认是Python2,这会安装Python2的模块和工具,你可以运行以下命令来安装Python3的开发包。$sudodnfinstallpython3-clustershell在执行clustershell安装之前,请确保您已在系统上启用EPEL存储库。RHEL/CentOS系统,使用YUM命令安装clustershell。$sudoyuminstallclustershell如果系统默认为Python2,这会安装Python2模块和工具,你可以运行以下命令来安装Python3开发包。$sudoyuminstallpython34-clustershell对于openSUSELeap系统,使用Zypper命令安装clustershell。$sudozypperinstallclustershell如果系统默认为Python2,这会安装Python2模块和工具,你可以运行以下命令来安装Python3开发包。$sudozypperinstallpython3-clustershell对于Debian/Ubuntu系统,使用APT-GET命令或APT命令安装clustershell。$sudoaptinstallclustershell如何在Linux中使用PIP安装ClusterShell?ClusterShell可以使用PIP安装,因为它是用Python编写的。在执行clustershell安装之前,请确保您的系统上启用了Python和PIP。$sudopipinstallClusterShell如何在Linux上使用ClusterShell?与pssh和dsh等其他实用程序相比,它是一个简单明了的优秀工具。它有许多选项可以并行远程执行。在开始使用clustershell之前,请确保您已在系统上启用无密码登录。以下配置文件定义了系统范围的默认值。你不需要在这里修改任何东西。$cat/etc/clustershell/clush.conf如果你想创建一个服务器组,那也可以。默认有一些示例,根据您的要求执行相同的操作。$cat/etc/clustershell/groups.d/local.cfg要从给定节点获取信息,只需按以下格式运行clustershell命令:$clush-w192.168.1.4,192.168.1.9cat/proc/version192.168.1。9:Linux版本4.15.0-45-generic([emailprotected])(gcc版本7.3.0(Ubuntu7.3.0-16ubuntu3))#48-UbuntuSMPTueJan2916:28:13UTC2019192.168.1.4:Linux版本3.10.0-957.el7.x86_64([电子邮件保护])(gcc版本4.8.520150623(RedHat4.8.5-36)(GCC))#1SMPThuNov823:39:32UTC2018选项:-w:要在其上运行命令的节点。您可以使用正则表达式而不是使用完整的主机名和IP:$clush-w192.168.1.[4,9]uname-r192.168.1.9:4.15.0-45-generic192.168.1.4:3.10.0-957.el7.x86_64或者,如果服务器在同一IP系列中,则可以使用以下格式:$clush-w192.168.1.[4-9]date192.168.1.6:MonMar421:08:29IST2019192.168.1.7:3月4日星期一21:08:29IST2019192.168.1.8:3月4日星期一21:08:29IST2019192.168.1.5:3月4日星期一09:16:30CST29IST2019192.168.1.4:3月星期一409:16:30CST2019clustershell允许我们以批处理模式运行命令。使用以下格式来实现这个目标的:$clush-w192.168.1.4,192.168.1.9-bEnter'quit'离开这个交互模式Workingwithnodes:192.168.1.[4,9]clush>hostnamectl----------------192.168.1.4----------------静态主机名:CentOS7.2daygeek.com图标名称:computer-vm机箱:vm机器ID:002f47b82af248f5be1d67b67e03514cBootID:f9b37a073c534dec8b236885e754cb56虚拟化:kvm操作系统:CentOSLinux7(Core)CPE操作系统名称:cpe:/o:centos:centos:7内核:Linux3.10.0-957.el7.x86_64架构:x86-64---------------192.168.1.9----------------静态主机名:Ubuntu18图标名称:computer-vm机箱:vm机器ID:27f6c2febda84dc881f28fd145077187启动ID:f176f2eb45524d4f906d12e2b5716649虚拟化:oracle操作系统:Ubuntu18.04.2LTS内核:Linux4.15.0-45-generic架构:x86-64clush>free-m----------------192.168.1.4-------------已使用的免费共享buff/缓存可用内存总数:183864121719978969Swap:204702047---------------192.168.1.9----------------使用的免费共享buff/缓存可用内存总数:1993352106715731473Swap:142501425clush>w--------------192.168.1.4----------------09:21:14up3:21,3users,loadaverage:0.00,0.01,0.05USERTTYFROMLOGIN@IDLEJCPUPCPUWHATdaygeek:0:006:02?xdm?1:280.30s/usr/libexec/gnome-session-binary--sessiongnome-classicdaygeekpts/0:006:033:17m0.06s0.06sbashdaygeekpts/1192.168.1.606:0352:260.10s0.10s-bash----------------192.168.1.9------------21:13:12向上3:12,1user,loadaverage:0.08,0.03,0.00USERTTYFROMLOGIN@IDLEJCPUPCPUWHATdaygeekpts/0192.168.1.620:4229:410.05s0.05s-bashclush>如果在一组节点上则退出To运行此命令,使用以下格式:$clush-w@devuptimeor$clush-gdevuptimeor$clush--group=devuptime192.168.1.9:21:10:10up3:09,1user,loadaverage:0.09,0.03,0.01192.168.1.4:09:18:12up3:18,3users,loadaverage:0.01,0.02,0.05如果要在多个节点组上运行该命令,请使用以下格式:$clush-w@dev,@uatuptime或$clush-gdev,uatuptime或$clush--group=dev,uatuptime192.168.1.7:07:57:19up59分钟,1个用户,平均负载:0.08、0.03,0.00192.168.1.9:20:27:20up1:00,1user,loadaverage:0.00,0.00,0.00192.168.1.5:08:57:21up59min,1user,loadaverage:0.00,0.01、0.05clustershell允许我们将文件复制到远程机器将本地文件或目录复制到同一个远程节点:$clush-w192.168.1.[4,9]--copy/home/daygeek/passwd-up.sh我们可以通过运行来验证它:$clush-w192.168.1.[4,9]ls-lh/home/daygeek/passwd-up.sh192.168.1.4:-rwxr-xr-x。1daygeekdaygeek159Mar409:00/home/daygeek/passwd-up.sh192.168.1.9:-rwxr-xr-x1daygeekdaygeek159Mar420:52/home/daygeek/passwd-up.sh复制一个本地文件或目录到不同位置的远程节点:$clush-guat--copy/home/daygeek/passwd-up.sh--dest/tmp我们可以通过运行来验证这一点:$clush--group=uatls-lh/tmp/passwd-up.sh192。168.1.7:-rwxr-xr-x。1daygeekdaygeek159Mar607:44/tmp/passwd-up.sh将文件或目录从远程节点复制到本地系统:$clush-w192.168.1.7--rcopy/home/daygeek/Documents/magi.txt--dest/tmp我们可以通过运行来验证这一点:$ls-lh/tmp/magi.txt.192.168.1.7-rw-r--r--1daygeekdaygeek35Mar620:24/tmp/magi.txt.192.168.1.7