运维利器-ClusterShell

前言

和ansible类似,但是更加高效

安装

yum install -y clustershell

clush命令:
clush -a 全部 等于 clush -g all
clush -g 指定组
clush -w 操作主机名字,多个主机之间用逗号隔开
clush -g 组名 -c --dest 文件群发 (-c等于--copy)\

配置groups

vim /etc/clustershell/groups all: host1 host2

实例

[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 =================================================================== 由于clush是基于ssh和scp命令进行封装的一个工具,默认的ssh端口如果不是22,那么在执行clush命令的时候需要指明端口: 1)进行文件传输时, 需要加 -o -P57891 即大写P 2)进行直接访问(批量执行操作命令)时, 需要加 -o -p57891 即小写P # clush -g virtual -o -P22222 -c /data/ntpcheck.sh --dest /data/ # clush -g virtual -o -p22222 /etc/init.d/nginx restart *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************

__EOF__

本文作者带着泥土
本文链接https://www.cnblogs.com/obitoma/p/14203199.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   带着泥土  阅读(351)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多