CentOS 安装Gearman及其PHP扩展

一、简介
Gearman是一个分发任务的程序架构,由三部分组成:
Gearman client:提供gearman client API给应用程序调用。API可以使用C,PHP,PERL,MYSQL UDF等待呢个语言,它是请求的发起者。
Gearman job server:将客户端的请求分发到各个gearman worker的调度者,相当于中央控制器,但它不处理具体业务逻辑。
Gearman worker:提供gearman worker API给应用程序调用,具体负责客户端的请求,并将处理结果返回给客户端。
Mogilefs的分布式文件系统的核心就是用gearman实现的。
这个软件的应用场景很多,比如视频网站的视频处理,分布式日志处理,电子邮件处理,文件同步处理,图片处理等等,只要是可以放开,不影响体验和响应的场 景,需要并行进行大量计算和处理的程序都是可以的。Yahoo在60或更多的服务器上使用gearman每天处理600万个作业。新闻聚合器digg构建 了一个相同规模的gearman网络,每天可处理400000个作业。
Gearman不但可以做为任务分发,还可以做为应用方面的负载均衡。可以让worker放在不同的一堆服务器上,也可以启动放在同一个cpu的多个核 上。比如,应用视频转换程序,不希望web服务器来处理视频格式转换,这时,可以在这一堆服务器上进行任务分发,在上面加载worker处理视频格式,对 外的web服务器就不会被视频转换过程影响。而且扩展方便,加一台服务器到任务调度中心,注册成worker即可,这时job server会在请求到来的时候,将请求发送给空闲的worker。还可以运行多个job server,组成ha架构,如果一个job server当掉了,client和worker会自动迁移到另一台job server上。

1.yum install -y uuid-devel libuuid libuuid-devel uuid boost-devel libevent libevent-devel gperf

2.安装Gearman服务端

  1. wget https://launchpad.net/gearmand/1.1/1.1.11/+download/gearmand-1.1.11.tar.gz
  2. tar zxvf gearmand-1.1.11.tar.gz
  3. cd gearmand-1.1.11
  4. ./configure --prefix=/usr/local/webserver/gearmand
  5. make && make install

启动Gearman服务端:

/usr/local/webserver/gearmand/sbin/gearmand -d -u root --log-file=/data_disk/logs/gearman.log

  • -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 显示版本信息

出现Could not open log file这种错误,需要使--log-file指定日志文件

3.安装PHP扩展

  1. # wget http://pecl.php.net/get/gearman-1.1.1.tgz
  2. # tar zxvf gearman-1.1.1.tgz
  3. # cd gearman-1.1.1
  4. # /usr/local/webserver/php/bin/phpize
  5. # ./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-gearman=/usr/local/webserver/gearmand/
  6. # make && make install
编辑php.ini配置文件加载相应模块并使之生效:

extension = "gearman.so"

安装PHP扩展时候,有可能因为版本问题导致安装失败。所以最好去官网看下最新版本。

  • Gearman官网下载:http://gearman.org/download
  • PHP驱动下载:http://pecl.php.net/package/gearman

我用php5.2.14安装的时候发现出现E_DEPRECATED未定义错误
我查了php5.3的更新列表,这个错误等级变量是5.3更新的所以5.2的php装不上这个扩展
有两种办法解决这个问题
1. 升级php到5.3版本

2.替换php_gearman.c中的E_DEPRECATED为其他错误等级变量,比如E_ERROR

准备用多进程裁剪图片

应用示例:

Gearman的应用很简便,智能建站中的应用主要是根据图片处理请求,通过Gearman分发给相应的服务器进行处理,服务器进程根据具体任务要求,完成处理后,把结果返回给调用者。

worker简要代码如下:

<?php

  require(‘../cavan-config.php’);

  $worker= new GearmanWorker();//创建工作者对象

  $worker->addServer();//创建服务端

  $worker->addFunction(“compressPicture”, “ CompressPicture”);//添加函数

  while ($worker->work());//执行工作

  function CompressPicture ($job)  //图片处理函数

  {

……

  }


Client简要代码如下:

$client= new GearmanClient(); //创建客户端                                           

$client->addServer(); //连接服务端

$json=”{\”width\”:” . $source_pic_w . “,\”height\”:” . $source_pic_h . “,\”file\”:\”" . $this->dir . $this->name. “” . “.” . $this->ext . “\”,\”name\”:\”" . $this->name. “_thumb” . “\”,\”type\”:1}”;//json数据

 $client->do(“compressPicture “, $json); //调用服务端的图片处理函数


你可能感兴趣的:(PHP,负载均衡,分布式文件系统,任务调度,gearman)