tproxy代理Mysql还挺好用的

tproxy代理Mysql还挺好用的

最近一直在忙,完全没时间去学习其他的东西,每天不是在写bug,就是在改bug。本来就是忙了,以前的老系统都出来一个不知道什么原因的Bug

由于该功能的相关开发早就走了。关于这个问题,业务那边也是反复分析过,未能找到原因。最后没办法找到我这里来,让帮忙看看,我对其中的逻辑并不了解,那么就代码跑起来,跟一下吧。这时候,发现,UAT数据库在本地无法连接了。只能通过跳板机,去找网络求求情,被无情拒绝,因为不合规,总之,有很多历史原因和规定在其中。这时候,就想着,能不能把端口找其他的测试服务器代理一下呢?

在以前,代理TCP,一般也是用Nginx,在nginx.conf加入如下配置:

1
2
3
4
5
6
7
8
9
stream {
server {
listen 3306;
proxy_connect_timeout 1s;
proxy_timeout 300s;
proxy_pass xxx.xx.xxx.xxx:3306;
}
}

然后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

使用场景:
  1. 分析 gRPC 连接何时连接、何时重连
  2. 分析 MySQL 连接池,当前多少连接,连接的生命周期是什么策略
  3. 也可以用来观察和分析任何 TCP 连接
用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ tproxy --help
Usage of tproxy:
-d duration
the delay to relay packets
-down int
Downward speed limit(bytes/second)
-l string
Local address to listen on (default "localhost")
-p int
Local port to listen on, default to pick a random port
-q Quiet mode, only prints connection open/close and stats, default false
-r string
Remote address (host:port) to connect
-s Enable statistics
-t string
The type of protocol, currently support http2, grpc, redis and mongodb
-up int
Upward speed limit(bytes/second)

示例

分析 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还挺好用的

https://blogs.52fx.biz/posts/3729037135.html

作者

eyiadmin

发布于

2023-11-28

更新于

2024-05-31

许可协议

评论