场景一: 将关系型、非关系型数据的数据同步到ES中。 但是数据库中的表有多个, 一种方案是:一个配置文件中 if else 的方式配置多个表; 另外一种方案是:多个配置文件,多个进程并行执行。 如下图所示:
场景二: kafka多个通道的数据借助kafka_connector 或者logstash_input_kafka同步到ES中, 如下图所示:
这时候,根据通道的处理分成如下1,2两部分: 1、kafka stream对实时数据流的数据清洗、转换操作,有几个通道就至少有几个进程; 2、kafka_connector对处理后的数据实时同步,有几个通道至少有几个进程; 3、为了提高同步的时效性,通用的方案是增加kafka的topic的分片数,这时对应的进程数有会增多。
困惑1:需要大量重复操作。 个位数内的进程数还能接受,二十个甚至更多个进程的重复操作会很繁琐。 比如,针对N个进程的操作: 1)更新jar包,多个进程需要拷贝N次;如果各业务进程jar包名称不一致,需要改名N次。 2)重启业务,多个进程需要挨个重启N次。 困惑2:多进程管理很不直观、很繁琐。 困惑3:不能第一时间获取某个进程的宕掉信息。 困惑4:进程宕掉后,不能自动重启。 困惑5:不能定义进程的优先级。
定制开发,脚本实现。 开发要点: 1)进程文件名称尽量有规律。 2)进程名尽量统一、有规律,便于计数排错。 统计进程数计数举例: ps -ef | grep 进程名 | grep -v 'color' |wc -l 3)定时任务crontab + sendmail预警。 通过脚本对进程进行监控,如果进程数变化,则通过邮件预警。 4)脚本循环检测+定时重启。
即便如此,仍然不够高效。 有没有可视化、批量操作、自动重启、自动邮件预警的管理工具呢?
实践证明有的。 后台进程管理工具Supervisor + superlance(Supervisor 的增强插件工具集)。
Supervisor是一个Python编写的客户端/服务器工具,允许用户在类UNIX操作系统上控制大量进程。 用途: - 进程监控 - 进程守护 - 进程管理 官网地址:http://supervisord.org/
Superlance是一套用于监视和控制在Supervisor下运行的进程的插件工具集。
官网地址:http://superlance.readthedocs.io/en/latest/
sendEmail是一个轻量级,命令行的SMTP邮件客户端。 SendEmail是用Perl编写的,它的独特之处在于它不需要任何模块。 它具有直观灵活的一组命令行选项,使其易于学习和使用。
官网地址:http://caspian.dotconf.net/menu/Software/SendEmail/
步骤1:安装supervisior 启动方法:
[root@localhost xx]# supervisord -c /etc/supervisord.conf
步骤2:安装superlance 我们主要使用superlance的监控+发送邮件的功能。
步骤3:安装SendMail 核心:借助SendMail发送邮件。
基于步骤1——步骤3的核心配置如下:
1
2[program:exec_test]
3command=java -jar /home/test/banlance_test.jar
4directory= /home/test
5numprocs=1 ;
6autorestart=true
7autostart=true
8redirect_stderr=true ;
9stdout_logfile=/var/log/supervisor/app_test_stdout.log
10stderr_logfile=/var/log/supervisor/app_test_stderr.log
11loglevel=info
12
13
14[eventlistener:crashmail-exited]
15command=crashmail -p exec_test -s "sendEmail -f send@163.com -t recv@qq.com -s smtp.163.com
16-u '进程预警' -o message-content-type=html -o message-charset=utf8 -xu send@163.com
17-xp mima -m '业务流进程 异常退出!'" -m recv@qq.com
18events=PROCESS_STATE_EXITED,PROCESS_STATE_STOPPED,PROCESS_STATE_FATAL,PROCESS_LOG_STDERR
19redirect_stderr=false
注意:[eventlistener:crashmail-exited]下的 -p 后面跟的就是[program:exec_test]配置的进程名称。 这样就能实现对exec_test的进程监控。
SendMail核心参数解读:
-f ttlsafrom@163.com 发件人邮箱 -s smtp.163.com 发件人邮箱的smtp服务器 -u "我是邮件主题" 邮件的标题 -o message-content-type=html 邮件内容的格式,html表示它是html格式 -o message-charset=utf8 邮件内容编码 -xu ttlsafrom@163.com 发件人邮箱的用户名 -xp 123456 发件人邮箱密码 -m "我是邮件内容" 邮件的具体内容
至此,以前复杂多进程的管理,改成一个配置文件就能搞定。 如果新增文件,只需要在supervisord新增对应的进程监控+邮件预警配置即可。
这里写图片描述
截图中只有一个进程,多个进程会多行排列展示。
文章中没有给出一步步的部署步骤,这些步骤资料网上都能查到。 主要给出解决问题的思路和官网链接。 你有没有更好的多进程解决方案,欢迎留言讨论。
参考: http://www.alphadevx.com/a/455-Installing-Supervisor-and-Superlance-on-CentOS http://www.ttlsa.com/linux/use-sendemail/ https://blog.csdn.net/baidu_zhongce/article/details/49151385
本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!