公司使用 JumpServer 堡壘機作為遠程辦公的入口,并且搭建了高可用環境,不過兩個節點都是部署在國內某云的海外節點上的,上個月有一次海外光纜出了問題,直接導致使用該遠程辦公的同事全部提前下班了,基于如何避免以上未知的故障去研究了混沌工程相關內容,雖然這個已知的故障場景用一些網路命令就能復現,用混沌注入頗有點大炮打蚊子的感覺,但是混沌工程主要是用來模擬出現那些未知故障的,也算是借著這個場景了解下最近很火的混沌工程,研究的程序中發現了另一個問題,每次操作都需要手動寫命令,我自己練習完了下次沒辦法再次自動執行,正好那段時間 JumpServer 交流群里在推他們團隊的另外一款測驗平臺產品 —— MeterSphere,里邊的介面自動化能力非常強大,任務定時執行還支持 cron 運算式的圖形化方式,可以讓我這種對 cron 不是那么懂的人都能用的飛起,感覺可以通過這個平臺把混沌測驗中的故障注入和介面測驗結合起來,心動不如行動,逐開始進行操作,
混沌工程相關的概念不是本篇文章的重點,這里不再贅述,用個人理解的一句話介紹 ChaosBlade:ChaosBlade 是阿里開源的一個混沌注入的工具,所謂混沌注入可以理解為制造各種可能發生的故障(比如 CPU、存盤、網路等故障),來模擬線上環境可能會發生的一些問題,通過判斷注入后系統是否還能保持穩定來分析和測驗出系統的健壯性,從而進一步改善系統,
下面就來簡單介紹一下,通過 MeterSphere 是如何呼叫 ChaosBlade 完成一個場景自動化測驗的,
一、準備作業:
1.1 準備好被測系統,這里是單節點 JumpServer一臺,這里因為只是實驗,配置不做多要求,參考 JumpServer 的推薦配置即可;
1.2 準備一臺服務器用于安裝 MeterSphere 測驗平臺,具體操作和使用可參考官網檔案,這里不做介紹;
1.3 從 ChaosBlade 的 github 地址上下載基于 Linux 環境的最新安裝包,下載完成后傳到被測服務器上并解壓即可,無需編譯,
下載地址為:https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/1.2.0/chaosblade-1.2.0-linux-amd64.tar.gz
比如解壓到了服務器的 /opt 目錄下,進入解壓后的檔案夾,可以看到以下內容:
├── bin
│ ├── chaos_burncpu
│ ├── chaos_burnio
│ ├── chaos_changedns
│ ├── chaos_delaynetwork
│ ├── chaos_dropnetwork
│ ├── chaos_filldisk
│ ├── chaos_killprocess
│ ├── chaos_lossnetwork
│ ├── jvm.spec.yaml
│ └── tools.jar
├── blade
└── lib
└── sandbox
其中 blade 是可執行檔案,即 chaosblade 工具的 cli,混沌實驗執行的工具,
在這里先簡單介紹一下如何使用這個工具:
我們拿 CPU 滿載(CPU 使用率 100%) 演練場景舉例(!!注意,在不清楚影響面的情況下,此命令切勿直接在韌性不夠的生產系統機器上執行),執行以下命令實施實驗:
./blade create cpu fullload
執行結果回傳:
{"code":200,"success":true,"result":"7c1f7afc281482c8"}
通過 top 命令查看 CPU 使用率
CPU usage: 93.79% user, 6.20% sys, 0.0% idle
此時命令已經生效,停止混沌實驗,執行:
./blade destroy 7c1f7afc281482c8
回傳以下結果,表示停止實驗成功
{"code":200,"success":true,"result":"command: cpu fullload --debug false --help false"}
再去觀察 CPU 情況,CPU 負載已回到正常狀態:
CPU usage: 6.36% user, 4.74% sys, 88.88% idle
一次 CPU 滿載演練完成,
二、配置相關:
我們知道 MeterSphere 可以做到創建場景介面自動化測驗,測驗的流程包括:
1)確定一個觀察的穩定的指標,如JumpServer的資產串列查詢;
2)在 MeterSphere 上定義一個查詢穩定指標的介面用例:呼叫JumpServer的資產串列查詢的介面;


可以看到,在沒有外界干擾的情況下,能夠正常呼叫JumpServer的介面查詢資產串列,
3)定義第二個介面用例:這個用例執行目的在于引入混沌測驗發起故障注入,(這里選擇提高服務器 CPU 負載到 100%)


4) 定義第三個介面用例:這個用例目的在于查詢上一個混沌注入測驗的注入狀態,引數 result 為上一個混沌測驗所回傳回應的 result 值,


可以通過如下命令查看 CPU 使用率:
iostat -c 1 1000

可以看到,這次請求的回應時間比較長,說明服務器 CPU 負載的提升,對系統的穩定性有一定的影響,可能會影響后續介面的正常呼叫,
5)定義第四個介面用例:這個用例目的在于驗證混沌注入后是否影響對 Jumpserver介面正常的呼叫,以及觀察與第一次呼叫介面時候的差別,


可以看到對比之前請求,回應時間延長了,原先的 56ms 變成了 192ms,但是依然還是能夠正常的請求介面獲取資料,說明 CPU 滿負載還不能破壞我們預先設定的穩定指標,(正常查詢資產串列)
6)定義第五個介面用例:這個用例目的在于銷毀此次的混沌注入測驗,把之前的 CPU 滿負載混沌注入效果銷毀,即使服務器恢復為初始狀態,


7)定義第六個測驗用例:該用例與第三個用例可以復用,這個用例目的在于查詢上一個混沌注入測驗的注入狀態,引數 result 為 MS 在前面用例定義好的變數 result 的值,



可以看到,當成功銷毀混沌實驗后,服務器的 CPU 負載情況已經恢復原始狀態,
8)定義第七個測驗用例:該用例也是此次介面場景自動化測驗的最后一個用例,就是再次呼叫JumpServer 的查詢資產串列,觀察回應結果,


可以看到,這一次請求查詢中間件串列的介面,回應時間 63ms,對比在混沌注入后的接近 200ms 又恢復變快了,說明服務器 CPU 的負載對于介面回應時延還是有一定影響,到此實驗結束,
三、結果展示:
上面只是列出了每個測驗用例的截圖,這里將完整的場景介面自動化做一個展示:

點擊執行,觀察結果:

結果分析:
7 個步驟均執行完成,該流程場景測驗成功,并且能看出,在混沌注入前后,對介面請求的效果是有一定的影響,明顯在注入之后的系統回應時間變長,但是也可以看出 CPU 滿負載依然不能破壞穩態,系統依然能穩定運行,訪問JumpServer也能正常訪問,
四、實驗小結&補充:
1)安裝 ChaosBlade 之后,后臺啟動 blade,會暴露出 web 服務,上層可通過 http 呼叫,請求格式是 chaosblade?cmd= 具體命令,例如執行 CPU 滿載,則請求是 chaosblade?cmd=create%20cpu%20fullload(%20 相當于 unicode 的一個空格),
命令
start 啟動 server 模式, 暴露 web 服務
stop 停止 server 模式, 關閉 web 服務
start 命令引數
-p, --port string 服務埠號,默認是 9526
案例
# 啟動 server 模式,服務埠是 8080
blade server start --port 8080
success, listening on 8080
# 觸發 CPU 負載 50% 場景
curl "http://xxx.xxx.xxx.xxx:8080/chaosblade?cmd=create%20cpu%20load%20--cpu-percent%2050"
{"code":200,"success":true,"result":"e08a64a9af02c393"}
# 銷毀實驗場景
curl "http://xxx.xxx.xxx.xxx:8080/chaosblade?cmd=destroy%20e08a64a9af02c393"
# 停止 blade server
blade server stop
{"code":200,"success":true,"result":"pid is 12619"}
2)相關鏈接說明:
MeterSphere github 地址:https://github.com/metersphere/metersphere
ChaosBlade 地址:https://github.com/chaosblade-io/chaosblade/wiki/%E6%96%B0%E6%89%8B%E6%8C%87%E5%8D%97
ChaosBlade web 服務 http 介面地址:https://chaosblade-io.gitbook.io/chaosblade-help-zh-cn/blade-server
3)感覺 MeterSphere 好像挺適合做這種自動監控的事情的,不知道其它使用者有用 MeterSphere 搞出來一個自動監控平臺的沒,有的話可以一并分享下,
MeterSphere的官網鏈接:https://metersphere.io/
以上就是我在用 MeterSphere 呼叫 ChaosBlade 開源混沌注入工具的簡單實踐,若有不足之處或錯誤的地方請多指出,謝謝,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/293222.html
標籤:其他
