你是不是也有多進程管理的困惑呢?
1、問題引出——多進程應用場景
場景一:
將關係型、非關係型數據的數據同步到ES中。
但是資料庫中的表有多個,
一種方案是:一個配置文件中 if else 的方式配置多個表;
另外一種方案是:多個配置文件,多個進程並行執行。
如下圖所示:
場景二:
kafka多個通道的數據藉助kafka_connector 或者logstash_input_kafka同步到ES中,
如下圖所示:
這時候,根據通道的處理分成如下1,2兩部分:
1、kafka stream對實時數據流的數據清洗、轉換操作,有幾個通道就至少有幾個進程;
2、kafka_connector對處理後的數據實時同步,有幾個通道至少有幾個進程;
3、為了提高同步的時效性,通用的方案是增加kafka的topic的分片數,這時對應的進程數有會增多。
2、多進程困惑
困惑1:需要大量重複操作。
個位數內的進程數還能接受,二十個甚至更多個進程的重複操作會很繁瑣。
比如,針對N個進程的操作:
1)更新jar包,多個進程需要拷貝N次;如果各業務進程jar包名稱不一致,需要改名N次。
2)重啟業務,多個進程需要挨個重啟N次。
困惑2:多進程管理很不直觀、很繁瑣。
困惑3:不能第一時間獲取某個進程的宕掉信息。
困惑4:進程宕掉後,不能自動重啟。
困惑5:不能定義進程的優先順序。
3、常用的解決方案?
定製開發,腳本實現。
開發要點:
1)進程文件名稱盡量有規律。
2)進程名盡量統一、有規律,便於計數排錯。
統計進程數計數舉例:
ps -ef | grep 進程名 | grep -v "color" |wc -l
3)定時任務crontab + sendmail預警。
通過腳本對進程進行監控,如果進程數變化,則通過郵件預警。
4)腳本循環檢測+定時重啟。
即便如此,仍然不夠高效。
有沒有可視化、批量操作、自動重啟、自動郵件預警的管理工具呢?
4、有沒有更高效的方案呢?
實踐證明有的。
後台進程管理工具Supervisor + superlance(Supervisor 的增強插件工具集)。
5、多進程管理工具Supervisor
Supervisor是一個Python編寫的客戶端/伺服器工具,允許用戶在類UNIX操作系統上控制大量進程。
用途:
- 進程監控
- 進程守護
- 進程管理
官網地址:http://supervisord.org/
6、Superlance增強插件工具集
Superlance是一套用於監視和控制在Supervisor下運行的進程的插件工具集。
1)httpok——此插件旨在用作主管事件偵聽器,通過HTTP GET請求到達配置的URL,如果請求失敗或超時,httpok將重新啟動「掛起」子進程。
2)crashmail——此插件旨在用作監督者事件偵聽器,訂閱PROCESS_STATE_EXITED事件。當進程意外進入EXITED退出狀態時,它向用戶發送電子郵件。這點,解決了我得困惑!
3)memmon——此插件旨在用作主管事件偵聽器,它監視配置的子進程的內存使用情況,並在超過配置的最大大小時重新啟動它們。
4)crashmailbatch——與crashmail類似,當進程意外死亡時,crashmailbatch會發送電子郵件警報。區別在於,在配置的時間間隔內生成的所有警報都會一起批處理以避免發送太多電子郵件。
5)fatalmailbatch——當進程無法啟動太多次時,這個插件會發送電子郵件警報,使supervisord放棄重試。在配置的時間間隔內生成的所有致命的開始事件都會一起批處理以避免發送太多的電子郵件。
6)crashsms——除了通過電子郵件網關發送SMS警報外,它與crashmailbatch類似。消息格式化為適合SMS(簡訊)。
官網地址:http://superlance.readthedocs.io/en/latest/
7、sendEmail 命令行工具
sendEmail是一個輕量級,命令行的SMTP郵件客戶端。
SendEmail是用Perl編寫的,它的獨特之處在於它不需要任何模塊。
它具有直觀靈活的一組命令行選項,使其易於學習和使用。
官網地址:http://caspian.dotconf.net/menu/Software/SendEmail/
8、Supervisor等工具集部署流程
步驟1:安裝supervisior
啟動方法:
[root@localhost xx]# supervisord -c /etc/supervisord.conf
步驟2:安裝superlance
我們主要使用superlance的監控+發送郵件的功能。
步驟3:安裝SendMail
核心:藉助SendMail發送郵件。
基於步驟1——步驟3的核心配置如下:
注意:[eventlistener:crashmail-exited]下的 -p 後面跟的就是[program:exec_test]配置的進程名稱。
這樣就能實現對exec_test的進程監控。
SendMail核心參數解讀:
至此,以前複雜多進程的管理,改成一個配置文件就能搞定。
如果新增文件,只需要在supervisord新增對應的進程監控+郵件預警配置即可。
9、supervisior 可視化效果
這裡寫圖片描述
截圖中只有一個進程,多個進程會多行排列展示。
10、小結
文章中沒有給出一步步的部署步驟,這些步驟資料網上都能查到。
主要給出解決問題的思路和官網鏈接。
你有沒有更好的多進程解決方案,歡迎留言討論。
參考:
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
加入知識星球,更短時間更快習得更多乾貨!
TAG:銘毅天下 |