利用clustersh在集群中执行shell脚本

引言


本文将介绍一个叫做clustersh的命令行小工具。

如果你想要在许多刚刚装完linux系统的服务器(可能有上百台)
上统一执行某个shell脚本,那么clustersh就非常适合你。

“刚刚装完linux操作系统”仅仅是为强调clustersh不需要在集群上
安装任何东西,并不是clustersh运行的必要条件。

如果你的集群中包含很多不同种类的Linux发行版系统,clustersh还可以自动
识别操作系统类型,并为你选择执行相应的脚本。

Github地址


https://github.com/DQinYuan/clustersh/tree/master/zhdocs

如果觉得有用的,欢迎给个Star。Github上有更加完善的文档

使用介绍


clustersh的使用非常简单。只需任选一台与集群网络联通的linux机器
,在其上按照如下步骤操作.

假设我们的任务是给集群内所有机器统一安装一个nfs客户端,集群内有centos机器和
ubuntu机器

下载clustersh

去下载地址下载clustersh的二进制文件(利用下面的wget命令),
然后将其移动到linux的PATH路径下:

wget https://github.com/DQinYuan/clustersh/releases/download/v0.1.0/clustersh
chmod a+x clustersh
mv clustersh /usr/local/bin

尝试运行一下命令:

clustersh --help

可以看到相关的帮助信息

准备一个文件夹

之后准备一个文件夹(假设是~/clustershtest):

mkdir ~/clustershtest
cd ~/clustershtest

配置ips

在文件夹下创建一个名叫ips的文件:

touch ips

然后在里面配置上集群中所有机器的ip,
假设我的集群中有5台机器,分别是10.10.108.23,10.10.108.71,
10.10.108.72,10.10.108.73,10.10.108.90。
于是我们可以如下配置ips:

10.10.108.23
10.10.108.71-73
10.10.108.90

这里我们使用了71-73直接指定了一个范围的ip来简化配置,clustersh
目前只支持在ip地址的第四段使用范围指定。

默认情况下配置文件名叫做ips,如果你不想让它叫做ips的花,可以在后面
执行clustersh命令是使用--ips指定。

编写shell脚本

在文件夹下写如下两个脚本:

  • nfs_centos.sh,用于在centos机器上安装nfs-client
#!/bin/sh

yum install -y  nfs-utils
  • nfs_ubuntu.sh,用于在ubuntu上安装nfs-client
#!/bin/sh

apt install -y nfs-common

在开始下一步之前,你最好确保你写的
所有shell脚本在对应操作系统上都测试通过。

执行clustersh

最后在文件夹下执行如下命令即可:

clustersh nfs -U root -P xxxxxx

clustersh会寻找当前目录下的ips文件,将其中
的ip地址读出,依次使用命令行提供的用户名和密码
(这里的用户名为root,密码为xxxxxx)登陆
这些ip。(在实践中,集群大多有统一的用户名和密码,
所以这里就使用统一的用户名与密码登陆集群了)

nfs是shell脚本的简称clustersh会根据服务器
的操作系统类型将其扩充为nfs_操作系统类型.sh
如果nfs_操作系统类型.sh文件不存在的话则扩充为nfs.sh.

比如clustersh登陆到一台centos服务器后,发现
操作系统是centos,于是就会尝试寻找nfs_centos.sh
如果有的话就执行它,没有的话则执行nfs.sh

如果在集群中还有更多的操作系统类型,请以如下格式命名脚本:

简称_操作系统类型.sh

clustersh当前支持识别的操作系统类型有:

操作系统类型
centos
rhel
aliyun
fedora
debian
ubuntu
raspbian

你也可以再提供一个简称.sh用于在操作系统类型无法识别或者
没有提供针对该种操作系统的脚本时执行。

如果你写的脚本对所有操作系统都通用的话,你直接给一个简称.sh即可。

查看输出

虽然shell脚本在相应的操作系统上都测试通过了,
但是在集群中某些机器运行时还是有可能因为一些
难以预料的原因(比如磁盘空间不足,DNS配置错误等等)
失败,clustersh在运行时会打印每台机器运行的成败情况,
对于少数失败的机器,最好手动登陆上去完成操作。

clustersh fail

比如从上面的输出中看到10.10.108.41因为某些原因没能成功
执行脚本,最好手工登陆上去操作,不过这种情况属于少数,
并不会花费太多的精力。

案例源代码

更多特性


cluster还有一个比较重要的特性就是,在你的shell脚本中,可以使用当前工作目录及其子目录的任意文件,因为这些目录与文件都会被clustersh自动拷贝到目标服务器上去。

对于集群中的每一台服务器,clustersh example的执行流程如下:

  • 将当前工作及其子目录中的所有文件拷贝到目标服务器上
  • 识别目标服务器类型(centos,ubuntu等)
  • 根据目标服务器类型,查看用户是否提供针对该操作系统的脚本(比如example_centos.sh),如果提供,则执行;反之,直接执行shname.sh

clustersh summary

发布了35 篇原创文章 · 获赞 113 · 访问量 18万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览