准备搭建tcpcopy引流测试新架构。
首先下载tcpcopy与intercept。 分别安装在线上机器与辅助测试机上(丢包用)。说下自己的操作过程。
我现在target测试机上面配置route, route add -net 1.1.1.0 netmask 255.255.255.0 gw 辅助测试机ip。
本意乃是想把线上的流量重写来源为1.1.1.x, 发到测试机做区分。
随后分别启动丢包机与线上机tcpcopy程序。
/usr/local/tcpcopy/sbin/tcpcopy -x source_port-target_ip:target_port -s intercept_ip -c 1.1.1.x -l ./logs -d
/usr/local/intercept/sbin/intercept -i eth0 -F 'tcp and src port target_port' -d -l ./logs
最后tcpdump -Annls0 -i eth0 tcp port target_port查看引流是否成功, 悲剧的发现没有任何流量。
在我搞了一天半以后也没有解决。 中途发现tcpcopy的logs报错many connections cant established && intercept端口为36524. && intercept机器需要打开ip转发等等。
最后找人帮忙解决, 对方先在三台机器分别抓包, 发现链接没成功。 最后让我换台机器试下, 于是我把线上机器换了一台和测试机同一地区同一运营商的机器, 发现直接成功了。然后对方回去找stackoverflow后, 告诉我把-c换成线上服务器网段试试,
我更改route和tcpcopy -c 后,发现成功了。 结论就是不同地区不同运营商的-c必须设置一个能ping通的才行。
ps: 反正我去百度和stackoverflow上面查啥都没得到。
我其实最想记录的就是, 这个问题我也应该能解决。 首先, 以后需要把所有可能的排查记到本上, 一条一条划, 排除了不可能之后, 剩下的所有可更改的地方都可以当做排查点。 其次, 了解原理之后再来想问题会得到新的排查目标。 最后, 基础知识能帮助你看破很多问题&&死之前不要问别人。