红联Linux门户
Linux帮助

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

发布时间:2017-05-25 09:42:31来源:blog.csdn.net/clevercode作者:CleverCode
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.工作原理图
Linux中Gearman安装与使用,分布式消息队列(CentOS:gearmand)
 
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中必备常用支持库的安装:
在CentOS安装软件的时候,可能缺少一部分支持库,而报错。这里首先安装系统常用的支持库。那么在安装的时候就会减少很多的错误的出现。
# yum install -y gcc gdb strace gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs patch e2fsprogs-devel krb5-devel libidn libidn-devel openldap-devel nss_ldap openldap-clients openldap-servers libevent-devel libevent uuid-devel uuid mysql-devel     
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
Linux中Gearman安装与使用,分布式消息队列(CentOS:gearmand)
 
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扩展的目录。如图
Linux中Gearman安装与使用,分布式消息队列(CentOS:gearmand)
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掉进程。
Linux中Gearman安装与使用,分布式消息队列(CentOS:gearmand)
 
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";  
?>
Linux中Gearman安装与使用,分布式消息队列(CentOS:gearmand)
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
Linux中Gearman安装与使用,分布式消息队列(CentOS:gearmand)
1)字段说明:"已知注册的任务"  "正在运行的任务"  "队列中的任务"  "可用的 Worker".
2)sendMail        0       0       1,注册的任务名为 sendMail,0 个正常在运行,队列为空,有一个可用的 Worker.
 
本文永久更新地址:http://www.linuxdiyf.com/linux/31055.html