網路延遲演練
網路延遲直接影響應用程式和服務的響應速度,過高的網路延遲會影響使用者的使用體驗。網路流量增大、線路不穩定等情況都會增加網路延遲。通過此演練情境驗證系統在網路延遲時的警示和恢複情況。
使用限制
該演練情境需要使用tc(Traffic Control)工具及其依賴的核心netem組件。
-
如系統缺少tc工具,請執行
sudo yum install -y iproute-tc或sudo apt-get install -y iproute2安裝,或者執行外掛程式時指定相關參數自動安裝。 -
如系統核心缺少netem組件,如CentOS,可執行
sudo yum install kernel-modules-extra安裝軟體包並重啟。警告注意安裝
kernel-modules-extra會修改核心版本,請謹慎操作,建議使用其他動作系統的ECS進行演練。
實現原理
本方案使用雲助手外掛程式ACS-ECS-NetDelay,使用tc(Traffic Control)工具和netem組件對網卡增加特定規則,實現對Linux核心流量控制。該外掛程式可實現對全域IP或僅針對單個IP進行限制,其中雲助手網段100.100.0.0/16不會受到影響。
使用指南
演練準備
請確保您的ECS執行個體已安裝雲助手Agent,並且雲助手狀態為正常。具體操作,請參見查看雲助手狀態及異常狀態處理。
故障注入
-
登入ECS執行個體。
具體操作,請參見使用Workbench登入Linux執行個體。
-
使用具有sudo存取權限的使用者,運行雲助手外掛程式
ACS-ECS-NetDelay。sudo acs-plugin-manager --exec --plugin ACS-ECS-NetDelay --params inject,dev=eth0,[time=paramA],[jitter=paramB],[target-ip=paramC],[replace=paramD],[duration=paramE],[install-tc=paramF][]內為可選故障注入參數,參數說明:-
dev(必填):需要注入的網卡,如eth0,可執行
ifconfig查看當前系統的網卡。 -
time(可選):延遲時間,單位為ms,預設100。
-
jitter(可選):抖動範圍,單位為ms,預設10。
-
target-ip(可選):預期產生影響的目標IP,預設為空白,表示對所有IP增加延遲,如指定目標IP,則只有該IP會受到影響。
-
replace(可選):如網卡已有設定的tc規則,注入時會產生衝突導致失敗。如確定對原有規則進行覆蓋,可指定值為true。
-
duration(可選):期間,單位為s,預設為300。
-
install-tc(可選):如系統缺少
tc工具,可指定該參數為true自動安裝,預設false。
顯示如下所示時,說明雲助手外掛程式
ACS-ECS-NetDelay執行成功。Will add a 100ms delay and a 10ms jitter to dev: eth0 Done -
-
通過ping目標網路,查看故障注入是否成功。
故障恢複
-
方法一:等待逾時自動回復。
-
方法二:執行故障恢複命令。
sudo acs-plugin-manager --exec --plugin ACS-ECS-NetDelay --params recover
演練案例
-
類比業務訪問目標網路。
ping www.taobao.com本樣本以訪問www.taobao.com為例進行說明,返回樣本如下:
[ecs-user@iZ0j... ~]$ ping www.taobao.com PING www.taobao.com.danuoyi.tbcache.com (xxx) 56(84) bytes of data. 64 bytes from xxx: icmp_seq=1 ttl=53 time=11.9 ms 64 bytes from xxx: icmp_seq=2 ttl=53 time=11.10 ms 64 bytes from xxx: icmp_seq=3 ttl=53 time=11.8 ms 64 bytes from xxx: icmp_seq=4 ttl=53 time=11.9 ms 64 bytes from xxx: icmp_seq=5 ttl=53 time=12.0 ms 64 bytes from xxx: icmp_seq=6 ttl=53 time=11.9 ms 64 bytes from xxx: icmp_seq=7 ttl=53 time=12.4 ms 64 bytes from xxx: icmp_seq=8 ttl=53 time=13.1 ms 64 bytes from xxx: icmp_seq=9 ttl=53 time=11.8 ms 64 bytes from xxx: icmp_seq=10 ttl=53 time=11.9 ms -
執行故障注入。
sudo acs-plugin-manager --exec --plugin ACS-ECS-NetDelay --params inject,dev=eth0,time=1000,jitter=30,duration=120對目標IP,增加1000ms延遲,抖動30ms。
-
查看注入效果。
查看網路延遲情況,ping命令在注入後延遲增加1000ms,產生的延遲在1000±30ms範圍內。
64 bytes from xxx: icmp_seq=126 ttl=53 time=11.10 ms 64 bytes from xxx: icmp_seq=127 ttl=53 time=12.1 ms 64 bytes from xxx: icmp_seq=128 ttl=53 time=11.9 ms 64 bytes from xxx: icmp_seq=129 ttl=53 time=1070 ms 64 bytes from xxx: icmp_seq=130 ttl=53 time=969 ms 64 bytes from xxx: icmp_seq=131 ttl=53 time=1033 ms 64 bytes from xxx: icmp_seq=132 ttl=53 time=1039 ms 64 bytes from xxx: icmp_seq=133 ttl=53 time=1028 ms 64 bytes from xxx: icmp_seq=134 ttl=53 time=995 ms 64 bytes from xxx: icmp_seq=135 ttl=53 time=975 ms 64 bytes from xxx: icmp_seq=136 ttl=53 time=1032 ms 64 bytes from xxx: icmp_seq=137 ttl=53 time=992 ms 64 bytes from xxx: icmp_seq=138 ttl=53 time=1015 ms 64 bytes from xxx: icmp_seq=139 ttl=53 time=1027 ms 64 bytes from xxx: icmp_seq=140 ttl=53 time=1024 ms 64 bytes from xxx: icmp_seq=141 ttl=53 time=1046 ms 64 bytes from xxx: icmp_seq=142 ttl=53 time=982 ms 64 bytes from xxx: icmp_seq=143 ttl=53 time=1068 ms 64 bytes from xxx: icmp_seq=144 ttl=53 time=984 ms 64 bytes from xxx: icmp_seq=145 ttl=53 time=989 ms -
等待故障恢複。
注入逾時後,延遲降低回原有水平,網路恢複。
64 bytes from xxx : icmp_seq=268 ttl=55 time=977 ms 64 bytes from xxx : icmp_seq=269 ttl=55 time=1066 ms 64 bytes from xxx : icmp_seq=270 ttl=55 time=946 ms 64 bytes from xxx : icmp_seq=271 ttl=55 time=1023 ms 64 bytes from xxx : icmp_seq=272 ttl=55 time=928 ms 64 bytes from xxx : icmp_seq=273 ttl=55 time=945 ms 64 bytes from xxx : icmp_seq=274 ttl=55 time=1049 ms 64 bytes from xxx : icmp_seq=275 ttl=55 time=1014 ms 64 bytes from xxx : icmp_seq=276 ttl=55 time=11.8 ms 64 bytes from xxx : icmp_seq=277 ttl=55 time=11.8 ms 64 bytes from xxx : icmp_seq=278 ttl=55 time=11.7 ms 64 bytes from xxx : icmp_seq=279 ttl=55 time=11.7 ms 64 bytes from xxx : icmp_seq=280 ttl=55 time=11.6 ms 64 bytes from xxx : icmp_seq=281 ttl=55 time=11.6 ms 64 bytes from xxx : icmp_seq=282 ttl=55 time=11.6 ms 64 bytes from xxx : icmp_seq=283 ttl=55 time=11.7 ms