使用 Supervisord 集中管理所有程序並為混沌工程做準備
大家好,我是無能。
大家過得怎麼樣?
我昨天總共騎了6小時的自行車,途中還和朋友會合。


因為是爵士音樂節,我邊聽音樂邊在街上散步,年長者的穿著很多都很有趣,很受啟發。
走上街頭,親眼看到外面的人們的真實感,比街拍等更真實。
然後,因為朋友說要在他們家做波隆那義大利麵,我們就去了業務超市,想說用一種叫做「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個程序。
工作時間不到一小時,所以我想說早點做就好了,但事情變成這樣也沒辦法。因為我是人類嘛。
其他需要做的事情
像是使用 HA Proxy 來做負載平衡,為此我需要再準備一台伺服器,但如果第二台機器也放在家裡就太沒意義了,所以我需要想辦法找到一個便宜的 VPS。
為什麼呢?因為家裡環境的風險,例如停電等環境風險很高,所以我認為最好將第二台伺服器放在完全不同的地方。
我之所以這麼認為,不僅僅是因為家庭伺服器環境的問題,我記得大約在2021年左右,AWS 的 US 區域發生過大規模故障。當時我追蹤到像 Binance 等交易所都停擺了,原因就是 AWS。
在同一個區域(region)進行冗餘配置最終是沒有意義的。
停電之類的,還有我記得可以透過 Youtube 或 Google Map 參觀美國的 Google DC 內部,雖然看起來絕對不可能發生,但也不是絕對不會發生。
也許會有人說:「不用 HA Proxy,用 Nginx 做負載平衡不就好了嗎?」但我記得以前看過這個。
為什麼絕不應該使用 Nginx 進行負載平衡
此外,如果網頁伺服器和負載平衡器使用相同的軟體啟動,會變得複雜,所以我認為使用 HA Proxy 會更明確且易於理解。
然而,如果問目前真的有必要做冗餘配置嗎?答案是完全 NO,使用像 ChaosMonkey 這樣的軟體在雲端上使用不必要的資源似乎會造成麻煩,而以 DNS 為單位來做又是另一回事。
我會再多考慮一下,然後打算執行 ChaosBlade。
我還沒有準備好在混沌工程期間從伺服器中 Get 資訊,所以從某種意義上說,這將作為續集繼續下去。
那麼,下次再見了。