简单来说,gearman就是用来分配任务的.
一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。
Client:请求的发起者,可以是 C,PHP,Perl,MySQL UDF 等等。
Job:请求的调度者,用来负责协调把 Client 发出的请求转发给合适的 Worker。
Worker:请求的处理者,可以是 C,PHP,Perl 等等。
因为 Client,Worker 并不限制用一样的语言,所以有利于多语言多系统之间的集成。
甚至我们通过增加更多的 Worker,可以很方便的实现应用程序的分布式负载均衡架构。
如何查看某个gearman的work服务是否正常工作
1, 先进gm.conf中查看该work注册在哪台服务器上,如
"tob_internal_download_docx":{"host":["192.168.1.199:4730"]},
则进入开发环境 ssh root@192.168.1.199, 输入命令,返回结果
root@ifchange-dev:~# /opt/app/gearmand/bin/gearadmin --status | grep tob_internal_download_docx
tob_internal_download_docx 0 0 50
//第一个数字是已调用该work的请求数量,第二个数字是已调用work正在处理的请求数,第三个数字是该work预留的最大请求数
如果是其他的,如
"Dfs":{"host":["192.168.1.201:4730"]}
201无法直接进入,则需要修改命令如下
root@ifchange-dev:~# /opt/app/gearmand/bin/gearadmin -h192.168.1.201 --status | grep Dfs
Dfs 0 0 50
--status参数是查看当前多少个worker启动项,最后一个数是50,说明服务是正常的。
Dfs是上传简历的服务,既然服务没挂掉,又报405的错误号码,忠哥说让善军看看是否上传磁盘空间已满了,结果果然是,清除空间后就好了。
2, 在服务所在环境中输入
root@ifchange-dev:~# grep 'call_gearman' /opt/log/*-2017-07-13.log
Binary file /opt/log/IfchangeTOB_Work-2017-07-13.log matches //是二进制文件
root@ifchange-dev:~# grep -a 'call_gearman' /opt/log/*-2017-07-13.log
//-a将binary文件以text文件的方式搜寻数据
/opt/log/IfchangeTOB_Work-2017-07-13.log:2017-07-13 11:20:33 WARN invite_deliver toc_custom/webank_bole_web 3918375898 1499916032 192.168.1.110 127.0.0.1 192.168.1.153 60362 8v31e7rb0htmr91hd65ub64pn66fls63 internal_delivery_inner/insertresumeofcustomer/ call_gearman: edps ,errmsg: 5966e7010fdef7.41838127 39183758982755395597 Gearman Library: edps Failed, param: {"c":"","m":"cvjd_matchscore","p":{"m":"cvjd_matchscore","handle":"Recommendation","cv_id":"6271405","detail":0,"jd_id":"2261922","do_real_filter":"false"}}, header: {"uid":"1","session_id":"8v31e7rb0htmr91hd65ub64pn66fls63","class_name":"invite_deliver","product_name":"toc_custom\/webank_bole_web","log_id":"3918375898","receive_time":1499916019.8052,"client_ip":"192.168.1.110","local_ip":"192.168.1.110","user_ip":"192.168.1.153","request_api":"invite_deliver\/resume_save","ip":"192.168.1.153","version":"1","signid":"3918375955","provider":"toc","uname":"root","appid":"5"}
/opt/log/IfchangeTOB_Work-2017-07-13.log:2017-07-13 14:54:51 WARN flow toc_custom/webank_bole_web 3892857289 1499928891 192.168.1.110 127.0.0.1 192.168.1.153 60362 8v31e7rb0htmr91hd65ub64pn66fls63 internal_delivery_inner/insertresumeofcustomer/ call_gearman: edps ,errmsg: 5967193bc12c86.72757261 38928572894041268220 Gearman Library: edps Failed, param: {"c":"","m":"cvjd_matchscore","p":{"m":"cvjd_matchscore","handle":"Recommendation","cv_id":"6271282","detail":0,"jd_id":"2262332","do_real_filter":"false"}}, header: {"uid":"1","session_id":"8v31e7rb0htmr91hd65ub64pn66fls63","class_name":"flow","product_name":"toc_custom\/webank_bole_web","log_id":"3892857289","receive_time":1499928879.1884,"client_ip":"192.168.1.110","local_ip":"192.168.1.110","user_ip":"192.168.1.153","request_api":"flow\/do_deliver","ip":"192.168.1.153","version":"1","signid":"3892857348","provider":"toc","uname":"root","appid":"5"}
这样就可以知道某服务是否正常工作了。
添加work后重启
发现work挂掉之后,可以在当时的环境中用此命令重启
root@ifchange-dev:/opt/log# sh /root/bin/fuck_worker.sh
重启之后查看work运行状况
root@ifchange-dev:/opt/log# /opt/app/gearmand/bin/gearadmin --status
如果没有正在运行的work列表,则表示整个work都挂掉了,可能的原因是环境gm.conf文件中新增了work,要添加配置,需要添加进去
然后将添加好之后的gm.conf复制到本地,可在199环境中使用
scp /opt/wwwroot/conf/gm.conf c80k2@172.16.0.141:/opt/wwwroot/conf/newgm.conf
远程复制命令 远程环境的文件路径 本地环境的用户名@ip地址:本地环境文件路径和文件名
有条件的地方还可以直接在本地使用此命令将远程文件复制到本地
scp root@192.168.1.199:/opt/wwwroot/conf/gm.conf c80k2@172.16.0.141:/opt/wwwroot/conf/newgm.conf
远程复制命令 远程环境用户名@ip地址:远程环境文件路径 本地环境用户名@ip地址:本地环境路径和文件名
如果是要复制一个目录,则需要添加参数-r,如
scp -r /opt/wwwroot/conf c80k2@172.16.0.141:/opt/wwwroot/conf
将远程环境的conf目录复制到本地conf目录