tproxy代理Mysql还挺好用的
最近一直在忙,完全没时间去学习其他的东西,每天不是在写bug,就是在改bug。本来就是忙了,以前的老系统都出来一个不知道什么原因的Bug
由于该功能的相关开发早就走了。关于这个问题,业务那边也是反复分析过,未能找到原因。最后没办法找到我这里来,让帮忙看看,我对其中的逻辑并不了解,那么就代码跑起来,跟一下吧。这时候,发现,UAT数据库在本地无法连接了。只能通过跳板机,去找网络求求情,被无情拒绝,因为不合规,总之,有很多历史原因和规定在其中。这时候,就想着,能不能把端口找其他的测试服务器代理一下呢?
在以前,代理TCP,一般也是用Nginx
,在nginx.conf
加入如下配置:
1 | stream { |
然后nginx -s reload
即可代理。
我就去测试环境找了一下Nginx
,但是,我们这边很多nginx都没装Stream
模块,没办法转发。如果想到用Nginx,那么就要去重新加载Stream
模块,编译安装时带 –with-stream –with-stream_ssl_module 参数,然后重新编译,修改nginx.conf
中的配置,也是有点麻烦。最后找到了大佬开源的tproxy
项目,直接下载二进制,执行一行代码即可代理成功
1 | ./tproxy -l 0.0.0.0 -p 8081 -r xx.xxx.xx.xxx:3306 |
然后,嗖嗖嗖,一番debug后得以解决。
问题是解决,接下来,我们再来看看tproxy
是个啥?有哪些使用场景?怎么用?
介绍
tproxy是万俊峰大佬基于Golang开发且开源的一个定位用于用于代理和分析TCP连接的cli工具。
开源地址:https://github.com/kevwan/tproxy.git
使用场景:
- 分析 gRPC 连接何时连接、何时重连
- 分析 MySQL 连接池,当前多少连接,连接的生命周期是什么策略
- 也可以用来观察和分析任何 TCP 连接
用法
1 | tproxy --help |
示例
分析 gRPC 连接
1 | tproxy -p 8088 -r localhost:8081 -t grpc -d 100ms |
- 侦听在 localhost 和 8088 端口
- 重定向请求到
localhost:8081
- 识别数据包格式为 gRPC
- 数据包延迟100毫秒
分析 MySQL 连接
1 | tproxy -p 3307 -r localhost:3306 |
查看网络状况(重传率和RTT)
1 | tproxy -p 3307 -r remotehost:3306 -s -q |
查看连接池(总连接数、最大并发连接数、最长生命周期等)
1 | tproxy -p 3307 -r :3306 -s -q |
tproxy代理Mysql还挺好用的