ShardingSphere-Proxy 前端协议问题排查方法及案例

本文介绍了如何使用Wireshark和tcpdump等工具排查ShardingSphere-Proxy的数据库协议问题,以一个MySQL协议问题为例,详细阐述了问题的描述、排查过程和修复方法,帮助读者理解协议问题的解决思路。
摘要由CSDN通过智能技术生成

ShardingSphere-Proxy 是 Apache ShardingSphere 的接入端之一,其定位为透明化的数据库代理。ShardingSphere-Proxy 实现了数据库协议,理论上可以被任何使用或兼容 MySQL / PostgreSQL / openGauss 协议的客户端访问。相比 ShardingSphere-JDBC,ShardingSphere-Proxy 的优势在于对异构语言的支持,以及为 DBA 提供数据库集群的可操作入口。

9662fa60d8d054a58a0eec7895073428.png

与 ShardingSphere 的 SQL 解析模块相似,ShardingSphere-Proxy 对数据库协议的支持度也是一个长期积累的过程,需要开发者不断去完善 ShardingSphere-Proxy 的数据库协议实现。

本篇将给大家介绍数据库协议开发过程中常用的工具,并以一次 ShardingSphere-Proxy MySQL 协议问题的排查过程作为本文工具使用的案例。

1

使用 Wireshark 分析网络协议

Wireshark 是一个常用的网络协议分析工具,其内置了对数百种协议的解析支持(包括本文相关的 MySQL / PostgreSQL 协议),能够读取多种不同类型的抓包格式。

Wireshark 的完整功能、安装等内容可以参考 Wireshark 官方文档[1]

1.1 使用 Wireshark 或 tcpdump 等工具抓包

1.1.1 使用 Wireshark 抓包

Wireshark 本身具备抓包能力,如果连接 ShardingSphere-Proxy 的环境可以运行 Wireshark,可以直接使用 Wireshark 抓包。

Wireshark 启动后,首先选择正确的网卡。

以本地运行 ShardingSphere-Proxy 为例,客户端通过 127.0.0.1 端口 3307 连接 ShardingSphere-Proxy,流量都经过 Loopback 网卡,因此选择 Loopback 作为抓包对象。

1badcb42856d3d1afc0f9d602069671f.png

选择网卡后,Wireshark 即开始抓包。由于网卡中可能会有很多其他进程的流量,需要过滤出指定端口的流量:

tcp.port == 3307

8354a03127dd45b14c009314aa1ea7e3.png

1.1.2 使用 tcpdump 抓包

在 ShardingSphere-Proxy 部署在线上环境,或其他我们无法使用 Wireshark 抓包的情况下,可以考虑使用 tcpdump 或其他工具抓包。

对网卡 eth0 抓包,过滤 TCP 端口 3307,并将抓包结果写入到 /path/to/dump.cap。示例命令:

tcpdump -i eth0 -w /path/to/dump.cap tcp port 3307

tcpdump 的使用方式可以通过 man tcpdump 查看,本文不再赘述。tcpdump 的抓包结果文件可以通过 Wireshark 打开。

1.1.3 抓包注意事项

客户端连接 MySQL,可能会自动启用 SSL 加密,抓包结果无法直接解析出协议内容。使用 MySQL 命令行客户端可以指定参数禁用 SSL,命令如下:

mysql --ssl-mode=disable

使用 JDBC 可以增加参数,参数如下:

jdbc:mysql://127.0.0.1:3306/db?useSSL=false

1.2 使用 Wireshark 读取抓包内容

Wireshark 支持读取多种抓包文件格式,包括 tcpdump 的抓包格式。

Wireshark 默认会把 3306 端口解码 MySQL 协议、5432 端口解码为 PostgreSQL 协议。对于 ShardingSphere-Proxy 可能使用不同端口的情况,可以在 Decode As... 中为指定端口配置协议。

例如,ShardingSphere-Proxy MySQL 使用了 3307 端口,可以按照以下步骤把 3307 端口解码为 MySQL 协议:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值