@42withyou
2015-04-13T05:52:43.000000Z
字数 4485
阅读 540
未分类
https://www.processon.com/diagraming/550aa08de4b010f33c91913f
/Common/Conf/prod.php
/*** 消息队列配置*/'MQ_CONFIG' => array(// 消息队列驱动类型 /common/Service/Mq'TYPE' => 'Mqs',// 消息队列前缀'PRIFIX' => 'test-',// receive message 默认等待时长'POLLING_WAIT_SECONDS' => 3,'ACCESS_KEY_ID' => 'xxx','ACCESS_KEY_SECRET' => 'xxx','ACCESS_OWNER_ID' => 'xxx',// Mqs 地域,测试用 cn-beijing,线上用 cn-hangzhou'ACCESS_REGION' => 'cn-beijing'),/*** 队列类型配置*/'MQ_TYPES' => array(// 批量邮件'batch' => array(// 最大队列数'MAX_QUEUE_NUM' => '50',// 最小队列数'MIN_QUEUE_NUM' => '10',// 空闲队列数'SPARE_QUEUE_NUM' => '10',// 启动队列数'START_QUEUE_NUM' => '15',// receive message 等待时长,覆盖 POLLING_WAIT_SECONDS'RECEIVE_WAIT_SECONDS' => 5,),// 系统触发邮件'tran' => array('MAX_QUEUE_NUM' => '10','MIN_QUEUE_NUM' => '3','SPARE_QUEUE_NUM' => '9','START_QUEUE_NUM' => '5','RECEIVE_WAIT_SECONDS' => 5,),),/*** sender 守护进程,发送控制*/'SENDER_DAEMON' => array(// 驱动类型 /common/Service/Process'TYPE' => 'Shell',// 检查队列是否为空休眠时长'CHECK_QUEUE_INTERVAL' => 1000000,// 检查 sender 进程是否完成退出休眠时长'CHECK_SENDER_INTERVAL' => 1000000,// pid 文件保存路径'PID_FILE_PATH' => '/var/run/mailserver/',// 日志路径'LOG_FILE' => '/var/log/wwwlogs/mailserver/manager.log',),/*** 发送进程,由 sender_daemon 启动*/'SENDER_WORKER' => array(// 驱动类型'TYPE' => 'Shell',// 单个队列最大发送进程数'MAX_PROCESSS_NUM' => 5,'PID_FILE_PATH' => '/var/run/mailserver/sender/','LOG_FILE' => '/var/log/wwwlogs/mailserver/sender.log',),// 发送成功 sender 缓存'SENDER_CHOOSER_CACHE_TIME' => 2592000, // 60 * 60 * 24 * 30,// 邮件自定义 header'SENDER_DEFAULT_HEADERS' => array('X-Sent-Using' => 'Lingxi',),// gearman 配置'GEARMAN_HOST' => '127.0.0.1','GEARMAN_PORT' => 4730,/*** crypt 驱动类型,为了兼容旧的数据,增加了 lingxi 加密驱动*/'DATA_CRYPT_TYPE' => 'Lingxi',/*** D()->cache()... 缓存时长* 需要主动调用*/'MYSQL_QUERY_CACHE_TIME' => 1,/*** 邮件日志记录方式* gearman - 通过 gearman 中转写入数据库* * - 直接写入*/'SEND_LOG_SAVE' => true,'SEND_LOG_SAVE_METHOD' => 'gearman',/*** tran 邮件在所有 sender 都失败后是否使用 smtp 帐号* outbound_email_senders 配置 type=tran 的帐号*/'TRAN_USE_SMTP' => 1,/*** 黑名单有效期*/'BLACKLIST_PERIOD' => '-1 month',/*** mailapi 地址,用于构建邮件底部的灵析信息*/'WEB_ROOT' => 'http://baidu.com','LINGXI_LOGO' => 'http://img.lingxi360.com/styles/css/images/logo_grey.png',// 错误邮件通知'_ERROR_REPORT_TO_EMAIL' => 'yekezhong@justering.com','_ERROR_REPORT_EMAIL' => 'yekezhong@justering.com','_ERROR_REPORT_EMAIL_PASS' => 'xxx',
/Dispatcher/Conf/config.php
/*** 一个 batch 最多分发到一个队列上多少,超过这个数,就请求一个新队列继续放* @todo 还没实现*/'DISPATCHE_BATCH_NUM' => 5000,/*** 邮箱验证正则* @todo 通过 max 记录验证域名有效性*/'EMAIL_VALID_REG' => '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',
gearman 没有认证协议,使用 iptables 控制
iptables.sh
#!/bin/bash## gearman 没有认证协议,使用 iptables 控制# http://www.vpser.net/security/linux-iptables.html#TEST_IP="61.49.121.80"# clean alliptables -Fiptables -Xiptables -Z# 允许本地回环接口(即运行本机访问本机)iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT# 允许已建立的或相关连的通行iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 允许所有本机向外的访问iptables -A OUTPUT -j ACCEPT# 允许访问22端口iptables -A INPUT -p tcp --dport 22 -j ACCEPT# 允许访问80端口iptables -A INPUT -p tcp --dport 80 -j ACCEPT# 9000 和 15770iptables -A INPUT -p tcp --dport 15770 -j ACCEPTiptables -A INPUT -p tcp --dport 9000 -j ACCEPT# 开启 gearman 端口iptables -I INPUT -s 127.0.0.1 -p tcp --dport 4730 -j ACCEPTiptables -I INPUT -s 10.160.15.54 -p tcp --dport 4730 -j ACCEPT # lingxi# 测试 localiptables -I INPUT -s $TEST_IP -p tcp --dport 4730 -j ACCEPT# 禁止其他未允许的规则访问iptables -A INPUT -j REJECT #!!!!!!!!!!!!!!!(注意:如果22端口未加入允许规则,SSH链接会直接断开。)iptables -A FORWARD -j REJECT# saveservice iptables save
start_gearman.sh - 启动 gearman 服务
# 配置 gearman 队列持久化队列地址gearmand -d \-L 0.0.0.0 \--queue-type=MySQL \--mysql-host=lingximailserver.mysql.rds.aliyuncs.com \--mysql-port=3306 \--mysql-user=gearman \--mysql-password=xxx \--mysql-db=gearman \--mysql-table=gearman_queueps -ef | grep gearmand | grep -v grep
start_workers.sh - 启动 gearman workers
# 静态分发器数量staticDispatcheWorkerNum=5# 动态分发器数量dynamicDispatcheWorkerNum=5# 日志记录器数量sendLogSaveWorkerNum=3# worker & sender pid 文件保存路径 for mkdirworkerPidFilePath="/var/run/mailserver/"senderPidFilePath="/var/run/mailserver/sender/"
maintenance.sh - crontab 根据 MQ_TYPES 配置定时维护队列数量
crontab -u root -e* * * * * /home/wwwroot/mail_server/maintenance.sh maintenance
# todo 封装成命令安装到 /usr/bin/mailserver start/stop/status...# start/stop/restart 可接参数 /effect_queue/1 操作会同样作用到队列上,否则只对队列对应的进程执行操作# 启动守护进程php index.php manager/manage/start# 停止php index.php manager/manage/stop# 重启php index.php manager/manage/restart# 维护php index.php manager/manage/maintenance
auto_refresh.sh - 开发辅助
# 代码有变动时自动刷新 gearman workers,开发用# 貌似 fswatch 只支持 mac./start_workers.shfswatch -0 ./Application | xargs -0 -n 1 ./start_workers.shexit 0