在 Oceanbase 生态大家庭中,除了 Oceanbase 数据库内核部分,还有很多功能强大的周边工具,这些工具实现了不同的功能,满足了客户多样化的需求。本文将介绍两个极具代表性的的生态工具,帮助大家对 Oceanbase 生态有更全面的了解。
面向运维人员的工具 OCP(Oceanbase Cloud Platform):白屏化管理和运维 Oceanbase 数据库,让运维管控更加简单数据访问链路工具 ODP(Oceanbase Database Proxy):让访问分布式数据库像访问单机数据库一样简单
当然,如果看完本文还觉得意犹未尽,可以来听 Oceanbase 社区版教程直播第八期《 详解 Oceanbase 社区版 ODP & OCP 两大生态工具》。
本次直播将为你讲解:
ODP 篇
通过比较不同的数据库系统架构,说明为什么需要使用 ODP;ODP 的核心功能介绍和常见问题说明;不同场景中 ODP 的部署和使用。
OCP 篇
介绍 OCP 的核心功能和常见问题;介绍不同场景使用 OCP 的建议。
以上内容将帮助你解决以下痛点:
ODP 篇
Oceanbase数据库是分布式架构,ODP 如何让访问 Oceanbase 数据库像访问单机数据库一样简单?分布式系统中存在很多问题,比如机器故障和上下线、网络问题、不同机房延迟问题等,ODP 怎么应对这些问题?面对复杂的业务场景,ODP 有哪些部署和使用建议?
OCP 篇
Oceanbase 集群部署起来太复杂,想要体验却一直阻碍在第一步;Oceanbase 作为一个分布式数据库,如何全面掌控集群的运行状态;想使用 Oceanbase 又需要其他组件,有没有一个统一的平台能做所有的事情。
学完本期,你将能轻松应对以下问题:
ODP 篇
ODP 在 OB 架构中的重要作用,以及如何部署和运维 ODP;了解 ODP 的连接管理、路由问题、高可用等知识点,学会分析处理常见问题;全链路了解 Oceanbase 数据库的运行机制。
OCP篇
顺利地部署 OCP 并且用来管理 Oceanbase 和相关组件;OCP 在 Oceanbase 生态中的作用,如何串联起 Oceanbase 和其他生态工具;Oceanbase 在生产环境使用的一些规范建议。
01 ODP 介绍
「ODP 简介」
ODP 是 Oceanbase 的代理服务器,对外提供统一的访问入口:
ODP 完全兼容 MySQL 协议,用户访问 ODP 的方式与访问 MySQL 保持一致,ODP 透明转发来自客户端的 SQL 至 Oceanbase。用户无需修改现有的数据库访问代码,即可正常访问数据库。兼容 MySQL 的各种语言客户端,包括 Java/C++/Python/Go/Rust等。ODP 无状态、轻量,CPU 最低需要1c,内存启动约百M,可以在任意 linux 机器上部署。
通过使用 ODP,用户可以访问 Oceanbase 不同集群下的不同租户,简单方便。
「特性介绍」
除了作为访问链路的入口,ODP 还具有如下核心能力:
高性能转发:ODP 完整兼容 MySQL 协议,采用多线程异步框架和透明流式转发的设计,既保证了数据的高性能转发,也确保了自身对机器资源的最小消耗。最佳路由:ODP 会充分考虑用户请求涉及的副本位置、用户配置的读写分离路由策略、Oceanbase 多地部署的最优链路,以及 Oceanbase 各机器的状态及负载情况。ODP 将用户的请求路由到最佳的 OBServer,最大程度保证了 Oceanbase 整体的高性能运转。连接管理:针对一个客户端的物理连接,ODP 维持自身到后端多个 OBServer 的连接,采用基于版本号的增量同步方案维持了每个 OBServer 连接的会话状态,以此保证了客户端高效访问各个 OBServer。专有协议:ODP 与 OBServer 默认采用了 Oceanbase 专有协议,如增加报文的 CRC 校验保证与 OBServer 链路的正确性,增强传输协议以支持 Oracle 兼容性的数据类型和交互模型。安全可信:ODP 支持使用 SSL 访问数据,并和 MySQL 协议做了兼容,以满足客户的安全需求。易运维:ODP 本身无状态,不仅支持无限水平扩展,还支持同时访问多个 Oceanbase 集群。ODP 可以通过丰富的内部命令实现对自身状态的实时监控,以此实现极大的运维便利性。
我们以下图为例说明 ODP 的特性:
图中 APP 是我们的业务程序,APP 前面有三台 OBProxy(ODP 的进程名叫做 OBProxy)。在实际部署中,OBProxy 和 APP 之间一般会有一个负载均衡如 F5。F5 将请求分散到多台 OBProxy 上面,而 OBProxy 后面就是 OBServer,图中有6台 OBServer。使用 ODP 好处如下:
连接管理:OBServer 集群规模庞大,机器、软件出现问题或者本身运维机器上线、下线概率较大,如果直连 OBServer,碰到上面情况客户端就会发生断连。ODP 屏蔽了 OBServer 本身分布式的复杂性,客户连接 ODP,ODP 可以保证连接的稳定性,自身对 OBServer 的复杂状态进行处理。
数据路由:ODP 知道 OBServer 中数据分布信息,可以将用户 SQL 高效转发到数据所在机器,使执行更加地高效。如表 t1 数据在图中 P1 内,表 t2 数据在图中 P2 内,条 t3 数据在图中 P3 内,红色表示主副本,蓝色表示备副本,对于 insert into t1 语句 ,ODP 可以将 SQL 转发到 IDC2 中含有 P1 主副本的机器上。update t2 语句保证了 ODP 可以将 SQL 转发到 IDC1 中含有 P2 主副本的机器上。
想 get 以上好处?快点击视频,掌握如何使用 OBD 快速部署ODP。
视频地址: 为什么不建议单独部署proxy代理_哔哩哔哩_bilibili
「设计实现」
ODP 主要业务架构如下图:
ODP 的异步框架采用了多线程 Epoll +非阻塞的模式,异步转发框架非常高效。单独测试异步框架和 Nginx 对比,ODP 转发性能和 Nginx 非常接近。在高效转发基础上,ODP 实现了 MySQL 通信协议,进行了生态兼容,使 MySQL 客户端可以无成本使用,并且 ODP 还可以解决通信过程中和多台 OBServer 的状态同步问题。
此外,ODP 还实现了连接管理,能有效 处理和 OBServer 之间的各种网络情况,屏蔽 OBServer 异常,保证 Client 和 ODP 之间连接的稳定。除了这些,ODP 还能有效处理路由问题,确保 SQL 执行效率最佳。
接下来,我们以路由为例说明 ODP 核心功能的实现逻辑。下图展示了路由的核心模块,主要包含4个步骤:
1、解析 SQL:ODP 实现了 Parser 技术,ODP 可以从 SQL 中获取表名、Hint、分区键等关键路由信息;
2、路由规则:获取完 SQL 信息后,ODP 需要确定路由规则,以实现丰富路由策略,从而应对不同场景挑战;
3、路由表:根据规则,ODP 会查找路由表获取满足规则的机器列表,路由表从 OBServer 拉取,通过缓存形式保存在内存中;
4. 容灾检查:从机器列表中 ODP 会选择一个 OBServer 做容灾检查。检查内容包括 Server是否宕机、是否发生过不可用情况等,通过检查才会将请求发往该机器。
上面每一部分都有很多细节,ODP 本身也经过大量场景打磨,确保其在各种场景中广泛使用。
「小结」
ODP 是访问 Oceanbase 数据库的重要工具,在蚂蚁集团内部、私有云场景、公有云场景都有广泛使用,上面介绍了服务 Oceanbase 的内核能力。除了这些,ODP 还具有一些中间件产品的特性,如 Sharding、连接池、安全、限流熔断、全链路诊断等。目前,ODP 不断打磨产品的易用性,满足客户需求,让大家使用 Oceanbase 更加方便。
02 OCP 介绍
「何为 OCP」
对于数据库系统来说,想要提升用户的使用效率,管控平台的使用必不可少。Oceanbase 数据库作为一个金融级别的分布式数据库来说,更是如此。OCP 是针对 Oceanbase 设计开发的一款数据库管控平台,能够提供白屏化的 Oceanbase 运维监控能力,无论是让新手用户快速上手使用 Oceanbase,还是在生产环境,作为 DBA 日常的运维工具都非常合适。OCP 降低了 Oceanbase 运维的复杂性,能够将 Oceanbase 的运行状态直观地展示出来,使 Oceanbase 不仅兼具高性能和高可用,同时也能做到可运维和可监控。
「为什么要使用 OCP」
1、降低运维 Oceanbase 的复杂性
相比传统数据库,Oceanbase 分布式的架构设计带来了更好的容灾能力和近乎无限的扩展能力,但是整个系统也更加复杂:
新用户想要体验 Oceanbase 常常卡在了如何将 Oceanbase 运行起来的第一步;在生产系统中,想要运维好 Oceanbase 也不是一件容易的事情。
OCP 提供了 Oceanbase 的运维管控能力,从 Oceanbase 集群的创建到日常使用运维到最终下线,全部都可以通过 OCP 在 Web 端完成。
场景1:我是新手用户,如何快速创建一个 Oceanbase 集群进行体验
在 OCP 中,将主机资源添加进去,按照页面提示,发起创建集群的任务,任务完成后,集群就建好了,全程只需要 Web 页面上填写一些信息。
场景2:在大规模生产环境,主机故障经常发生,如何快速进行恢复?
Oceanbase 提供了不同级别的容灾能力,都依赖多数派予以实现,对于发生少数派的故障可以容忍,但是一定要及时处理,避免其发展成多数派故障,影响可用性。一般处理方式是直接将故障主机进行替换。OCP 提供了一键替换故障主机的能力,选择要替换的主机,发起任务即可。
2、作为诊断 Oceanbase 的利器
好的系统不仅要好用,可监控也是一项重要的能力,Oceanbase 提供了各种视图,记录自身的运行状态。要通过这些视图来排查问题,需要对 Oceanbase 足够了解,而且有些视图只能记录当前的状态值,无法看到一段时间的趋势。OCP 收集了 Oceanbase 主要的监控指标,并且进行了整理,支持实时和历史趋势的查询,能够以不同的逻辑和时间维度来分析问题。
问题1:OCP 的监控和 OBAgent 有什么区别,应该怎么选
OCP 是一个全功能的平台,包含了监控数据的采集、计算和展示,OBAgent 仅做采集,需要配合 Prometheus 和 Grafana 来使用。
OCP 的指标经过筛选,页面也是按照 Oceanbase 的资源进行设计,而 OBAgent 的配置更加灵活,采集计算的逻辑以及 Grafana 的展示页面都可以自己配置,每部分更专注自身的逻辑。
问题2:OCP 的监控数据如何与其他系统集成
OCP 采集监控数据是通过 Exporter 的形式进行的采集,可以和 Prometheus 进行集成。OCP 提供了 OpenAPI 进行监控数据的查询,可以直接查询到计算好的监控数据。
3、为其他组件提供配置服务
OCP 作为 Oceanbase 生态中的一个重要成员,除了具有 Oceanbase 的运维监控功能之外,也为其他组件提供了 Oceanbase 的原数据查询功能,OCP 中记录了 Oceanbase 的 Rootservice 地址信息,并保证了同步,可以为其他组件提供连接 Oceanbase 的方式。
03 OCP 系统架构简介
「 OCP 模块简介」
OCP 最重要的模块包括 OCP 管理服务、OCP Agent、存储数据库三个部分:
OCP 管理服务:一个由 java 实现的服务,实现了管控 Oceanbase 的主要逻辑,提供 http 服务;OCP Agent:部署在 OCP 管理的主机上,负责执行 OCP server 发送的运维命令、采集监控指标;存储数据库:包含元信息数据库和监控数据库,元信息数据库记录了 OCP 管理的资源,包括主机、Oceanbase 集群、OBProxy 等,监控数据库记录了采集到的监控原始数据和聚合计算之后的结果。
「OCP 运维功能实现简介」
Oceanbase 作为一款分布式数据库,相较于传统数据库有更多的节点和组件需要管理。为了保证系统的持续可用性,Oceanbase 运维过程往往更复杂,同时也较容易遇到异常情况,我们需要考虑每一步操作的原子性。OCP 为了解决以上问题,设计了一个任务引擎以支撑 Oceanbase 的运维场景。
OCP 通过将 Oceanbase 的运维流程拆分为一个个独立的原子任务,并将这些原子任务按照 DAG 图的方式组织起来,按照顺序执行,互相不依赖的节点可以并发执行,在某个节点出错时,支持重试任务,能够让运维任务的执行更加高效可靠。
在不同平台上,命令的表现行为可能不同,OCP-Agent 将常用的命令抽象成接口,底层根据平台进行了不同的实现,对外暴露出来的是相同的接口,涉及到在主机上的运维操作,由 OCP-Server 调用 OCP-Agent 的接口来实现。
「OCP 监控功能实现简介」
一方面,OCP 的监控功能参考了 Prometheus 的实现方式,OCP-Agent 提供了 Exporter 能力,会根据配置的采集逻辑来采集数据,将采集到的数据以 Prometheus 协议的格式返回,OCP-Server 周期性地拉取数据并进行缓存,定期将缓存数据写入数据库中实现持久化,由此,OCP-Server 实现了 PromQL 查询表达式的子集,能够以 PromQL 的语法进行监控数据的聚合计算查询。
另一方面,Oceanbase SQL 的相关数据,由 OCP-Agent 通过推送的方式,将采集到的数据,直接写入到监控数据库,而 OCP-Server 端存在定期聚合的逻辑,可以直接查询到聚合后的数据。
「使用 OCP 需要注意的问题」
OCP 作为一个重要的组件,要长期稳定运行,需要为 OCP 准备好运行环境,包括准备好依赖和做好主机规划。
此外,工欲善其事,必先利其器。OCP 对 Oceanbase 的运维有特定的依赖和限制,提前了解和准备好这些依赖能够避免 99% 的问题。
更多详细内容欢迎大家收看 2月17日周四晚 19:30 Oceanbase 社区版教程直播第八期:详细解读 ODP&OCP 两大生态工具。