作者简介:雪染,OceanBase 技术专家。
1.OCP 是 OceanBase 一个一站式运维管控平台。
OceanBase 拥有很强大的功能,但当单独使用 OceanBase 内核时,对用户的要求比较高,用户使用并不方便。甚至某些功能的实现,非常依赖于特定工具的配合。比如想要知道 OceanBase 一段时间的QPS, 系统表内无法直接获取,系统表中只记录累加之后的值,需要特定工具持续采集,并持久化这些原始数据才能进行计算。
所以更好的使用 OceanBase 离不开生态工具的配合,OCP 应运而生。
除了 OCP,还有一些其他的工具来支持 OceanBase,比如 OBD 可以做部署和日常运维,OBAGent + Prometheus + Grafana 可以做监控,这些工具都非常好用。
但是每个工具都只满足特定一部分的需求,在满足日常的生产环境使用时,运维人员需要使用多个独立的工具,非常繁琐耗时耗费精力。而 OCP 可以类比于软件开发中的 IDE 开发环境,在一个环境里提供了最常用的功能, 满足绝大部分日常的使用场景。
OCP的主要功能分为以下三个部分:(表)
① OceanBase运维。
- OceanBase集群的安装部署和日常运维。
- 租户管理。
- Database 管理。
- OceanBase 相关生态工具的运维,目前已经支持 Obproxy。
- 主机和软件包的管理, 是最基础的运维能力,为运维 OceanBase 提供支持。
② OceanBase 监控。
- Metric监控指标,包括 OceanBase 和 Obproxy 的监控指标。
- SQL 统计分析,慢 SQL 分析。
- 基于监控指标/日志的报警。
③ 元数据查询服务。
- 存储并实时更新 OceanBase 的rootservice地址。
- 提供给其他组件查询 OceanBase 的rootservice地址。
- 记录 ObProxy 和 OceanBase 的关联关系。这是在前面基础上做的一个能力。
OCP 的应用场景。
① 内部使用:比如蚂蚁内部、阿里集团内部很多机器需要管理,需要标准化管理的平台来支持大规模的管理,让 DBA 专注于更有价值的事。
② 独立输出:为企业用户提供企业级的管理服务。
③ 云上使用:将 OceanBase 以云服务的方式提供给用户。
2. OCP系统架构
上图为 OCP 的系统架构,其主要模块有三:
① OCP 管理服务:它包括一个由 Java 实现的应用程序,实现 OCP 平台的主要逻辑。它会与其他组件交互,对外提供 http服务。管理控制台提供给用户前端页面进行交互,其他系统也可以通过 open api 直接调用 OCP。
② 数据库存储:包括元信息数据库和监控数据库。其中元信息数据库存储 OCP 管理资源的记录,监控数据库存储 OCP 采集的一些监控指标,包括采集到的原始值以及计算后的统计数据。
③ OCP-Agent:它部署在每个 OCP 管控的主机上,提供两种能力。首先,提供运维接口,OCP 需要进行的运维操作通过调用 OCP-Agent 来实现,也通过这种方式,实现跨平台的能力;另外,提供监控能力,包括以服务的形式通过 Prometheus 协议提供 metric 数据,以及主动上报 SQL 相关的数据。
3. OCP 主要功能模块以及实现
3.1 运维模块
OceanBase 作为分布式数据库,相对于传统的单机数据库更加复杂,在运维上面临了诸多挑战:
① 需要管控的节点很多;节点是以一定的层次关系组织在一起的,在运维过程中需要考虑到 OceanBase 的各种限制,比如不能破坏多数派,导致运维流程比较复杂。
② 运维任务耗时长;一个运维任务会包括很多步骤,这些步骤之间有一定的依赖关系,不能完全并行执行,此外,一般运维的步骤会有涉及到主机上的一些操作,相对比较耗时。
③ 任务在任何步骤都可能失败;一般运维任务都是需要在管理的主机上进行一些操作,首先,当管理的主机规模大了之后,遇到主机的故障就不再是一个小概率事件,另外,主机上环境并不都是标准的,可能会遇到各种环境相关的问题,都会导致任务失败。
④ OceanBase 在快速的迭代更新,存在很多版本,这些版本之间也会存在差异,需要考虑各版本的兼容性问题。
⑤ 用户可能会使用不同操作系统的主机,运维的方式存在差异,需要考虑跨平台能力。