在运维实战中,如果有若干台数据库服务器,想对这些服务器进行同等动作,比如查看它们当前的即时负载情况,查看它们的主机名,分发文件等等,这个时候该怎么办?一个个登陆服务器去操作,太傻帽了!写个shell去执行,浪费时间~~

这种情况下,如果集群数量不多的话,选择一个轻量级的集群管理软件就显得非常有必要了。ClusterShell就是这样一种小的集群管理工具,原理是利用ssh,可以说是Linux系统下非常好用的运维利器!
选择了clustershell这个软件(也简称clush),原因如下: 

1)安装方便。一条指令就能轻松安装。 

2)配置方便。很多集群管理软件都需要在所有的服务器上都安装软件,而且还要进行很多的连接操作,clustershell就相当的方便了,仅仅需要所有机器能够ssh无密码登录即可,然后只在一台服务器上安装clustershell即可。 

3)使用方便。clustershell的命令相对来说非常简单,只有一两个指令以及三四个参数需要记。

下面依据实例对clush的使用进行说明

现在有四台服务器,主机名分别是ops-server1、ops-server2、ops-server3、ops-server4

需求:

利用ops-server1服务器控制其他三台服务器进行集群操作.

那么只需要在ops-server1上安装clustershell,并前提做好ops-server1主机和其他三台机器的ssh无密码登陆的信任关系即可.

下面是ops-server1服务器上的操作记录:
1)做好主机映射关系,将ip和主机名对应起来,使用比较方便。

[root@ops-server1 ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.102 ops-server2

192.168.1.118 ops-server3

192.168.1.108 ops-server4

2)做好ssh信任关系(最好事后验证下无密码信任关系)

[root@ops-server1 ~]# ssh-keygen -t rsa (产生本机的公私钥文件,否则没法做ssh信任关系,也没法使用ssh-copy-id命令)

[root@ops-server1 ~]# ssh-copy-id ops-server2

[root@ops-server1 ~]# ssh-copy-id ops-server3

[root@ops-server1 ~]# ssh-copy-id ops-server4

3)安装clush,然后配置clush(手动创建groups文件)

安装clush

# yum install -y clustershell

配置clush:
在/etc/clustershell目录下,手动创建groups文件

# touch /etc/clustershell/groups

# vim /etc/clustershell/groups

可以将groups文件里默认的示例内容全部注释,然后按照自己的集群管理需求自定义配置的组对应关系,(再次强调下:groups文件中的all组对应是必须要配置的,clush 有 -a 这个参数,主机间用空格分离。)
如下,配置组all,组db等的对应关系,这些组不是真实存在机器上的用户组,而是在groups文件中设置的别名而已,用以批量操作。
总之,可以在groups文件里设置多组对应关系,然后对组对应的主机进行远程操控!!!

[root@ops-server1 clustershell]# cat groups

#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]
db: ops-server[2,3]
all: ops-server[2,3,4]

解下来就可以利用clush管理命令进行远程机器集群管理了,常用的是下面几个参数:
-g 后面指定设置的组
-a 表示所有的组
-w 后面跟主机节点,多个主机中间用逗号隔开
-x 表示去掉某个节点进行操作。后面跟主机节点,多个主机中间用逗号隔开
-X 表示去掉某个组进行操作,多个组之间用逗号隔开
-b 相同输出结果合并

注意:clush 是不支持环境变量的$PATH

注意,clush操作远程机器,执行动作要放在双引号或单引号内进行

[root@ops-server1 clustershell]# clush -g db uptime

ops-server2: 22:49:35 up 4 days, 14:24, 0 users, load average: 0.00, 0.01, 0.05

ops-server3: 22:49:42 up 11:13, 1 user, load average: 0.00, 0.01, 0.05

[root@ops-server1 clustershell]# clush -a uptime

ops-server2: 22:49:49 up 4 days, 14:24, 0 users, load average: 0.00, 0.01, 0.05

ops-server4: 22:49:42 up 8 days, 30 min, 0 users, load average: 0.00, 0.01, 0.05

ops-server3: 22:49:57 up 11:13, 1 user, load average: 0.00, 0.01, 0.05

[root@ops-server1 clustershell]# clush -a hostname

ops-server4: ops-server4

ops-server3: ops-server3

ops-server2: ops-server2

[root@ops-server1 clustershell]# clush -a "echo asdfsdf > /tmp/test"

[root@ops-server1 clustershell]# clush -a "cat /tmp/test"

ops-server4: asdfsdf

ops-server3: asdfsdf

ops-server2: asdfsdf

[root@ops-server1 clustershell]# clush -w ops-server3 'ifconfig|grep "inet addr"|grep 192.168'

ops-server3: inet addr:192.168.1.118 Bcast:192.168.1.255 Mask:255.255.255.0

[root@ops-server1 clustershell]# clush -w ops-server3,ops-server4 'ifconfig|grep "inet addr"|grep 192.168'

ops-server4: inet addr:192.168.1.108 Bcast:192.168.1.255 Mask:255.255.255.0

ops-server3: inet addr:192.168.1.118 Bcast:192.168.1.255 Mask:255.255.255.0

[root@ops-server1 ~]# clush -a hostname

ops-server2: ops-server2

ops-server3: ops-server3

ops-server4: ops-server4

[root@ops-server1 ~]# clush -b -a hostname

---------------

ops-server2

---------------

ops-server2

---------------

ops-server3

---------------

ops-server3

---------------

ops-server4

---------------

ops-server4

[root@ops-server1 ~]# clush -a "cat /etc/issue"

ops-server2: CentOS release 6.8 (Final)

ops-server2: Kernel \r on an \m

ops-server2: 

ops-server4: CentOS release 6.8 (Final)

ops-server4: Kernel \r on an \m

ops-server4: 

ops-server3: CentOS release 6.8 (Final)

ops-server3: Kernel \r on an \m

ops-server3: 

[root@ops-server1 ~]# clush -b -a "cat /etc/issue"

---------------

ops-server[2-4] (3)

---------------

CentOS release 6.8 (Final)

Kernel \r on an \m

[root@ops-server1 ~]# clush -a -x ops-server4 hostname

ops-server3: ops-server3

ops-server2: ops-server2

[root@ops-server1 ~]# clush -a -x ops-server2,ops-server4 hostname

ops-server3: ops-server3

clush进行文件或目录分发:
--copy 表示从本地拷贝文件或目录到远程集群节点上,等于-c
--rcopy 表示从远程集群节点上拷贝文件或目录到本机上
--dest 前面表示本地要复制的文件或目录路径,后面表示远程机器的存放路径。--dest后面可以空格跟目标路径,也可以是=目标路径。  比如--dest /tmp 等同于 --dest=/tmp

本地拷贝文件到远程节点上

[root@ops-server1 ~]# cat test.file

test1

test2

123456

[root@ops-server1 ~]# clush -g db -c /root/test.file --dest /root/

[root@ops-server1 ~]# clush -g db "cat /root/test.file"

ops-server2: test1

ops-server2: test2

ops-server2: 123456

ops-server3: test1

ops-server3: test2

ops-server3: 123456

[root@ops-server1 ~]# clush -w ops-server4 --copy test.file --dest /root/

[root@ops-server1 ~]# clush -w ops-server4 "cat /root/test.file"

ops-server4: test1

ops-server4: test2

ops-server4: 123456

本地拷贝目录到远程节点上(注意,这里面拷贝目录时,不需要跟参数-r)

[root@ops-server1 ~]# mkdir /root/huanqiu

[root@ops-server1 ~]# clush -g db -c /root/huanqiu --dest /root/

[root@ops-server1 ~]# clush -g db "ls -l /root/huanqiu"

ops-server2: total 0

ops-server3: total 0

比如远程拷贝ops-server3和ops-server4节点上的/root/test到本机的/tmp目录下

[root@ops-server1 tmp]# pwd

/tmp

[root@ops-server1 tmp]# clush -w ops-server3,ops-server4 --rcopy /root/test --dest=/tmp/

[root@ops-server1 tmp]# ll

-rw-r--r--. 1 root root 9 Nov 25 02:06 test.ops-server3

-rw-r--r--. 1 root root 19 Nov 25 02:06 test.ops-server4

将所有节点的/etc/passwd文件拷贝到本机的/tmp目录下

[root@ops-server1 tmp]# clush -a --rcopy /etc/passwd --dest=/tmp

[root@ops-server1 tmp]# ll

total 16

-rw-r--r--. 1 root root 901 Nov 25 02:04 passwd.ops-server2

-rw-r--r--. 1 root root 854 Nov 25 02:04 passwd.ops-server3

-rw-r--r--. 1 root root 854 Nov 25 02:04 passwd.ops-server4

-rw-r--r--. 1 root root 9 Nov 25 02:06 test.ops-server3

-rw-r--r--. 1 root root 19 Nov 25 02:06 test.ops-server4

由此可以发现,远程拷贝文件到本机后,会在文件名的后面打上主机名的标记!

另外注意一个参数:
--user=username,这个表示使用clush命令操作时,登陆ssh时使用的用户。

比如:

ops-server1本机(root账号)管理ops-server2节点机的wangshibo账号下的操作,

首先做本机到wangshibo@ops-server2的ssh无密码登陆的信任关系

[root@ops-server1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub wangshibo@ops-server2

wangshibo@ops-server2's password: 

Now try logging into the machine, with "ssh 'wangshibo@ops-server2'", and check in:

.ssh/authorized_keys

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

[root@ops-server1 ~]# ssh wangshibo@ops-server2

[wangshibo@ops-server2 ~]$

接着就可以进行远程管控了。注意:--user参数要紧跟clush后面

[root@ops-server1 ~]# clush -w --user=wangshibo ops-server2 hostname

Usage: clush [options] command

clush: error: option -w: invalid value: '--user=wangshibo'

[root@ops-server1 ~]# clush --user=wangshibo -w ops-server2 hostname

ops-server2: ops-server2

[root@ops-server1 ~]# clush --user=wangshibo -w ops-server2 "echo 123456 > test"

[root@ops-server1 ~]# clush --user=wangshibo -w ops-server2 "cat test"

ops-server2: 123456

登陆ops-server2的wangshibo用户下查看:

[wangshibo@ops-server2 ~]$ ls

test

[wangshibo@ops-server2 ~]$ cat test 

123456

原文地址:http://www.cnblogs.com/kevingrace/p/6099205.html?utm_source=itdadao&utm_medium=referral

运维利器-ClusterShell集群管理的更多相关文章

  1. 运维利器-ClusterShell集群管理操作记录

    在运维实战中,如果有若干台数据库服务器,想对这些服务器进行同等动作,比如查看它们当前的即时负载情况,查看它们的主机名,分发文件等等,这个时候该怎么办?一个个登陆服务器去操作,太傻帽了!写个shell去 ...

  2. 大数据运维尖刀班 | 集群_监控_CDH_Docker_K8S_两项目_腾讯云服务器

    说明:大数据时代,传统运维向大数据运维升级换代很常见,也是个不错的机会.如果想系统学习大数据运维,个人比较推荐通信巨头运维大咖的分享课:https://url.cn/5HIqOOr,主要是实战强.含金 ...

  3. 《跟老男孩学Linux运维:Web集群实战》读书笔记

    Linux 介绍 Linux 安装 Linux 调优 Web 基础 Nginx 应用 LNMP 应用 PHP 缓存加速 Nginx 调优 MySQL 应用 NFS 网络文件共享 Nginx 反向代理与 ...

  4. Clustershell集群管理

    在运维实战中,如果有若干台数据库服务器,想对这些服务器进行同等动作,比如查看它们当前的即时负载情况,查看它们的主机名,分发文件等等,这个时候该怎么办?一个个登陆服务器去操作,太傻帽了!写个shell去 ...

  5. Redis运维实战之集群中的脑裂

    1.对于分布式Redis主从集群来说,什么是脑裂? 所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求.而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客 ...

  6. 运维利器-ClusterShell

    前言 和ansible类似,但是更加高效 安装 yum install -y clustershell clush命令: clush -a 全部 等于 clush -g all clush -g 指定 ...

  7. 运维-安装rabbitmq 集群

    服务器:   online-platform-rabbitmq-01 online-platform-rabbitmq-02 online-platform-rabbitmq-03 绑定HOSTS: ...

  8. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

  9. 轻量级集群管理软件-ClusterShell

    如果集群数量不多的话,选择一个轻量级的集群管理软件就显得非常有必要了.ClusterShell就是这样一种小的集群管理工具,原理是利用ssh,可以说是Linux系统下非常好用的运维工具  cluste ...

随机推荐

  1. Matrix(poj2155)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 25139   Accepted: 9314 Descripti ...

  2. 从零搭建react hooks项目(github有源代码)

    前言 首先这是一个react17的项目,包含项目中常用的路由.状态管理.less及全局变量配置.UI等等一系列的功能,开箱即用,是为了以后启动项目方便,特地做的基础框架,在这里分享出来. 这里写一下背 ...

  3. 比例阀驱动电路后级PWM滤波尖刺如何消除?PWM通过RC低通滤波器模拟DAC

    双头比例阀驱动电路,采用单片机输出2路PWM,分别驱动功率器件(U100的2和4脚),经过U100的8和10脚输出供电电源的高压PWM波形,这个高压PWM经过R104和R114分别采样后经过电流放大器 ...

  4. Java程序设计基础笔记 • 【第1章 初识Java】

    全部章节   >>>> 本章目录 1.1 程序的概念及Java语言介绍 1.1.1 生活中的程序 1.1.2 计算机程序 1.1.3 算法和流程图 1.1.4 实践练习 1.2 ...

  5. 使用 jQuery 选择器获取页面元素后,利用 jQuery 对象的 css() 方法设置其样式。

    查看本章节 查看作业目录 需求说明: 使用 jQuery 选择器获取页面元素后,利用 jQuery 对象的 css() 方法设置其样式. 要求如下: 点击页面的"更改样式"按钮后, ...

  6. 编写Java程序,几个朋友到游乐场游玩,大家投票选择出行方式。使用程序来模拟这一结果。(工厂模式示例Demo)

    查看本章节 查看作业目录 需求说明: 几个朋友到游乐场游玩,大家投票选择出行方式.如果选择"A"最多的话,表示选择的交通工具是公交车(Bus):如果选择"B"最 ...

  7. Eclipse导入Elasticsearch源码

    Eclipse导入Elasticsearch源码的步骤, 基于Elasticsearch 6.2.2的源码版本. 1.安装JDK1.9 Elasticsearch 6.2.2需要JDK1.9编译,否则 ...

  8. Zookeeper基础教程(三):Zookeeper连接使用—zkCli

    上一篇介绍Zookeeper的安装,并介绍了使用ZooInspector连接Zookeeper,这里主要介绍以命令行的形式介绍Zookeeper 假如我们已经安装了Zookeeper集群,集群中的安装 ...

  9. 怎样从 bat 批处理文件调用 PowerShell 脚本

    https://stackoverflow.com/questions/19335004/how-to-run-a-powershell-script-from-a-batch-file https: ...

  10. Autofac实现有条件的DI

    Autofac.Annotation框架是我用.netcore写的一个DI框架,基于Autofac参考 Spring注解方式所有容器的注册和装配,切面,拦截器等都是依赖标签来完成. 开源地址:http ...