Linux中Gearman安装与使用,分布式消息队列(CentOS-6.5:gearmand-1.1.12)

1 Gearman简介

1.1 概况

Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。

1.2 组成

Gearman是一个分发任务的程序架构,由三部分组成:

1)Gearman client:提供gearman client API给应用程序调用。API可以使用C,PHP,PERL,MYSQL UDF等待呢个语言,它是请求的发起者。

2)Gearman job server:将客户端的请求分发到各个gearman worker的调度者,相当于中央控制器,但它不处理具体业务逻辑。

3)Gearman worker:提供gearman worker API给应用程序调用,具体负责客户端的请求,并将处理结果返回给客户端。

1.3 应用

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.4 工作原理图

2 运行过程

一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。

Client:请求的发起者,可以是 C,PHP,Perl,MySQL UDF 等等。

Job:请求的调度者,用来负责协调把 Client 发出的请求转发给合适的 Work。

Worker:请求的处理者,可以是 C,PHP,Perl 等等。

因为 Client,Worker 并不限制用一样的语言,所以有利于多语言多系统之间的集成。

甚至我们通过增加更多的 Worker,可以很方便的实现应用程序的分布式负载均衡架构。

3 Gearman下载

1)官网

http://gearman.org/

2)官网下载

https://launchpad.net/gearmand

3)官网使用向导

http://gearman.org/getting-started/

3)本次安装用到的所有软件下载地址(安装环境为CentOS-6.5)

http://download.csdn.net/detail/clevercode/8698699

4 Gearman安装

4.1 安装linux必备常用库

Linux中必备常用支持库的安装:http://blog.csdn.net/clevercode/article/details/45438401

4.2 安装gearmand依赖的库

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

4.3 安装gearmand服务

1)解压

# cd /usr/local/src/gearman

# tar xzf gearmand-1.1.12.tar.gz

2)配置

# cd gearmand-1.1.12

# ./configure

3)编译

# make

4)安装

# make install

5)安装成功图,输入

# gearman

5 安装php扩展

1)安装phpize

# yum install -y php-devel

2)解压

# cd /usr/local/src/gearman

# tar xzf gearman-1.1.2.tgz

3)配置

# cd gearman-1.1.2

# phpize

# ./configure

4)编译

# make

5)安装

# make install

6)安装成功

出现“Installing shared extensions:     /usr/lib64/php/modules/”表示安装成功,/usr/lib64/php/modules/是gearman.so扩展的目录。如图

7)配置(加入扩展)

# vi /usr/local/php5/etc/php.ini

extension="gearman.so"

8)查配置是否成功

# vi test.php

<?php

print gearman_version() . "\n";

?>

执行php test.php后,出现1.1.12表示安装成功

# php test.php

1.1.12

6 Gearman启动停止

1) 创建日志/data0/logs/gearmand.log

# touch /data0/logs/gearmand.log

2)启动

# /usr/local/sbin/gearmand -d -u root -L 192.168.142.130 --log-file=/data0/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 显示版本信息

4)查是否运行

# ps axu | grep gearmand

5)查看监听端口

# netstat -anp | grep 4730

6)停止,直接kill掉进程。

7 Gearman使用

7.1 创建Worker

创建worker.php,创建一个发送邮件的Worker端。代码如下

<?php

$worker= new GearmanWorker();
$worker->addServer('192.168.142.130', '4730');
$worker->addFunction("sendMail", "my_sendmail_function");
while ($worker->work());

function my_sendmail_function($job){

    // 接收数据
    $tmp = $job->workload();
    $receiveArr = unserialize($tmp);

    $from = $receiveArr['from'];
    $to = $receiveArr['to'];
    $subject = $receiveArr['subject'];
    $content = $receiveArr['content'];

    //发送邮件
    //....

    return $subject.' sendmail OK';
}

?>

7.2 启动Worker端

如果处理的数据量大,可以执行以下脚本多次,即启动多个Worker端。

# nohup php worker.php > tmp.txt &

7.3 创建Client(阻塞模式,需要等待返回结果才结束)

创建一个client.php。do()方法是阻塞模式,必须等待worker端返回结果,程序才能停止。(如图返回:hello Gearman sendmail OK)

<?php

$client= new GearmanClient();
$client->addServer('192.168.142.130', '4730');

$job = array();
$job['from'] = 'CleverCode';
$job['to'] = 'Gearman';
$job['subject'] = 'hello Gearman';
$job['content'] = 'hello Gearman:this is from GearmanClient';
$job = serialize($job);

//等到worker端返回结果,才会结束。
$ret = $client->do("sendMail", $job);

echo $ret."\r\n";

?>

7.4 创建Client(非阻塞,不用等结果)

创建一个client2.php。doBackground()不用等待worker端返回结果,程序就结束了。

<?php

$client= new GearmanClient();
$client->addServer('192.168.142.130', '4730');

$job = array();
$job['from'] = 'CleverCode';
$job['to'] = 'Gearman';
$job['subject'] = 'hello Gearman';
$job['content'] = 'hello Gearman:this is from GearmanClient';
$job = serialize($job);

//不等待返回结果,就会结束
$ret = $client->doBackground("sendMail", $job);
echo $ret."\r\n";

?>

8 Gearman管理

输入以下命令,查看4730端口情况。

#  (echo "status" ; sleep 2 ) | telnet 192.168.142.130 4730

1)字段说明:"已知注册的任务"  "正在运行的任务"  "队列中的任务"  "可用的 Worker".

2)sendMail        0       0       1,注册的任务名为 sendMail,0 个正常在运行,队列为空,有一个可用的 Worker.

版权声明:

1)原创作品,出自"CleverCode的博客",转载时请务必注明以下原创地址,否则追究版权法律责任。

2)原创地址:http://blog.csdn.net/clevercode/article/details/45718735(转载务必注明该地址)。

3)博客专栏地址(Linux常用软件安装与配置):http://blog.csdn.net/column/details/linuxsoftwareinstall.html(持续增加,关注请收藏)。

4)欢迎大家关注我博客更多的精彩内容:http://blog.csdn.net/CleverCode

时间: 2024-10-11 22:00:42

Linux中Gearman安装与使用,分布式消息队列(CentOS-6.5:gearmand-1.1.12)的相关文章

linux中编译安装Apache、PHP、MySQL(上)

1.简介 在阿里云买了个云服务器,一直没时间折腾.过了近十天了吧,才有时间好好玩玩这个云服务器.自己是做Web开发的,所以我需要的开发环境是LAMP.之前打算是采用yum安装,不过yum安装apache可以安装到2.4版本,而PHP最高安装版本只能是5.4,这也是yum安装PHP的软肋,因此我这里主要涉及到的安装方式是源码安装.通过源码安装能够更好的管理这些软件,想安装到哪就放在哪. 云服务器: 阿里云CentOS 7.2 64位 阿帕奇版本:apache2.4 PHP版本:PHP5.6 主要的

linux中软件安装方法总结

linux中软件安装方法: 1 rpm -ivh 包名.rpm 有依赖问题,安装A,A需要先安装B,B先安装C等. 2 yum安装,yum包管理器,yum安装解决rpm安装的依赖问题,安装更简单化. 优点:简单,易用,高效 缺点:不能定制 centos切换在线yum源地址为aliyun地址方法: 复制对应版本的切换命令,在centos中输入切换命令即可: [[email protected] tools]# wget -O /etc/yum.repos.d/CentOS-Base.repo ht

linux 中spfvim安装

1. 安装 git 1.1 安装依赖的包: curl          curl-devel     zlib-devel         openssl-devel      perl      cpio      expat-devel getttext-devel 1.2 安装git: wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz tar xzvf git-latest.tar.

Linux中PHP安装与配置(CentOS-6.5:php-5.2.13)

1 PHP简介 PHP(PHP: Hypertext Preprocessor的缩写,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域.PHP的文件后缀名为php. 2 下载地址 1)libmcrpyt ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz 2) php http://ww

Linux中如何安装RAR

在Windows下的winrar几乎一统压缩软件的市场占有率,winrar只是RAR在Windows环境下的图形界面而已,核心功能还是RAR,那么如何在Linux中安装RAR呢? 1.下载RAR下载地址:http://www.rarsoft.com/download.htm,目前最新版为5.0.1. 使用wget下载(32位系统): wget http://www.rarsoft.com/rar/rarlinux-5.0.1.tar.gz 若是64为系统则是: wget http://www.r

Linux 中 Python 安装 (https://www.bilibili.com/video/av22957476/?p=59)

下载——解包——运行configure添加编译参数——编译——安装 Linux中下载安装编译软件(gcc,glibc) Linux root上  写命令: yum  install gcc-* glibc-* -y         安装编译软件 Linux中下载安装开发工具 Linux root上  写命令: yum  groupinstall ‘开发工具’ -y 官网找到安装版本的python源码  复制地址 https://------- Linux root上  写命令: wget htt

云计算学习路线图素材课件,Linux中软件安装的方式

很多初学者感觉云计算就是一个听起来比较高大上的名词,每次想要了解它的时候都像是雾里看花,迷迷糊糊看不真切,至于它是干什么的就更不了解了,其实云计算学起来在IT行业中还是比较容易上手的,接下来我给大家分享Linux中软件安装的方式: 一.源代码形式 绝大多数开源软件都是直接以原码形式发布的,源代码一般会被打包成.tar.gz的归档压缩文件,需要编译成为二进制形式之后才能够运行使用. 源代码基本编译流程: 1).configure 检查编译环境,这里可以通过--prefix等命令配置安装路径(好像)

[转载] 基于Redis实现分布式消息队列

转载自http://www.linuxidc.com/Linux/2015-05/117661.htm 1.为什么需要消息队列?当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异. 举个例子:业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力. 再举个例子:调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送. 再举个栗子,交互模块5:00到24:00和电商系统联通,和内部ERP断开.

EQueue - 一个纯C#写的分布式消息队列介绍2

一年前,当我第一次开发完EQueue后,写过一篇文章介绍了其整体架构,做这个框架的背景,以及架构中的所有基本概念.通过那篇文章,大家可以对EQueue有一个基本的了解.经过了1年多的完善,EQueue无论是功能上还是成熟性上都完善了不少.所以,希望再写一篇文章,介绍一下EQueue的整体架构和关键特性. EQueue架构 EQueue是一个分布式的.轻量级.高性能.具有一定可靠性,纯C#编写的消息队列,支持消费者集群消费模式. 主要包括三个部分:producer, broker, consume