oceanbase 3.X在2022年1月6日DC2021分布式数据库开发者大会上发布,引起了广泛关注。本文基于oceanbase社区版最新发布的3.1.2,作为连接用户和数据库最重要的生态工具产品解读产品工具OCP的主要模块。

1、任务引擎

与传统数据库相比,分布式数据库需要管理更多的节点和组件。为了保证系统的可持续性,日常操作和维护需要非常复杂的步骤,并考虑每一步操作的原子性。为了解决上述问题,社区版的OCP设计任务引擎支持oceanbase社区版的运营和维护场景。

任务引擎支持以安排的方式构建任务模板。通过根据一定的依赖关系,将原子任务逐一构建成一个完整的任务模板,可以实现非常复杂的操作和维护操作。建立模板后,同一类别的任务只需要传入不同的参数,任务引擎会根据模板和具体参数构建任务的例子。作为context,参数将在整个任务过程中不断向下传输。当任务节点发生一些变化时,可能会修改context中的内容,后面的节点可以及时识别变化。

任务的执行由一组worker线程完成。任务引擎将负责原子任务的调度。只有在上游依赖的任务节点成功执行后,才能执行当前的任务节点。任务节点的状态保持在数据库中。任务引擎的多个节点可能只有一个节点可以执行任务。当任务引擎的某个节点挂断时,其他节点仍然可以执行任务。

社区OCP有两个任务,一个是用户触发的,比如页面上发起的运维任务,一个是定期调度的任务,比如一些定期同步检查的任务。任务引擎支持OCP上几乎所有的运维场景。

2、监控模块

社区OCP有两种监控数据模式,一种是主动将metric类型的数据拉出到agent中,在查询时根据表达式进行计算;另一种是通过agent推送数据的sql相关数据,并根据数据进行汇聚计算。

(1)拉取数据模式

在主机上部署的ocp-agent有一个ocp_exporter流程,负责收集主机上相关服务的监控数据,并以prometheus协议的形式暴露出来。监控数据主要包括主机指标、OBProxy指标和observer指标,根据主机上部署的服务不同,采集的监控数据也不同。ocp-server会定期拉取ocp_exporter收集的数据。最近一段时间的数据会在内存中缓存,缓存的数据会定期写入monitordb。在查询监控数据时,根据要查询的监控指标找到相应指标的计算表达式,然后根据表达式中的原始指标从monitordb和缓存中读取相应时间段的数据,然后进行聚合计算。

(2)数据推送模式

在oceanbase中,也有一些指标不适合以metric的形式收集,例如sql相关指标,这些指标由ocp-agent中的obstat2进程收集,收集后直接将原始数据推送到monitordb,然后有一个定时任务来聚合计算原始数据,查询时,根据需要查询的精度,从monitordb查询聚合后的结果。

(3)ocp-agent

ocp-agent是OCP的重要组件,部署在主机上。在OCP中添加主机时,安装部署,然后依靠ocp-agent进行操作和维护和监控。运维方面,ocp-agent提供了rpc接口,同时包装了运行维护命令,在OCP执行运行维护任务时,通过调用ocp-agent的rpc接口来实现具体操作,此外,ocp-agent还具有检查oceanbase日志报警、清理日志的能力。在监控方面,ocp-在agent中,有几个过程,负责监控数据的收集,支持通过配置的方式收集监控数据,提供prometheus协议格式的界面,也有一些数据可以直接推送monitordb。

在未来的版本规划中,社区版OCP的备份和恢复以及更先进的诊断功能将相继支持开源,数据库的备份和恢复操作可以通过社区版OCP界面操作方便。同时,DBA和开发学生多年积累的OCP报告和诊断建议对DBA非常有价值,可以帮助快速定位可能出现的性能问题,帮助用户更专业、更高效地使用oceanbase社区版本。