大家好,我是吃萝卜不吐葡萄皮,可以叫我皮哥。
这几年国产数据库 OceanBase 非常火,身边好多朋友都在提,我也充满兴趣,下班抽空学习一段时间了,想通过笔记的形式分享一下学习进程,部分内容是官方资料的摘录或整合,希望方便更多朋友学习与参考,一起交流。
学习笔记第9篇。
OceanBase Database Proxy(简称 ODP)是 OceanBase 数据库专用的代理服务器。OceanBase 数据库的用户数据以多副本的形式存放在各个 OBServer 上,ODP 接收用户发出的 SQL 请求,并将 SQL 请求转发至最佳目标 OBServer,最后将执行结果返回给用户。
OBProxy 概述
OceanBase 数据库与传统单机数据库不同,OceanBase 数据库是分布式数据库,每个表甚至每个表的不同分区都可能存放在不同的机器上。想要对表进行读写,必须先要定位到数据所属的表或是分区的主副本位置,然后才能执行相应的 SQL 语句,这在应用层面而言是几乎不可能做到的。OBProxy 作为 OceanBase 数据库专用的反向代理软件,其核心功能是路由,将客户端发起的数据访问请求转发到正确的 OBServer 上,并将 OBServer 的响应结果转发给客户端。
客户端通过 OBProxy 访问 OceanBase 数据库的数据链路如下图所示。
用户通过任意 Client 驱动发出请求,请求通过负载均衡组件访问到任意一台无状态的 OBProxy 上,然后 OBProxy 再将用户请求转发到后端 OceanBase 集群中最佳的 OBServer 上去执行。
说明
这里负载均衡组件可以是市场上常见的产品,例如:SLB 和 F5 等。
OBProxy 不负责分库分表,也不作为 SQL 引擎参与执行计划的生成调度,只负责纯粹的反向代理转发。
每个 OBServer 均包含完整的 SQL 引擎和存储引擎,用来负责解析用户 SQL 以生成物理执行计划并执行。分布式的 OBServer 之间通过 Paxos 协议以保证高可用性。这种架构设计中,OBProxy 只承担基本的路由和容灾功能,而数据库的功能全部交由 OBServer 实现。这样更加简单明确的分工可以将各组件性能做得更加极致,OceanBase 数据库整体最高也能做到近似访问单机数据库的性能。
OBProxy 支持将请求正确发送至主副本,并且通过特定配置还支持读写分离和备优先读等场景。另外在 OBServer 节点发生宕机、升级或合并等状态时,可以通过黑名单机制确保用户请求可以被路由至状态正常的 OBServer 上。
管理 OBProxy
OCP 为 OBProxy 提供以下管理功能。
操作 | 说明 |
---|---|
创建 OBProxy 集群 | 您可通过该操作创建 OBProxy 集群。 |
OBProxy 参数说明 | 您可通过该操作管理 OBProxy 集群的参数。 |
删除 OBProxy 集群 | 您可通过该操作删除 OBProxy 集群。 |
升级 OBProxy 集群下全部 OBProxy | 您可通过该操作升级 OBProxy 集群中所有的 OBProxy。 |
重启 OBProxy 集群下的全部 OBProxy | 您可通过该操作重启 OBProxy 集群下全部 OBProxy。 |
管理 OBProxy 连接的 OB 集群 | 您可通过 OCP 为 OBProxy 添加可连接的 OB 集群或删除已连接的 OB 集群。 |
OBProxy 集群性能监控 | 您可以在 OCP 上查看 OBProxy 集群的性能监控信息,包括了服务监控信息和系统监控信息。 |
添加 OBProxy | 您可通过该操作向 OBProxy 集群中添加 OBProxy。 |
启动 OBProxy | 您可通过该操作启动 OBProxy。 |
刷新 OBProxy 配置 | 您可通过该操作刷新 OBProxy 的配置。 |
停止 OBProxy | 您可通过该操作停止 OBProxy。 |
删除 OBProxy | 您可通过该操作删除集群中的 OBProxy。 |
重启 OBProxy | 您可通过该操作重启集群中的 OBProxy。 |
升级 OBProxy | 您可通过该操作升级集群中的 OBProxy。 |