本文总结了 OBProxy 可能与 OBServer 节点断联的原因。
OBProxy 日志中如果发现 Server 处理逻辑收到了 VC_EVENT_EOS 事件,表示 OBProxy 和 OBServer 之间的连接已经被关闭。可能的原因如下:
客户端异常断连接
在执行 SQL 过程中,Client 异常断连接,可以搜关键词
[watch_for_client_abort] forwarding event to tunnel或者[watch_for_client_abort] connection close来确认问题。在连接空闲状态下,Client 异常断连接,可以搜关键词
ObMysqlSM::state_client_request_read | grep VC_EVENT_EOS来确认问题。
注意
日志里如果
cluster_name、tenenat_name、db是空的,并且 IP 是 127.0.0.1 的是 NC 探活,可以忽略。错误导致的断连接 ,执行:
grep '\[setup_error_transfer\] Now closing connection' obproxy.log |grep -v "Quit"
OBProxy 主动断连接
- 如果是由于超时导致的断连接,日志里搜
VC_EVENT_INACTIVITY_TIMEOUT。
- 如果是由于超时导致的断连接,日志里搜
OBServer 端断连接
如果是执行 SQL 过程中 server 断了连接,执行
grep "handle_server_connection_break" obproxy.log | grep -v "Quit"有时需要通过抓包来看谁具体原因。抓包命令:
sudo tcpdump -i eth0 tcp port 2883 -vvv -w data.capeth0 是网卡名称,根据机器网卡名称修改成对应的。2883 是对应端口号。data.cap 是保存文件名称,文件名可以自定义。
适用版本
OBProxy V2.x 和 V3.x 版本。