背景
為了驗證系統(tǒng)的健壯性,非強依賴系統(tǒng)的故障不會影響主流程,驗證熔斷策略是否生效等情況。
TC命令作為linux 上的流量控制(traffic control)命令,比firewalld更適合進行網(wǎng)絡(luò)狀況模擬。
如下命令是我的模擬命令用來模擬Redis timeout時對系統(tǒng)的影響。
我對其實驗過程:
1、sudo tc qdisc add dev eth0 root handle 1: prio bands 4
2、sudo tc qdisc add dev eth0 parent 1:4 handle 40: netem delay 200ms? ? 這里設(shè)置delay時間
3、tc filter add dev eth0 parent 1:0 protocol ip? prio 1 u32 match ip dport 6379 0xffff flowid 1:4? ?這里是設(shè)置針對目標(biāo)端口
? ? ? sudo tc filter add dev eth0 parent 1:0 protocol ip? prio 1 u32 match ip dst yourip/24 flowid 1:4? 這里設(shè)置針對目標(biāo)IP
4、sudo tc filter show dev eth0? ? 確認(rèn)效果生效
5、tc filter del dev eth0 pref 4? ? ? 刪除配置的隊列
注釋:常用的命令解釋
tc 命令
刪除網(wǎng)卡隊列配置: tc qdisc del dev wlan0 root
filter列出來: tc -s filter show dev lo
刪除filter:? tc filter del dev lo pref 4
1
? ? ? ?tc qdisc add dev eth1 root handle 1: prio
? ? ? 為網(wǎng)卡eth1建議一個隊列,名字為root,句柄為1
? ? ? 可以利用下面這三個命令為根隊列1創(chuàng)建三個類別,分別是1:11、1:12和1:13,它們分別占用40、40和20mbit的帶寬。
2
? ? ? tc?class?add?dev?eth1 parent?1:?classid?1:11 htb?rate?40mbit?ceil?40mbit
? ? ? tc?class?add?dev?eth1 parent?1:?classid?1:12?htb?rate?40mbit?ceil?40mbit
? ? ? tc?class?add?dev?eth1 parent?1:?cllassid?1:13?htb?rate?20mbit?ceil?20mbit
? ? ? 查看當(dāng)前網(wǎng)卡上配過的流量控制規(guī)則
? ? ? ? ? #?tc[-s | -d ] qdisc show [ dev DEV ] ? ? ? ? ? ? ? tc -s qdisc show dev eth1?
? ? ? ? ? # tc[-s | -d ] class show dev DEV ?
? ? ? ? ? # sudo tc filter show dev eth0
? ? ? ? ? # tc -s -d qdisc ls