OceanBase 社区资深总监封仲淹在9月3日参加 OpenInfra 亚洲峰会中,分享了OceanBase与OpenStack的联合解决方案。本文将介绍这一联合方案的技术亮点及其为用户带来的独特价值。
OpenStack长期以来一直是云计算领域的先行者,通过提供强大的开源平台,助力云基础设施的构建与管理。其模块化架构设计,赋予了厂商在公有云和私有云环境中高效管理网络资源、计算及存储的能力。OpenStack的灵活性及其广泛的社区支持,使其成为众多企业部署可扩展云基础设施时的首选方案。
众所周知,数据库对任何软件系统都至关重要,对于 OpenStack,通常使用 MySQL 提供数据库服务,可以在大部分场景下稳定可靠的运行。然而,随着业务增长到一定规模,为了满足性能需求,通常需要额外的方案,例如数据分片。此外,由于 OpenStack 作为云基础设施,确保其高可用至关重要。基于 MySQL 实现高可用方案通常会涉及专业的配置和额外的工具,如 Galera 集群,这可能会引入额外的复杂性和运维负担,从而影响 OpenStack 整体效率和可靠性。
OceanBase 是由蚂蚁集团开发的分布式关系型数据库,旨在为高度分布式环境中的现代大规模应用提供云原生高性能数据库解决方案。它提供了原生的高可用和可扩展特性,无需依赖外部工具或复杂的配置。OceanBase 在 TPC-C 和 TPC-H 两项基准测试中均打破了世界纪录,展示了其在处理复杂事务和分析工作负载方面的卓越性能。除了技术成就之外,OceanBase 的能力也在实际场景中得到验证,已经为超过 1,000+ 家各行各业客户提供数据库服务,充分证明了 OceanBase 在可靠性、可扩展性和支持关键任务应用的能力。其云原生架构也确保了可以与 OpenStack 等下一代云平台的无缝集成,使其成为一个简化、弹性、可扩展且高性能的数据库解决方案。
OceanBase 的分布式特性恰好满足了 OpenStack 对数据库系统可用性和扩展性的需求,是为 OpenStack 提供数据库服务的理想选择。使用 OceanBase,厂商不仅能够减轻数据库运维负担,也能提高整个 OpenStack 平台的性能和稳定性。随着云原生技术成为现代 IT 运维管理的趋势,将 OpenStack 和 OceanBase 部署在 Kubernetes 上也代表着构建新一代云基础设施的形态。
1. 如何使用 OceanBase 为 OpenStack 提供数据库服务
OpenStack 架构
首先,我们简要介绍一下 OpenStack 的架构。OpenStack 由多个互联的组件组成,每个组件负责云基础设施管理的不同方面,如计算、存储和网络。这些组件中的每一个都有自己的数据库来存储状态数据、配置和元数据。这些数据的完整性和处理性能对 OpenStack 生态系统的整体功能和可靠性至关重要。

OceanBase 架构
OceanBase 专为解决大规模分布式系统中的高可用性和可扩展性挑战而设计。一个典型的 OceanBase 集群跨越三个可用区(zone),每个可用区包含多个存储数据副本的节点。OceanBase 使用 Paxos 共识协议来维持这些副本之间的数据一致性,确保数据在返回提交成功之前,已经成功同步到多数节点上,从而提供强一致性和容错能力。
此外,OceanBase 引入了多租户架构,实现数据隔离和资源高效管理。在 OceanBase 中,租户可以视为虚拟 MySQL 实例。租户中的数据通常是分区的,这些分区的 leader 可以分布在不同的服务器上。可以使 OceanBase 能够充分利用所有可用服务器的处理能力,从而提升整体系统性能。

为了高效管理和路由 OceanBase 集群中的请求,我们引入了 OBProxy。OBProxy 是一个轻量级的无状态的代理服务器,可以将请求路由到集群中最合适的 observer 节点来处理。它会先解析 SQL 请求,将其路由到相关表分区的 leader 节点,可以确保数据的强一致性。由于 OBProxy 本身是无状态的,可以通过在负载均衡服务后面部署多个实例轻松实现扩展和高可用。
上述图片展示了 OceanBase 集群和通过负载均衡服务提供服务的 OBProxy 的简单示意图,在应用的视角可以将所有这些组件整体视为提供数据库服务的统一组件。
OceanBase 兼容 MySQL 协议,无需修改 OpenStack 代码即可使用 OceanBase。使用 OceanBase 作为数据库服务的架构如下图所示:

基于 OceanBase 部署 OpenStack:
要使用 OceanBase 提供数据库服务,只需要配置 OpenStack 各个组件的数据库服务地址为 OceanBase。例如,keystone 组件需要覆盖的配置如下:
endpoints:
oslo_db:
auth:
admin:
username: root
password: password
keystone:
username: keystone
password: password
hosts:
default: svc-openstack
path: /keystone
scheme: mysql+pymysql
port:
mysql:
default: 2883
其他组件,一般情况只需要对应的更新 oslo_db 配置。对于 Nova,还需要替换 oslo_db、oslo_db_api 和 oslo_db_cell0 的相关配置。详细说明,请参阅 OpenStack 部署文档。
部署 OceanBase:
通过 ob-operator 在 Kubernetes 中部署 OceanBase 非常简单直接。只需要创建以下资源:
· OceanBase 集群: 定义一个集群,包含三个 obzone,每个 obzone 至少一个 observer。
· OceanBase 租户: 定义一个租户,具有三个副本分布在三个 obzone 上。
· ObProxy 部署: 部署至少两个副本的 ObProxy 和一个服务来路由请求。
详细配置可以在查看这里。
2. 高可用特性 (HA)
OpenStack 使用 OceanBase 作为数据库服务,随即即可获得高可用(HA)能力。OceanBase 依靠分布式架构提供原生的高可用能力,极大程度减少了操作复杂性,提高了可靠性。高可用特性的实现基于 Paxos 共识协议,是一种经过验证的数据一致性确保方法。Paxos 需要节点之间的多数票来达成任何数据更改的共识,这确保了即使某些节点失败,系统仍然保持一致和运行。例如,如果 OceanBase 集群中的一个节点离线,Paxos 确保剩余节点可以继续处理事务而不会丢失数据。这使 OceanBase 能够容忍硬件故障、网络分区和其他潜在干扰。OceanBase 能够在发生故障时自动切换 leader,OBProxy 可以检测到这种变化并无缝地将请求路由到新的 leader。这个过程完全自动化,无需手动干预,可以确保在 OceanBase 上运行的应用程序无中断地继续运行。

ob-operator 在 OceanBase 的故障恢复过程中启动关键的作用,使 OceanBase 的高可用能力更近一步,不仅能在故障时持续提供服务,更能实现自动故障恢复。ob-operator 为 observer 维护固定的 IP 地址,确保在 Pod 失败时能够快速的使用相同的 IP 拉起新的 Pod,能够最大限度的减少停机时间,在存储数据完整的情况下,新的 Pod 能够直接挂在现有的存储,在分钟级时间即可恢复。即使在多数派的 Pod 发生故障时,只要数据仍然是可以访问的,OceanBase 仍然可以恢复服务。

对于 OpenStack 而言,使用 OceanBase 的好处显而易见,OceanBase 能够自动管理节点故障并以最小干预进行恢复,使 OpenStack 无需繁琐的配置即可确保 OpenStack 基础设施安全可靠,为用户提供不间断的云服务。
有关 OceanBase 其他高可用特性的详细介绍,包括备份、恢复和备用租户的详细说明,请参阅 高可用文档。
3. 可扩展性和性能
可扩展性是 OceanBase 另一个核心优势,可以增加 OpenStack 的灵活性。与传统数据库不同,在处理高负载时,OceanBase 的分布式架构能够通过水平扩展轻松应对,不会成为系统的瓶颈。只需要添加更多节点到集群中,OceanBase 即可无感的扩展其处理能力和存储容量。
OceanBase 通过以下几种策略来实现动态扩展,OceanBase 会对数据分区存储,可以有效防止单一节点成为瓶颈,当新节点加入集群时,OceanBase 会自动的做负载均衡,能够自动迁移数据达到平衡的状态,使整个系统的性能得到最大程度的发挥。
OceanBase 支持实时动态调整租户的 CPU 和内存以及存储资源,能够在负载频繁变化时快速响应,这种特性在云环境中至关重要,管理员可以随时快速的根据负载调整资源。
扩容 OceanBase 集群非常容易,举个例子来说,一个典型的 3 个 zone 的集群,每个 zone 有一个 observer,当负载增长时,管理员可以扩容每个 zone 的 observer 数量到 2 个,只需要简单的修改集群资源 spec 定义中每个 zone 的 replica 即可实现。

扩容 observer 之后,进一步的将租户的 unitNum 修改成 2,即可获得双倍的处理能力。

基于 OceanBase 的可扩展性,OpenStack 可以轻松支持大规模应用和快速增长的业务需求,也证明 OceanBase 是作为 OpenStack 数据库服务的理想解决方案。
有关 OceanBase 可扩展性的详细介绍,包括租户管理和动态资源调整等内容,请参阅 租户管理文档。
4. 总结
OceanBase 为 OpenStack 提供了极致的高可用性和可扩展性数据库服务。其云原生架构、原生 HA 机制和方便的可扩展性与现代云基础设施完美契合。通过将 OceanBase 作为数据库层集成到 OpenStack 中,来构建下一代解决方案,可以轻松应对当今以云为中心的场景中大规模、灵活性和稳定性的挑战,厂商可以显著提高其云环境的弹性和性能,降低运维复杂性,同时提高服务可靠性。
如上所示,在 OpenStack 环境中部署 OceanBase 非常简单,在高可用和可扩展性方面带来的好处是显而易见的。 随着云原生技术的不断发展,OpenStack 和 Kubernetes 上的 OceanBase 的结合也代表了一种具有前瞻性的构建强大、可扩展且有弹性的云基础设施的方法。对于希望未来的 IT 运营企业来说,OceanBase 提供了一种强大且易于实施的解决方案,增强了 OpenStack 的关键特性,使其成为云计算领域重要的力量。