2022 年 1 月 6 日,OceanBase 3.X 工具家族在 DC 2021 分布式数据库开发者大会上重磅发布,引起了广泛关注。作为连接用户和数据库最重要的生态工具产品,本文基于 OceanBase 最新发布的社区版 3.1.2 对产品工具 OCP 进行功能解读。
OceanBase 社区版 OCP ( OceanBase Cloud Platform ) 提供 OceanBase集群的图形化管理能力,包括数据库组件及相关资源(主机、网络和软件包等)的全生命周期管理、故障恢复、监控告警等,旨在协助用户更加高效地管理 OceanBase 集群,降低企业的 IT 运维成本和用户的学习成本。目前支持 OceanBase 社区版 3.1.2 及以上的环境部署以及相关平台服务。
通常安装在计算环境中被监控的每台主机上(含物理主机和虚拟主机等),这些代理程序通过社区版 OCP 管理控制台进行统一的部署和升级,用于控制这些目标主机任务的启动、停止以及收集各种监控指标等操作,然后将系统可用性、指标和任务状态等详细信息提供给 OCP 管理服务,并且各种监控指标以插件方式集成到 agent 当中,如果期望监控非标准指标,可以自行定义监控指标。基于 Java 的大型应用程序。它与管理 Agent 和元信息数据库通信,以便收集和存储相关远程主机上的信息。此外,管理服务通过与 OceanBase 集群通信来远程执行对 OceanBase 的运维命令。也称为元信息库或 MetaDB,用于存储管理 Agent 程序收集到的所有信息。元信息数据库存放目标主机、数据库集群、租户、数据库实例、数据库用户、调度任务和软件版本等信息。也称为监控信息库或 MonitorDB,用于存储 OCP 采集的监控数据。它存放了主机、集群、租户、会话、SQL 等性能指标。提供用于访问、监控和管理整个数据库集群的 Web 界面。管理控制台还提供了一些有用的数据大盘,方便用户登录后直接查看集群的重要信息。OBProxy 是用户连接到 OceanBase 的代理服务,负责将 OCP 管理程序向数据库发送的各种请求路由到元信息集群中,并将返回的信息发送给 OCP 管理服务。
社区版 OCP 包含管理 OceanBase 社区版数据库的所有基本能力,最核心能力包括对 OceanBase 的运维和监控两方面,是部署以及使用 OceanBase 数据库的基础。运维能力包括对 OceanBase 集群、租户、OBProxy 和主机管理,极大的降低了用户使用 OceanBase 的难度,用户可以快速创建使用 OceanBase 所需要的相关资源。在集群管理方面,社区版 OCP 提供了 OceanBase 集群的全生命周期管理功能,包括集群的安装、运维、性能监控、配置、升级和删除等功能,满足用户对 OceanBase 集群管理的大部分需求。如下图所示:
同时 OCP 提供租户的创建、租户结构拓扑图、性能监控、会话管理和参数管理等租户管理能力,无需登录数据库进行租户管理。OCP 提供运维 OceanBase 集群专用的反向代理软件 OBProxy 的能力。您可通过 OCP 创建或接管 OBProxy,也可在 OCP 中为 OBProxy 关联 OceanBase 集群。主机管理能力则提供了主机的信息展示以及主机的添加和删除等功能。在进行数据库日常运维时,监控和告警是企业级 IT 管理软件中非常重要的一部分,OCP 监控支持 OceanBase 集群、租户、主机等不同维度。用户可以使用内置的告警项来满足基本的告警需求,也可以通过告警项配置功能配置自定义告警,同时告警通道还支持通过模板方式配置 HTTP 和脚本通道以适应各种消息通道。除此之外,Open API 提供了和其他平台对接的能力。
分布式数据库相较于传统数据库有更多的节点和组件需要管理,为了保证系统的持续可用性,日常运维需要非常复杂的步骤,同时需要考虑每一步操作的原子性。为了解决以上问题,社区版 OCP 设计任务引擎来支撑 OceanBase 社区版的运维场景。任务引擎支持以编排的方式来构建任务模版,通过将一个一个的原子任务按照一定的依赖关系构建成一个完整的任务模版,可以实现非常复杂的运维操作。构建好模版之后,同一类的任务,对于不同对象,只需要传入不同参数,任务引擎会按照模版和具体的参数来构建任务的实例,参数作为 context 会在整个任务的流程中一直向下传递。当任务的节点做了某些变更之后,有可能会修改 context 中的内容,后面的节点也能够及时识别到这些变更。任务的执行由一组 worker 线程来完成,任务引擎会负责原子任务的调度,保证上游依赖的任务节点执行成功之后,才会执行当前的任务节点,任务节点的状态维护在数据库中,任务引擎的多个节点或保证只有一个节点来执行任务,当任务引擎的某个节点挂掉的时候,其他节点仍然可以执行任务。社区版 OCP 中有两种任务,一种是由用户触发的,比如页面上发起的运维任务,一种是周期性调度的任务,比如一些定期同步和巡检的任务,任务引擎支持了 OCP 上几乎所有的运维场景。社区版 OCP 有两种模式的监控数据,一种是通过主动向 agent 拉取的 metric 类型数据,查询时根据表达式做计算;另一种是靠 agent 推送数据的 sql 相关数据,根据数据来做汇聚计算。部署在主机上的 ocp-agent 有一个 ocp_exporter 进程,负责采集主机上相关服务的监控数据,并以 prometheus 协议的格式暴露出来,根据主机上部署服务的不同,采集的监控数据也不同,监控数据主要包括主机指标、OBProxy 指标、observer 指标。ocp-server 会定时去拉取 ocp_exporter 采集的数据,最近时间段的数据会缓存在内存中,缓存的数据定时写入到 monitordb 中,查询监控数据时,根据要查询的监控指标,找到对应指标的计算表达式,然后根据表达式中原始指标从 monitordb 和缓存中读取对应时间段的数据,再进行聚合计算。OceanBase 中还有一部分指标不适合使用 metric 的形式进行采集,比如 sql 相关的指标,这部分指标由 ocp-agent 中的 obstat2 进程负责采集,采集之后直接将原始数据推送到 monitordb, 之后有定时任务将原始数据进行聚合计算,查询时,根据需要查询的精度,从 monitordb 查询聚合之后的结果。ocp-agent 是部署在主机上的 OCP 重要组件,在 OCP 中添加主机的时候进行安装部署,之后运维和监控都需要依赖 ocp-agent。运维方面,ocp-agent 提供了 rpc 接口,同时对运维命令进行了封装,OCP 执行运维任务的时候,具体的操作通过调用 ocp-agent 的 rpc 接口来实现,另外 ocp-agent 还有一些检查 OceanBase 日志报警,清理日志的能力。监控方面,ocp-agent 中有若干进程,负责监控数据的采集,支持以配置的方式采集监控数据,提供了 prometheus 协议格式的接口,也有部分数据直接推送 monitordb。
作为一款分布式数据库,OceanBase 相对单机版数据库在部署和运维上相对复杂,如果没有可靠的工具,DBA 人工运维非常繁琐且容易出错,很难保证线上系统的稳定运行。OCP 提供了使用 OceanBase 所需要的基本能力,将 OceanBase 的运维简化到在页面上一键即可操作,对于 OceanBase 的监控,提供了不同维度的查询展示,让用户可以实时掌握 OceanBase 的运行状态,很方便的进行运维,将 DBA 从繁杂的运维工作中解脱出来,可以做更加有意义的事情。对于入门级基础用户,分布式数据库的上手难度较大,而社区版 OCP 提供了简单的方式来让用户非常方便的创建和体验 OceanBase 的核心特性,同时将 OceanBase 的部署结构以及租户的资源分布直观的展示出来,对用户学习和理解 OceanBase 非常有帮助。
社区版 OCP 已经提供了运维和监控功能,之后会以这些功能作为基础,深入结合 OceanBase 产品能力提供更加专业的诊断,调优能力,一方面为用户提供更加专业的 OceanBase 使用指导,另一方面向数据库自治发展。
在未来的版本规划中,社区版 OCP 的备份与恢复以及更高级的诊断功能将陆续支持开源,通过社区版 OCP 界面操作可以方便的进行数据库的备份与恢复操作,同时来自 DBA 和开发同学多年的经验积累的 OCP 报告和诊断建议对 DBA 非常有价值,能够协助快速定位可能的性能问题,帮助用户更专业更高效的使用 OceanBase 社区版。
如果您在学习或者使用社区版 OCP 过程中遇到任何问题,或者期望社区版 OCP 后续版本提供哪些功能,欢迎点击文末“阅读原文”,通过 OceanBase 社区问答区联系我们。