将所有进程通过Supervisord集中管理,为混沌工程做准备

3 min

language: ja bn en es hi pt ru zh-cn zh-tw

大家好,我是无能。
大家过得怎么样?
我昨天骑自行车总共6个小时,中途还和朋友会合了。

Image
Image

因为是爵士音乐节,我一边听音乐一边在街上散步,老年人的穿着打扮很有趣,给了我很多启发。
走上街头,亲眼看到外面的人们的真实感比街拍等更真实。

然后,朋友说要在家里做肉酱意面,所以我们去了业务超市,买了叫做“PRAI 巢状意面”的极粗面条,一起做出来后发现超级好吃。
就这样,我们去了旧衣店,谈论了对Project Mirai的感想,还了解了最优传输和自然语言处理,一直聊到凌晨2点左右,然后我骑着固定齿轮自行车跑了几十公里回家,这就是我的一天。

前言

最近我重新整理了家里的基础设施环境,原因是我想将其用作混沌工程的测试环境,这是我一直很感兴趣的。
之前Netflix首次发布了一个叫做ChaosMonkey的东西,但那些被分叉出来的“猴子”似乎已经成为濒危物种了。

它们消失的速度简直像加密货币一样快,但在这种情况下,有一个实时更新的OSS叫做ChaosBlade。我想运行它。
这是中国Alibaba Cloud引入的,实际在哪里部署了,可以在Issues中找到总结。
Who is using ChaosBlade
虽然日本的信息很少,但文档制作得相当完善,并且实时提交,所以应该可以使用。

详细内容等我实际开始动手后再进行。

Supervisord迁移前的守护进程启动

没想到有这么多东西持续了这么久。
实际上,我是在服务器的rc.local中编写了一个脚本,并以包装器(wrapper)的形式在启动时运行它。
具体来说,

rc.local

$ sudo cat /etc/rc.local  
[sudo] haturatu 的密码`  
#!/bin/sh -e  
#  
# rc.local  
#  
# This script is executed at the end of each multiuser runlevel.  
# Make sure that the script will "exit 0" on success or any other  
# value on error.  
#  
# In order to enable or disable this script just change the execution  
# bits.  
#  
# By default this script does nothing.  
#echo never > /sys/kernel/mm/transparent_hugepage/enabled  
[ -d /etc/boot.d ] && run-parts /etc/boot.d  

/root/serverboot.sh &  

就这样,我在root的家目录里随便创建了一个serverboot.sh,让它启动各个应用程序。
说实话,这只是简单地启动脚本,所以是否称之为包装器(wrapper)姑且不论。

但是,您可能已经注意到,这样一来,如果进程崩溃,或者日志文件也不会单独输出。
因此,我全部用Supervisord来管理了。

之后

这样一来,即使进程因某种原因崩溃,Supervisor也会自动重新启动它,并且会输出到为每个进程设置的日志中。
总共有8个进程。

工作时间不到1小时,所以早点做就好了,但变成这样也没办法。因为我是人类嘛。

其他需要做的事情

比如用HA Proxy做负载均衡,为此需要再准备一台服务器,但如果在家再放一台备用机就太没意义了,所以需要想办法找一个便宜的VPS
为什么这么说呢,因为家庭环境的风险很高,比如停电等环境风险,所以感觉最好把备用机放在一个完全不同的地方。
之所以这么认为,这不仅仅是家庭服务器环境的问题,我记得大约在2021年左右,AWSUS区域发生过大规模故障。当时我关注到Binance等交易所宕机,追查原因发现是AWS
在同一个区域进行冗余配置最终是没有意义的。
电力故障之类的,我记得美国的Google DCYoutube之类的,好像在Google Map里也能参观内部,虽然看起来绝对不可能发生,但也不是绝对不会发生。

也许会有人说,不用HA Proxy,用Nginx做负载均衡不就行了吗?但我记得以前看过这个。
为什么绝不应该使用 Nginx 进行负载均衡
另外,如果Web服务器和负载均衡器使用相同的软件启动,会变得很复杂,所以我认为使用HA Proxy会更明确和易懂。

但是,如果问现在真的有必要做冗余配置吗?答案是完全NO,用ChaosMonkey这样的软件在云上浪费资源可能会带来麻烦,如果以DNS为单位来做,那又是另一回事了。
我会再考虑一下,然后决定是否运行ChaosBlade
我还没有准备好Get混沌工程中服务器内部的信息,所以在某种意义上,这会有一个续集。

那么。下次再见。

Related Posts