網路丟包演練
網路丟包是一種常見的網路故障,網路擁塞、網路硬體故障、網路鏈路幹擾等情況都可能會造成網路丟包,通過此演練情境驗證系統在網路丟包時的警示和恢複情況。
使用限制
該演練情境需要使用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-NetLoss,使用tc(Traffic Control)工具和netem組件對網卡增加特定規則,實現對Linux核心流量控制。該外掛程式可實現對全域IP或僅針對單個IP進行限制,其中雲助手網段100.100.0.0/16不會受到影響。
使用指南
演練準備
請確保您的ECS執行個體已安裝雲助手Agent,並且雲助手狀態為正常。具體操作,請參見查看雲助手狀態及異常狀態處理。
故障注入
-
登入ECS執行個體。
具體操作,請參見使用Workbench登入Linux執行個體。
-
使用具有sudo存取權限的使用者,運行雲助手外掛程式
ACS-ECS-NetLoss。sudo acs-plugin-manager --exec --plugin ACS-ECS-NetLoss --params inject,dev=eth0,[rate=paramA],[target-ip=paramB],[replace=paramC],[duration=paramD],[install-tc=paramF][]內為可選故障注入參數,參數說明:為可選故障注入參數,參數說明:
-
dev(必填):需要注入的網卡,如eth0,可使用
ifconfig查看當前系統的網卡。 -
rate(可選):丟包比例,預設10(%)。
-
target-ip(可選):預期產生影響的目標IP,預設為空白,表示對所有IP增加丟包規則,如指定目標IP,則只有該IP會受到影響。
-
replace(可選):如網卡已有設定的tc規則,注入時會產生衝突導致失敗。如確定對原有規則進行覆蓋,可指定值為true。
-
duration(可選):期間,單位為s,預設為300。
-
install-tc(可選):如系統缺少
tc工具,可指定該參數為true自動安裝,預設false。顯示如下內容時,說明雲助手外掛程式
ACS-ECS-NetLoss執行成功。[ecs-user@iZ0j1fp0t**** ~]$ sudo acs-plugin-manager --exec --plugin ACS-ECS-NetLoss --params inject,dev=eth0,rate=40 Will add a 40% network packet loss to dev: eth0 Done
-
-
查看故障注入是否成功。
通過ping目標網路,查看網路丟包情況,如下所示,可以看到網路發生丟包,平均丟包約為44%。
[ecs-user@iZ0jlfp0bytxxx ~]$ ping www.taobao.com PING www.taobao.com.danuoyi.tbcache.com (180.xxx.xxx.xxx) 56(84) bytes of data. 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=2 ttl=55 time=12.5 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=3 ttl=55 time=11.6 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=5 ttl=55 time=11.6 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=6 ttl=55 time=12.4 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=7 ttl=55 time=12.5 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=10 ttl=55 time=18.1 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=11 ttl=55 time=12.1 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=12 ttl=55 time=11.9 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=14 ttl=55 time=11.6 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=21 ttl=55 time=11.6 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=22 ttl=55 time=11.7 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=23 ttl=55 time=11.8 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=24 ttl=55 time=12.5 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=25 ttl=55 time=12.5 ms 64 bytes from 180.xxx.xxx.xxx (180.xxx.xxx.xxx): icmp_seq=27 ttl=55 time=12.6 ms ^C --- www.taobao.com.danuoyi.tbcache.com ping statistics --- 27 packets transmitted, 15 received, 44.4444% packet loss, time 26333ms rtt min/avg/max/mdev = 11.615/12.502/18.083/1.551 ms
故障恢複
-
方法一:等待逾時自動回復。
-
方法二:執行故障恢複命令。
sudo acs-plugin-manager --exec --plugin ACS-ECS-NetLoss --params recover