gearman分布式任务服务器学习记录

以下是强大的gearman学习及安装记录,代码demo下边的来自网络的附录有很多可以参考。

Gearman 是一套用来把程式需求委派给机器,提供通用的程序框架来将任务分发在机器运算。
它同时具备并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。

安装

gearmand

安装gearmand依赖的库

yum install -y boost-devel gperf libevent-devel libuuid-devel

安装gearmand服务

tar xzf gearmand-1.1.12.tar.gz
cd gearmand-1.1.12
./configure
make
make install

gearman

安装php扩展

 tar xzf gearman-1.1.2.tgz
cd gearman-1.1.2
phpize
./configure
make
make install   

# 在php.ini中添加
extension="gearman.so"

gearman启动

 1) 创建日志gearmand.log
# touch /pathto/logs/gearmand.log

2)启动
# /usr/local/sbin/gearmand -d -u root -L 192.168.142.130 --log-file=/pathto/logs/gearmand.log

3)参数详解
-b,--backlog= 储备的监听连接数量
-d, --daemon 后台运行
-f, --file-descriptors= 文件描述符的数量
-h, --help 帮助
-j, --job-retries= 在ob server移除不可用job之前运行的次数,防止不断运行导致其他可用worker崩溃。默认没有限制
-l, -log-file= 日志文件存放位置(默认记录最简单日志)
-L, --listen= 监听的IP,默认全部接受
-p, --port= 指定监听端口
-P, --pid-file= 指定进程ID写入位置
-r, --protocol= 加载协议模块
-q, --queue-type= 指定持久化队列
-t, --threads= 使用的I/9线程数量。默认为0
-u, --user= 启动后,切换到指定用户
-v, --verbose 增加一级详细程度
-V, --version 显示版本信息

** issue **: /usr/local/sbin/gearmand: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory


解决方案:将对应lib链接到/usr/lib

ln -s /home/vagrant/online/mysql5.6/lib/libmysqlclient.so.18  /usr/lib
ldconfig -v

gearman部署

启动gearmand

  • 启动

    /usr/local/sbin/gearmand -d -u root -L 0.0.0.0 --log-file=/pathto/logs/gearmand.log
  • 对应配置修改 common.conf > gearman配置

启动worker

  • 后台运行

    nohup php scripts/gearman_job/job.php >/log/gearman.log &
  • supervisor守护worker进程(推荐)

yum install supervisor
service supervisor start
service supervisor stop
#创建配置文件
/etc/supervisor/conf.d/gearmanwoker.conf:

[program:gearmanwoker]
command=php scripts/gearman_job/job.php
numprocs=12
directory=/dir_path/to/woker/
autostart=true
autorestart=true
stdout_logfile=/path/to/project/log/gearmanwoker.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/path/to/project/log/gearmanwoker.log
stderr_logfile_maxbytes=1MB

参见php-jobs-with-gearman-and-supervisor


update 2015 12-13

worker管理:gearman manager (pecl_manger)

gearmanManager

** 配置中需指定host,pid及log等 **

启动manager daemon

1
scripts/gearmanManager/bin/pecl_manager.php -c scripts/gearmanManager/etc/config.ini  -d -vvv

关闭

1
2
#SIGINT
kill -2 `cat gearman-manager.pid`

重启child(worker)

1
2
# SIGHUP
kill -1 `cat gearman-manager.pid`

gearmand queue 持久化(针对background任务)

对于大量访问压力及server宕机都有好处

1
2
3
4
5
6
7
sudo /usr/local/sbin/gearmand -d -u root -L 0.0.0.0 --log-file=/pathto/gearmand.log   --queue-type=MySQL \
--mysql-host=localhost \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=YOUR_PASSWORD \
--mysql-db=qsc \
--mysql-table=gearman_queue

参考

phpboy

gearman

如有疑问,请文末留言交流或邮件:newbvirgil@gmail.com 本文链接 : https://newbmiao.github.io/2015/10/16/gearman-beginer-guide.html