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

数据库学习Q&A 067:在OceanBase数据库中,如何理解数据库连接?

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/

OBProxy 为用户提供了数据库接入和路由功能,用户连接 OBProxy 就可以正常使用 OceanBase 数据库。用户在使用数据库功能时,OBProxy 和 OBServer 进行交互,且交互流程对用户透明,连接管理就是该交互过程中的关键点之一。 数据库连接包括物理连接和逻辑连接。物理连接主要是指网络连接部分,逻辑连接主要是 ODP 与 OceanBase 数据库之间的 Session 部分。

特性

OBProxy 的连接管理有三个特性:

  1. 代理特性:OBProxy 既是客户端,也是服务端,还需要保证交互行为符合 MySQL 协议规范。
  2. 功能特性:OBProxy 实现了很多的连接功能特性,如访问不同集群、不同租户,再如支持物理备库、分布式下的 ps 功能,以及兼容 killshow processlist 等命令。
  3. 高可用特性:OBProxy 可以处理超时、机器状态变化、网络状态变化等问题,屏蔽后端异常,让用户无感知。

连接映射关系

OceanBase 不同于单机数据库,当你通过客户端与单机数据库建立一个连接时,你的客户端与数据库之间只有一个物理连接,如下图所示。

连接

当你通过 OBProxy 与 OBServer 建立一个连接时,你的客户端与 OBProxy 之间存在一个物理连接,OBProxy 与 OBServer 可能存在多个物理连接,如下图所示。 其中 Client 与 OBProxy 的连接称为客户端连接,OBProxy 与 OBServer 之间的连接称之为服务端连接。

连接

当你的客户端所访问的数据在不同的 OBServer 上时,OBProxy 会为你向 OBServer 建立多个物理连接并且管理复用这些连接,在客户端视角看来仅存在一个逻辑连接,OBProxy 基于此可以为客户提供许多功能特性,比如读写分离、分区表数据路由、分布式 PS、屏蔽后端异常等等。

连接功能特性

和单机数据库不同,OBProxy 将连接的映射关系改变为 M:N,因此有些连接功能需要做额外处理。 举例说明:用户通过 show processlist 查看连接数,此时希望看到的是客户端和 OBProxy 之间的连接数,而不是 OBProxy 和 OBServer 节点之间的连接数。

下面我们对常见的连接功能展开详细介绍:

  • 连接粘性 OBProxy 还未实现所有功能的状态同步,如事务状态、临时表状态、cursor 状态等。对于这些功能,OBProxy 只会将后续请求都发往状态开始的节点,这样就不需要进行状态同步,而缺点是无法充分发挥分布式系统的优势。因此,OBProxy 将根据功能重要程度,逐步支持相关功能的分布式化。
  • show processlistkill 命令配套使用 show processlist 用于展示客户端和服务端之间的连接,对于 OBProxy 来说,show processlist 只展示客户端和 OBProxy 之间的连接,不展示 OBProxy 和 OBServer 节点之间的连接。kill 命令用于杀死一个客户端连接,客户端连接关闭后,OBProxy 也会关闭对应的服务端连接。对于 OBProxy 的 kill 命令,需要先获取对应的 ID(使用 show processlist 命令即可获取 ID)。
  • 负载均衡影响因为 OBProxy 对 show processlistkill 命令做了处理,所以 show processlistkill 命令只有都发往同一台 OBProxy 才能正常工作。在公有云等环境,OBProxy 前面有负载均衡,负载均衡后面挂载多个 OBProxy 上,此时,如果执行 show prcesslistkill 命令是两个不同的连接,负载均衡组件可能将请求发往不同的 OBProxy,在这种情况下,建议不要使用相关命令。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论