プロセスを全てSupervisordで集約させてカオスエンジニアリングの準備をする
4 min read
こんにちは、無能です。
皆さんいかがお過ごしでしょうか。
私は昨日合計6時間、途中友達と合流しつつサイクリングに出てました。
ジャズ・フェスだったので、音楽聴きながら街を散策しましたが年配の方の服装は面白いものが多く刺激があります。
街に出て、直接見る外に出ている人たちのリアルさはストリートスナップ等よりも真実です。
そして、友達の家で友達がボロネーゼパスタを作ってくれるということだったので、業務スーパーに行って「PRAI ネストパスタ
」とかいう極太麺で作ってみようということで一緒に作ってたらめちゃくちゃうまい。
そんなこんなで古着屋行ったりプロジェクトミライに行った感想と最適輸送と自然言語処理のこと教えてもらったりと深夜2時位まで喋ってそのまま帰りの数十キロをピストバイクで走り去った一日です。
はじめに
最近、自宅インフラ環境を整え直している理由に前から気になっていたカオスエンジニアリングのテスト環境として使いたいのでやっています。
前にNetflix
が最初に公開したChaosMonkey
なるものがあり、それは結局そのフォークされた猿たちはもう絶滅危惧種になっているようです。
なんだお前ら、仮想通貨か?というレベルの速度で消え去っていますがそんな中リアルタイムで更新されているChaosBlade
というOSS
があります。これを実行したいのです。
これは、中国のAlibaba Cloud
が導入しているものでどこで実際に導入しているかは、Issues
にまとめられているものがあります。
Who is using ChaosBlade
日本の情報がほとんど無いですが、ドキュメントもそれなりにしっかり作られていることとリアルタイムでコミットされているので使えるでしょう。
詳細は実際に手をつけ始めてから行おうと思います。
Supervisord移行前のデーモン起動
まさか、こんな長く続けているとは思わなかったものが多数あり。
実際はサーバーのrc.local
内に記述しスタートアップで立ち上げるスクリプトをラッパーした形で起動していました。
具体的には、
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
にそれぞれのアプリケーションを立ち上げるようにして起動させてました。
ぶっちゃけただスクリプト起動させているだけなので、果たしてこれをラッパーと言って正解かどうかは置いておいて。
しかし、お気づきでしょうがこれだとプロセスが落ちたりログファイルも個別に出力されるものではありません。
そのため、全てSupervisord
で管理しました。
その後
これでもし、なにかの拍子でプロセスが落ちても勝手にSupervisor
が立ち上げてくれるのとそれぞれに設定したログとして出力されます。
合計8プロセス分になりました。
作業時間1時間もかからなかったのでさっさとやればよかった、となるんですがこうなるのはしょうがない。だってにんげんだもの。
他にやらねばいけないこと
HA Proxy
でロードバランサをするとか、そのためにはもう一個サーバーを用意しないといけないんだがその二号機を家にもう一個とかあまりに意味が無さすぎるのでなんとか格安VPS
を探す必要がある。
なぜかというと結局自宅環境のリスクは停電だとか、そういう環境的リスクが高いので全く別の場所にあるサーバーを2号機にしたほうが良い気がする。
なぜよりそう思うかというと、これは自宅サーバー環境下だけの話だけではなく確か2021年頃にAWS
のUS
リージョンの大規模障害があった記憶がある。その間Binance
だとかの取引所が落ちていたことを追っていたら原因がAWS
だった。
同じリージョンで冗長構成をとってら結局意味がない。
電力障害とか、米国のGoogle DC
をYoutube
とか確か中もGoogle Map
だかで見学できた記憶あるけど見れば絶対にあり得なさそうなことではあるんだけども絶対に無いということは無い。
HA Proxy
ではなくてNginx
でロードバランサすれば良いのでは?と言われるかもしれないが過去にこれを見ていた記憶があった。
負荷分散に nginx を絶対に使用してはいけない理由
追加で、ウェブサーバとロードバランサが同じソフトウェアで起動させているとややこしくなるのでHA Proxy
を使ったほうが明示的で分かりやすいと思う。
でも、現状で本当に冗長構成をする意味があるか?と言われれば完全にNO
で、ChaosMonkey
みたいなソフトウェアでクラウド上の無駄なリソースを使うことで迷惑が掛かりそうだしDNS
単位でやるとなるとそれもまた。
もう少し考えてみてから、ChaosBlade
は実行しようと思います。
まだそのカオスエンジニアリング中のサーバー内の情報をGet
する準備もできていないので、ある意味続編的に続きます。
それでは。またよろしくお願いします。