概要描述
本文主要描述 TxSQL 连接数满了导致服务异常的排查和解决办法。
详细说明
问题现象
TxSQL 所有 pod 均为 0/1 时可能会是本文描述的情况。
排查步骤
采用如下方式排查是否为 TxSQL 连接数满了导致:
1、确定 TxSQL pod
任意节点执行:
kubectl get po -owide | grep txsql1
看到的三个结果即为3个 TxSQL pod

2、确定 TxSQL Master 节点
根据上一步结果,执行:
kubectl exec -it {上一步任意pod第一列} -- /usr/bin/txsql/tools/txsql.sh list | head -n 1 | awk '{print $3}'

得到的结果是 master 的 IP 地址,如上图的 172.22.22.2 ,再根据上一步结果,可以得到 master 的 pod 名,即 txsql-server-txsql1-6bffd78b48-qlfnh。
3、查看最大连接数配置
根据上一步结果,执行:
kubectl exec -it {上一步得到的Master pod名} -- cat /usr/bin/txsql/etc/phxsqlproxy.conf | grep Master

当前的最大连接数为MasterWorkerThread和MasterIORoutineCnt的乘积,如图就是 5 * 100 ,表示当前最大连接数为500。
4、查看当前 Master 的连接数
根据第2步结果,执行:
kubectl exec -it {第2步得到的Master pod名} -- /usr/bin/txsql/tools/txsql.sh localshell
这样可以进入一个 MySQL shell
然后执行SQL:
show processlist;

左下角即为当前连接数,如当前的 501 ,比上一步获取的最大连接数500更大了,因此确定为是 TxSQL 连接数超了导致的问题。
解决方法
如果根据前面的排查步骤确定为是连接数超了的问题,则可以采用以下两种方法解决:
1 找到当前占用较多的连接,结束使用它的进程来释放
如排查步骤4中截图,可以看出是 Inceptor1 的 Metastore 占用了很多连接,此时可以通过重启 Inceptor1 的Metastore角色来释放掉这些连接,恢复 TxSQL。
2 增大 TxSQL 允许的最大连接数
对排查步骤1中的每个 TxSQL pod,均作如此操作:
1、进入 pod
kubectl exec -it {pod名} bash
2、编辑配置文件
vi /usr/bin/txsql/etc/phxsqlproxy.conf
增大MasterWorkerThread的值,比如想提高最大连接数到 1000 ,就修改为10。
每个TxSQL pod都做了以上两步操作后,可以通过重启 TxSQL 来使其生效。