适用版本
OceanBase 数据库 V2.x、V3.x 版本。
问题描述
高可用演练时,对一台 OBServer 使用 kill -19 命令来模拟 observer 进程 hung 的故障。Kill 命令执行后,交易受到影响,RT变成,TPS 下降。预期在切主完成后,服务会很快恢复,但是实际上服务持续受到影响的时间超过了 5 分钟,而切主操作在 Kill 命令后 10s 左右即完成了。
问题原因
业务链路为 client - SLB - ODP Sharding - OBProxy - OBServer。
因为模拟的是 observer 进程 hung,ODP Sharding 的探活不会生效,ODPServer 会一直等待 OBServer 的 response,直到 ODP 设置的逻辑库连接参数 socketTimeout 时间达到,触发断链操作。此后,重建链接,交易恢复。当前环境中,ODP 逻辑库连接参数 socketTimeout 设置为 300000ms,即 5分钟。
解决方法
调小 ODPServer 的 socket 超时参数 sockettimeout=5000。
