暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库学习Q&A 096:OceanBase数据库如何避免连接闪断?

闪断避免指的是 ODP 与 OBServer 节点的 Server Session 异常不会被客户端感知,客户端与 ODP 之间的 Client Session 正常,客户端能够正常的读写数据。需要处理 Server Session 异常的情况如下:

  • OBServer 节点发生 Leader 切换,ODP 还没有获取到新的 Leader。这种情况主要由 OBServer 节点来处理,Leader 切换一定要保证将正在处理的事务都完成,ODP 只是尽力保证将请求发送给数据所在的 OBServer 节点,OBServer 节点发生了 Leader 切换,那么即使数据不在该 OBServer 节点上,该节点也需要负责处理该请求,并把结果返回给 ODP。

  • OBServer 节点发生宕机,那么 ODP 与该 OBServer 节点的连接就会断开。如果该 Server Session 正在处理事务中,那么 ODP 需要发送一个错误响应给客户端;如果该 Server Session 处于空闲状态,只需将该 Server Session 从其对应的 Client Session 中标记删除即可。新的请求将不再使用该 Server Session 转发请求。

  • ODP 与 OBServer 节点通信超时,MySQL 协议本没有超时机制,但 OBServer 节点有超时机制,所以 OBserver 节点超时会通知 ODP,ODP 将错误通知给客户端。如果 OBServer 节点发现 Server Session 长时间不活动,也会 Kill 该 Session,这种情况的处理参考第 2 项的处理方式。

  • ODP 与 OBServer 节点之间的网络连接断开或发生网络分区,这种情况处理参考第 2 项,即使发生网络分区,如果 Server Session 上有事务正在执行,OBServer 在一段时间后终止该 Session,所以 ODP 在 Server Session 断开一段时间后,给客户端报错,结束未完成的事务,避免 Session 长时间被挂住。

  • ODP 升级,新启动的 ODP 将负责客户端发起的新 Session,旧 ODP 上的 Session 数量会越来越少,当旧 ODP 上的 Session 数量低于某个阈值时,需要将旧 ODP 上的 Session 全部都终止掉(当然要保证正在处理的事务完成,长事务需要等一段时间,超时仍然没有完成也只能强制 Kill 掉),然后停止旧 ODP。这个过程无法完全避免客户端连接闪断。

  • ODP 宕机,这种情况下,ODP 上的连接都会断掉,可能很快 ODP 被重新启动,或者该 ODP 负责的连接被其它的 ODP 处理,闪断无法避免。

使用 ODP 能够避免大部分异常情况下的连接闪断,特别是在 OBServer 节点发生 Leader 切换、主备集群切换、ODP 升级等后端维护的情况下,能保持客户端连接正常,对客户端的影响比较小。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论