如何建立一个真正的Gearman环境


How to set up a real Gearman Environment

Gearman让我抓狂。我知道所有的教程,所有的演示,所有的操作方法,但我没有得到我需要的信息。

我的计划

我有一个客户端,它将作业发送到本地主机上的一个作业服务器。在此服务器(Home Server)上运行网站和数据库。现在我有两个(稍后会有更多的Worker Server),我们将其称为W1和W2。在这些服务器上,应该完成艰苦的工作,他们应该从安装Gearman作业服务器的Home Server中获得作业。作业是同步的,这意味着客户端等待任务完成。

但是我不知道该怎么做。我找到的每一个教程都只告诉我当客户和工人在同一台机器上运行时如何设置Gearman。在Home-Server上,我安装了gearman-job-Server和带有PECL的PHP gearman API。在我与主管处理的客户处,我打电话给:

$gmc = new GearmanClient();
$gmc->addServer();

它应该将任务发送到localhost作业服务器,该作业服务器应该获得两个空闲Worker服务器中的一个。正确的

在worker Server W1和W2上的worker.php上,也可以用supervisord处理,下面是

$gmworker= new GearmanWorker();
$gmworker->addServer('Home-Server-IP', 4730);

现在工作服务器应该从主服务器获取任务吗?我必须在W1和W2安装gearman-job-server吗?或者PECL PHP gearman API就是我所需要的一切吗?我必须配置工作服务器吗?

我真的希望你能向我解释这些问题,让我理解Gearman。

更多信息:当我在家庭服务器提示

gearmand -vvv -u root --listen=127.0.0.1

输出只是:

  • INFO启动
  • 信息收听127.0.0.1:4730(6)
  • INFO正在创建唤醒管道
  • 信息正在创建IO线程唤醒管道
  • 信息正在添加侦听套接字的事件(6)
  • INFO正在为唤醒管道添加事件
  • INFO进入主事件循环

在最后一行之后,shell不再执行任何操作。我甚至不能提示一个新的命令。

甚至更多Infos。

我检查了Gearmand是否在Home Server上运行。

ps -e|grep gearman

输出:

  • 1460?00:00:00齿轮需求

当我现在在Worker Server 上发出命令时

/usr/sbin/gearmand -u root -vvv --listen=Home-Server-IP

我收到以下错误。

  • INFO启动
  • FATAL _listen_init:bind:99
  • INFO关闭完成

我真的不明白我的申请有什么问题。

您使用的gearman是什么版本?错误消息的输出让我觉得它已经很旧了。

你为什么要以root身份运行它?