Gearman分布式任务处理系统(四)Gearmand源码编译

PS:Gearmand源码编译过程

Gearmand源码编译

操作系统:CentOS release 6.2

#依赖文件安装
yum install -y gcc gcc-c++ libevent libevent-devel boost boost-devel gperf uuid libuuid libuuid-devel;
#安装sqlite持久化存储
yum install -y sqlite* ;
#gearmand源码编译
wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz;
tar -zxvf gearmand-1.1.12.tar.gz;
cd gearmand-1.1.12;
./configure --prefix=/usr/local/gearmand;
make && make install;
#./configure编译后的提示如下:
Configuration summary for gearmand version 1.1.12
   * Installation prefix:       /usr/local/gearmand
   * System type:               unknown-linux-gnu
   * Host CPU:                  x86_64
   * C Compiler:                cc -std=gnu99 cc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16)
   * C Flags:                   -g -O2  -Wno-unknown-pragmas -Wno-pragmas -Wall -Wextra -Wno-attributes -Waddress -Warray-bounds -Wbad-function-cast -Wchar-subscripts -Wcomment -Wfloat-equal -Wformat-security -Wformat=2 -Wformat-y2k -Wlogical-op -Wmissing-field-initializers -Wmissing-noreturn -Wmissing-prototypes -Wnested-externs -Wnormalized=id -Woverride-init -Wpointer-arith -Wpointer-sign -Wredundant-decls -Wshadow -Wsign-compare -Wstrict-overflow=1 -Wswitch-enum -Wundef -funsafe-loop-optimizations -Wclobbered -Wunused -Wunused-variable -Wunused-parameter -Wwrite-strings -fwrapv -pipe -fPIE -pie -Wpacked
   * C++ Compiler:              c++ c++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16)
   * C++ Flags:                 -g -O2 -std=c++0x -Wno-unknown-pragmas -Wno-pragmas -Wall -Wextra -Wno-attributes -Waddress -Warray-bounds -Wchar-subscripts -Wcomment -Wctor-dtor-privacy -Wfloat-equal -Wformat=2 -Wformat-y2k -Wmissing-field-initializers -Wlogical-op -Wnon-virtual-dtor -Wnormalized=id -Woverloaded-virtual -Wpointer-arith -Wredundant-decls -Wshadow -Wsign-compare -Wstrict-overflow=1 -Wswitch-enum -Wundef -funsafe-loop-optimizations -Wclobbered -Wunused -Wunused-variable -Wunused-parameter -Wwrite-strings -Wformat-security -fwrapv -pipe -fPIE -pie -Wpacked
   * CPP Flags:                  -fvisibility=hidden
   * LIBS:
   * LDFLAGS Flags:
   * Assertions enabled:        no
   * Debug enabled:             no
   * Warnings as failure:       no
   * Building with libsqlite3   yes   #持久化存储-sqlite
   * Building with libdrizzle   yes   #持久化存储-libdrizzle
   * Building with libmemcached not found #持久化存储-libmemcached
   * Building with libpq        no   #持久化存储-libpq
   * Building with tokyocabinet no   #持久化存储-tokyocabinet
   * Building with libmysql     no   #持久化存储-libmysql
   * SSL enabled:               no
   * cyassl found:              no
   * openssl found:             yes
   * make -j:                   3
   * VCS checkout:              no
   * sphinx-build:              :

其中 libsqlite3、lbdrizzle、libmemcached、libpq、tokyocabinet,libmysql的支持都是对于持久化来说的,如果需要要确保系统中安装了这些数据库。持久化安装使用教程

执行命令

#/usr/local/gearmand
#三个重要的命令
├── bin
│   ├── gearadmin #管理 gearman相关
│   └── gearman # 命令行客户端 client,work相关
├── sbin
│   └── gearmand # 守护进程 job server相关

gearadmin 命令

Options:
--help                         查看相关帮助
-h [ --host ] arg (=localhost) 要连接的 host ,默认为「localhost」
-p [ --port ] arg (=4730)      要连接到的端口号,默认为 4730
--server-version               获得 gearman 服务器的版本号
--server-verbose               获得服务器的详细设置
--create-function arg          从服务器创建一个函数
--cancel-job arg               从服务器中取消置顶的任务
--drop-function arg            从服务器中删除一个函数
--show-unique-jobs             列出服务器上不重复的任务
--show-jobs                    列出服务器上所有的任务
--getpid                       获取服务器的进程 ID
--status                       服务器的状态
--workers                      服务器的 workers
--shutdown                     关闭服务器
-S [ --ssl ]                   启用 SSL 链接的支持

client,work 命令

#./gearman --help
#客户端模式: gearman [options] []
#工作端模式: gearman -w [options] [ [ ...]]
client and worker 通用选项:
        -f "function" - 处理任务的函数名
        -h "host"   - Job Server主机,默认是localhost
        -H          - 帮助菜单
        -v          - 打印诊断信息到标准输出,默认为 `false`
        -p "port"   - Job Server端口,默认是4730
        -t "timeout"- 执行多长时间超时,毫秒
        -i "pidfile"- 创建进程的pid文件
        -S          - 启用 SSL 连接
Client options:
        -b          -后台运行任务
        -I          -高优先级运行任务
        -L          -低优先级运行任务
        -n          -逐行执行任务
        -N          -等同 `-n`,但去掉换行符
        -P          -使用指定函数名前置处理所有输出行
        -s          -执行任务不返回结果
        -u "unique" -任务的唯一标识
Worker options:
        -c "count"  -worker进程处理多少个任务后中止)
        -n          -为每一行发送数据包
        -N          -Same as -n, but strip off the newline
        -w          -以worker模式运行

job server命令

# ./gearmand --help
General options:
  -b [ --backlog ] arg (=32)       储备的监听连接数量
  -d [ --daemon ]                  守护进程模式。立即结束命令行,在后台运行 gearman
  --exceptions                     默认启用协议层的异常
  -f [ --file-descriptors ] arg     进程最大可用的文件描述符数(总连接数会比这个数字略少,默认使用的是当前用户最大可用数。
  -h [ --help ]                    帮助
  -j [ --job-retries ] arg (=0)    在任务服务器移除任务之前尝试执行的最大次数。设置这个值这可以确保那些糟糕的任务不会 crash 掉所有的工作线程。默认值是 0 (即不限制次数)
  --job-handle-prefix arg          每个job handle的前缀. 默认"H:'host_na me'",这个可通过GearmanJob::handle程序查询

  --hashtable-buckets arg (=991)   内部用于存放任务的哈希表(hash tables)的容量 默认使用的是991,可以支持包含300万个任务的队列.如果预计队列中的任务数将超过300万,请按比例设 置一个更大的数字.例如为了容纳2^32个任务,本参数可设置为1733003.这会消耗大约26MB的额外内存.到目前为止,`Gearmand`暂不支持超过2^32个任务的队列。

  --keepalive                      启用链接保持
  --keepalive-idle arg (=-1)       如果启用了链接保持(--keepalive),请在支持 TCP_KEEPIDLE 的系统上设置这个参数。如果设置为 -1,则表示当系统不支持或者获取默认值事发生错误 使用该值
  --keepalive-interval arg (=-1)   如果启用了链接保持(--keepalive),请在支持 TCP_KEEPINTVL 的系统上设置这个参数。如果设置为-1,则表示当系统不支持或者获取默认值事发生错误使用该值。
  --keepalive-count arg (=-1)      如果启用了链接保持(--keepalive),请在支持 TCP_KEEPCNT 的系统上设置这个参数。如果设置为-1,则表示当系统不支持或者获取默认值事发生错误使用该值。
  -l [ --log-file ] arg (=/usr/local/gearmand/var/log/gearmand.log) 日志文件存放位置(none:不写日志)
  -L [ --listen ] arg              监听的IP,默认全部接受
  -P [ --pid-file ] arg (=/usr/local/gearmand/var/gearmand.pid)
  -r [ --protocol ] arg            加载协议模块
  -R [ --round-robin ]             按照worker连接job server的顺序来分配任务。默认值是按照worker添加function的顺序来分配任务。
  -q [ --queue-type ] arg (=builtin)  指定持久化队列
  --config-file arg (=/usr/local/gearmand/etc/gearmand.conf)  也可以使用 `@name` 来指定。
  --syslog                         Use syslog.
  --coredump                       是否为未捕捉的信号创建一个核心转储
  -t [ --threads ] arg (=4)        使用的I/o线程数量。0表示使用最大线程,默认为4
  -u [ --user ] arg                启动后切换到指定用户
  --verbose arg (=ERROR)           设置日志记录级别 (FATAL, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG)
  -V [ --version ]                 版本号
  -w [ --worker-wakeup ] arg (=0)  当接收到任务时唤醒多少个工作线程。默认会唤醒所有可用的工作线程

HTTP:
  --http-port arg (=8080)  监听http端口号

Gear:
  -p [ --port ] arg (=4730) 服务启动自己的端口号,默认4730
  --ssl                     启用ssl连接.
  --ssl-ca-file arg         用于ssl连接的ca文件
  --ssl-certificate arg     SSL 证书.
  --ssl-key arg             SSL 密钥

关于“-t”参数解释

gearmand中使用到了多线程模型,其线程分为三种:
1.Listening and management thread 监听和管理线程 - 只有一个:主要负责接受连接请求,并分配给I/O线程
2.I/O Thread I/O 线程 - 可以有很多个:主要负责读写系统调用,解析数据包
3.Processing Thread 处理线程 - 只有一个:负责管理列表和Hash表,管理唯一Key、任务的Handle、函数、任务队列
-t [ --threads ] arg (=4) 使用的I/o线程数量。0表示使用最大线程,默认为4
-t 可以指定I/O线程的数量。如果 没有指定 t 或者 t = 0,则三个线程合为一个,所有的事情都在一个线程中处理。如果 -t 1 则有一个监听和管理线程、一个I/O和处理线程;如果 -t 2 则每个类别一个线程,如果大于2,则创建更多的I/O线程。
官方提到,a 16 core Intel machine is able to process upwards of 50k jobs per second。

job server 启动命令

#启动脚本
/usr/local/gearmand/sbin/gearmand \
--daemon \ #后台运行
--listen=127.0.0.1 #IP白名单
#命令汇总
/usr/local/gearmand/sbin/gearmand --daemon --listen=127.0.0.1 --port=8888
相关文章
  1. gearman应用-分布式图库系统设计
  2. Gearman分布式任务处理系统(六)持久化存储
  3. Gearman分布式任务处理系统(五)通信协议
  4. Gearman-PHP扩展源码编译
  5. Gearman分布式任务处理系统(三)分布式负载均衡架构
  6. Gearman分布式任务处理系统(二)Gearman工作流程细解
本站版权
1、本站所有主题由该文章作者发表,该文章作者与尘埃享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和尘埃的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:
二维码
Posted in Gearman, linux技术
Comments are closed.