文档章节

使用Gearman提高自动化运维的远程执行速度

超爱fitnesse
 超爱fitnesse
发布于 2015/04/17 22:09
字数 1134
阅读 194
收藏 2

在自动化运维时,经常需要用ssh登录一台远程主机,然后执行一条命令,获取结果后,再登录下一台。
每次ssh登录的开销都要0.5秒以上。
所以想到用gearman来替代ssh快速执行远程命令,每次远程执行的开销可以降到0.01秒。
当然是在安全的前提下,可以是集群的机器间互访,肯定不能对公网开放gearman服务端口。

gearman与ssh远程执行时间对比

下面是本地运行pwd,ssh远程运行pwd,gearman远程运行pwd的时间对比:

本地运行: 0毫秒
ssh运行: 129毫秒
gearman运行:10毫秒

ssh和gearman服务器都在本机,实际局域网多机间的ssh需要500毫秒,gearman还是10毫秒。

shen@debian:~$ time pwd
/home/shen

real	0m0.000s
user	0m0.000s
sys	0m0.000s

shen@debian:~$ time sshpass -p 123456 ssh debian 'pwd'
/home/shen

real	0m0.129s
user	0m0.012s
sys	0m0.000s

shen@debian:~$ time echo 'pwd' | gearman -h debian -f run 
/home/shen/gearman-workers

real	0m0.010s
user	0m0.004s
sys	0m0.000s

gearman worker: run 的相关脚本:

shen@debian:~/gearman-workers$ cat run.sh 
#!/bin/bash
read line
$line 2> _run_stderr
echo $? > _run_rc

shen@debian:~/gearman-workers$ cat stderr.sh 
#!/bin/bash
cat _run_stderr

shen@debian:~/gearman-workers$ cat rc.sh 
#!/bin/bash
cat _run_rc

启动gearman worker:

shen@debian:~/gearman-workers$ gearman -h debian -w -f run -- ./run.sh

shen@debian:~/gearman-workers$ gearman -h debian -w -f stderr -- ./stderr.sh 

shen@debian:~/gearman-workers$ gearman -h debian -w -f rc -- ./rc.sh 

gearman -h debian -w -f run -- ./run.sh 相当于开启了一个ssh server,可访问远程结点名称为debian

其他运维时常用的命令:

shen@debian:~$ echo 'df -h'  | gearman -h debian -f run
文件系统                                                容量  已用  可用 已用% 挂载点
rootfs                                                  455G  6.0G  426G    2% /
udev                                                     10M     0   10M    0% /dev
tmpfs                                                   388M  660K  387M    1% /run
/dev/disk/by-uuid/f863a021-7966-4cad-a24a-2670bba22d10  455G  6.0G  426G    2% /
tmpfs                                                   5.0M     0  5.0M    0% /run/lock
tmpfs                                                   1.6G   19M  1.6G    2% /run/shm
/dev/sda1                                               487M  128K  486M    1% /boot/efi
shen@debian:~$ gearman -h debian -s -f stderr
shen@debian:~$ gearman -h debian -s -f rc
0

shen@debian:~$ echo 'ls ~/aabbcd'  | gearman -h debian -f run
shen@debian:~$ gearman -h debian -s -f stderr
ls: 无法访问~/aabbcd: 没有那个文件或目录
shen@debian:~$ gearman -h debian -s -f rc
2

shen@debian:~$ echo 'ps -edf'  | gearman -h debian -f run | grep gearmand
root      4807     1  0 07:32 ?        00:00:00 /usr/local/sbin/gearmand -d
shen      5504  4892  0 08:38 pts/3    00:00:00 grep gearmand

在此输入图片描述

在此输入图片描述

在此输入图片描述

在此输入图片描述

注意:

  • gearman只能在命令执行完后,才会返回结果,
  • gearman不能执行交互式命令,例如top,ssh等,gearman worker将一直卡住。
  • gearman发出的命令不能取消,除非关闭对应的gearman worker。
  • gearman只能执行单一命令, ls | wc之类的复合命令都不能执行。

启动 gearman server:

RedHat:

sudo gearmand -d

Debian:

sudo /usr/local/sbin/gearmand -d

停止 gearman server:

不需要sudo执行

gearadmin --shutdown

远程也可以关闭

shen@debian:~/gearman-workers$ gearadmin -h debian --shutdown
shen@debian:~/gearman-workers$ gearadmin -h debian --workers
Error: Error connecting to debian.

启动 gearman worker:

gearman -h <gearman_server_ip> -w -i <pidfile> -f <worker> -- <command>

停止 gearman worker:

确保启动worker时,实用-i参数生成pid文件

shen@debian:~/gearman-workers$ gearman -h debian -i run.pid -w -f run -- ./run.sh

停止worker

shen@debian:~/gearman-workers$ kill -9 `cat run.pid`

在此输入图片描述

查看远程结点上是否已启动gearman worker:

3个worker: run, stderr, rc 都已启动情况

shen@debian:~$ gearadmin -h debian --workers
34 127.0.0.1 - : stderr
35 127.0.0.1 - : rc
36 127.0.0.1 - :
33 127.0.0.1 - : run
.

3个worker: run, stderr, rc 都未启动情况

shen@debian:~$ gearadmin -h debian --workers
33 127.0.0.1 - :
.

远程结点的gearman server未启动的情况

shen@debian:~$ gearadmin -h debian --workers
Error: Error connecting to debian.

怎么快速启动和关闭远程结点的gearman server和worker

这个时候需要ssh 帮忙了

远程启动gearman server

#准备工作:把远程结点的/usr/local/var/log/gearmand.log权限设为666
sudo chmod 777 /usr/local/var/log/
sudo chmod 666 /usr/local/var/log/gearmand.log

sshpass -p 123456 ssh debian '/usr/local/sbin/gearmand -d'

远程关闭gearman server

shen@debian:~/gearman-workers$ gearadmin -h debian --shutdown

远程启动gearman worker

shen@debian:~/gearman-workers$ cat start_worker_run.sh 
#!/bin/bash
cd $(dirname $(readlink -f $0))
nohup gearman -h debian -i run.pid -w -f run -- ./run.sh &

#必须使用ssh的-f参数
shen@debian:~$ sshpass -p 123456 ssh -f debian '/home/shen/gearman-workers/start_worker_run.sh'

远程关闭gearman worker

shen@debian:~$ sshpass -p 123456 ssh -f debian 'kill -9 `cat /home/shen/gearman-workers/run.pid`'

Gearman参考资料

Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。它的 任务分布非常 简单,简单得可以只需要用脚本即可完成。

Redhat/CentOS上二进制安装gearman

yum install gearmand

Debian/Ubuntu上编译安装gearman: http://my.oschina.net/fitnessefan/blog/349664

官网: http://gearman.org/ 使用入门: http://gearman.org/getting-started/

© 著作权归作者所有

超爱fitnesse
粉丝 28
博文 33
码字总数 44160
作品 0
浦东
QA/测试工程师
私信 提问
运维自动化之ansible使用详解(包括常用模块与playbook使用)

什么是ansible? ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT运维管理工具。这个工具的目标有这么几项:让我们自动化部署APP;自动化管理配...

linuxzkq
2017/04/30
0
0
部署自动化运维服务——Ansible

由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下。部署自动化运维就成为了首先,自动化运维能够帮助工...

cchenyz
2018/08/01
0
0
跳出IT运维怪圈 看南方报业如何主动出击

虽说世界上没有一劳永逸的事情,不过借助某些方案,IT运维倒可做到事半功倍。近日,南方报业传媒集团采用新华三智动远程运维服务解决方案,利用7*24级别安仔的桌面服务,实现IT运维智能化、自...

玄学酱
2018/05/10
0
0
IT运维如何防止陷入中年油腻和“被动遭遇战”危机?

该文化公司成立于 2013 年,他们最初从简单的“PC 服务器 + 二手三层交换 + 托管服务器”这样的硬件架构起步,既要对内满足员工的“上网 + 邮件 + 文件共享 + 存储”,又要对外提供“官网 + ...

陈峻
2017/11/21
0
0
IT运维如何防止陷入“中年油腻”和频繁被动地打“遭遇战”?

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:陈峻 近期,我拜访了一家文化传播公司的 IT 运维总监 Tim,他向我讲述了他的团队是如何像当年玩《大航海时代》那样将 IT 系...

腾讯云社区
2017/11/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

手写RPC框架指北另送贴心注释代码一套

Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的。所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架。 完整代码...

全菜工程师小辉
17分钟前
3
0
【Java】开发收货

简介 谨以此篇,记载开发过程中的一些tips。 编译器 【Shift + F6】可实现变量的联动修改。

Areya
33分钟前
5
0
DOM官方定义

DOM Document Object Model 文档对象模型 DOM的官方定义:W3C的DOM,可以使程序或者脚本(JS或AS\JScript),动态的访问或者操作文档的内容、结构、样式。 DOM只是一个标准,操作网页的标准。...

前端老手
39分钟前
6
0
IT兄弟连 HTML5教程 HTML5的学习线路图 第一阶段学习网页制作

学习HTML5技术可并不是简单学会几个新增的标签而已,HTML5现在可以说是前端所有技术的代名词。需要学习的语言和工具不仅多,对于刚接触他们的新人会感觉很乱。另外,前端开发也会细分很多个开...

老码农的一亩三分地
40分钟前
6
0
可见性有序性,Happens-before来搞定

写在前面 上一篇文章并发 Bug 之源有三,请睁大眼睛看清它们 谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发 Bug 为了解决 CPU,内存,IO ...

tan日拱一兵
56分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部