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

 

 

技术交流

方式一:个人微信

CleverCode是一名架构师,技术交流,咨询问题,请加CleverCode个人微信号:clever_code

方式二:qq群

CleverCode是一名架构师,技术交流,咨询问题,请加CleverCode创建的qq群(架构师社区):517133582

 

 

 

 

已标记关键词 清除标记
相关推荐
<p> <strong><span style="font-size:16px;color:#003399;">会用Python分析金融数据 or 金融行业会用Python</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">职场竞争力更高</span></strong> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdnimg.cn/202012231042221925.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:16px;color:#003399;">Python金融数据分析入门到实战</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">Get√金融行业数据分析必备技能</span></strong> </p> <p> <img src="https://img-bss.csdnimg.cn/202012231042438069.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:16px;color:#003399;">以股票量化交易为应用场景</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">完成技术指标实现的全过程</span></strong> </p> <p> <br /> </p> <p> <span style="font-size:14px;">课程选取股票量化交易为应用场景,由股票数据的获取、技术指标的实现,逐步进阶到策略的设计</span><span style="font-size:14px;">和回测,由浅入深、由技术到思维地为同学们讲解Python金融数据分析在股票量化交易的应用</span><span style="font-size:14px;">。</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <img src="https://img-bss.csdnimg.cn/202012231043183686.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:16px;color:#003399;">以Python为编程语言</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">解锁3大主流数据分析工具</span></strong> </p> <p> <br /> </p> <p> <span style="font-size:14px;">Python做金融具有先天优势,课程提取了Python数据分析工具NumPy、Pandas及可视化工具</span><span style="font-size:14px;">Matplotlib的关键点详细讲解,帮助同学掌握数据分析的关键技能。</span> </p> <p> <img src="https://img-bss.csdnimg.cn/202012231043472858.png" alt="" /> </p> <p> <strong><span style="font-size:16px;color:#003399;"><br /> </span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">2大购课福利</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;"><br /> </span></strong> </p> <p> <img src="https://img-bss.csdnimg.cn/202012300628195864.png" alt="" /> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页