为什么从4.x会设计出来一个meta租户,基于怎么样的考虑和实现?

【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】4.x
【问题描述】为什么从4.x会设计出来一个meta租户,基于怎么样的考虑和实现?
【复现路径】无
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

3 个赞

根据文档库中的信息,在 OceanBase 数据库 V4.0 开始引入了 Meta 租户,主要是为了解决之前版本中存在的问题并提升系统的稳定性和资源管理的精细度。具体考虑和实现如下:

  • 存在的问题:在 4.x 以前的版本中,只有系统租户和用户租户,存在本该属于用户租户的数据存放到了系统租户的问题,导致系统租户比较臃肿,引发系统租户资源占用过多、资源统计粒度粗、资源隔离不足等问题,对集群稳定性造成了较大挑战。(依据:片段标题: 租户类型)

  • 设计考虑

    • 资源隔离:通过引入 Meta 租户来存储和管理用户租户的私有数据,如配置项、位置信息、副本信息等,实现了更细粒度的资源管理和更好的资源隔离。
    • 系统稳定性:减轻了系统租户的负担,避免了由于用户数据与系统数据混杂而导致的问题,提高了整个集群的稳定性和性能。
  • 实现方式:每创建一个用户租户会创建一个对应的 Meta 租户,其生命周期与用户租户保持一致。Meta 租户用于存储和管理用户租户的集群私有数据,这部分数据不需要跨库物理同步以及物理备份恢复。Meta 租户不可登录,普通用户只能通过系统租户的视图查询 Meta 租户下的数据。Meta 租户没有独立的 Unit,创建租户时默认为 Meta 租户预留资源,各项资源从用户租户资源中扣除。(依据:片段标题: OceanBase 术语 → M → Meta 租户(Meta Tenant))

综上所述,OceanBase 数据库 V4.0 引入 Meta 租户是为了更好地解决资源隔离和系统稳定性的问题,并且通过特定的设计确保了这一目标的实现。

具体信息可参考以下文档:

  1. 租户类型
  2. OceanBase 术语
  3. 租户介绍
  4. 登录 OceanBase 租户
  5. OceanBase 数据库
  6. CREATE TENANT
4 个赞

那用户私用数据,不应该存放在用户租户中吗?而且Meta租户不被同步和备份恢复,也就是说租户恢复之后,对应的meta,也就是用户租户的私有信息就丢失了。

1 个赞

您的问题存在一些误解,实际上据我所知,用户私有数据确实存放在用户租户中,而 Meta 租户并不存储用户的业务数据。Meta 租户主要用于存储与管理用户租户的集群私有元数据,这些元数据是用于支持用户租户正常运行所需的信息,并不是用户的业务数据。

关于 Meta 租户不进行跨库物理同步以及物理备份恢复的问题,这里需要澄清的是:

  1. Meta 租户的数据性质

    • Meta 租户存储的是用户租户的集群私有数据,例如配置项、位置信息、副本信息、日志流状态、备份恢复相关信息、合并信息等。这些数据是为了支持用户租户的正常运行而存在的,并不是用户的业务数据。
    • 用户的业务数据仍然保存在用户租户中,并且会按照正常的备份和恢复流程进行处理。
  2. Meta 租户的同步和备份

    • 尽管 Meta 租户的数据不会进行跨库物理同步及物理备份恢复,但这并不意味着这些数据会在租户恢复后丢失。Meta 租户的数据是与用户租户紧密关联的,在用户租户创建时自动生成,并且其生命周期与用户租户保持一致。
    • 当用户租户进行备份或恢复操作时,相关的 Meta 租户也会随之进行相应的调整,以确保用户租户能够正确地恢复到之前的状态。因此,即使 Meta 租户本身没有独立的备份机制,它所依赖的用户租户的备份和恢复过程已经包含了对 Meta 租户数据的保护。

综上所述,Meta 租户的存在并不会影响用户的业务数据安全性和完整性。相反,通过将元数据从系统租户中分离出来,可以更好地保证系统的稳定性和资源的有效利用。如果您还有其他疑问或者需要进一步的帮助,请随时告知。

具体信息可参考以下文档:

  1. 租户介绍
  2. OceanBase 术语
  3. 登录 OceanBase 租户
  4. 租户内部内存管理
  5. 删除主备租户
  6. 其他问题
  7. 设置日志恢复终点
  8. 备份前准备
  9. BACKUP KEY

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

4 个赞

抱歉,这里我看错了。。以为是meta租户包含租户非私有数据

个人感觉还是为了让日志流聚合所设计,不过租户非私有数据有点让人困惑
@论坛小助手 租户非私有数据具体指的是什么?

在下面又找到了相关信息,用户创建的表数据非私有数据意思是存在meta中的?

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002012847

2 个赞

根据提供的文档信息,关于“租户非私有数据”的概念可以进一步澄清。以下是详细的解释:

租户非私有数据的定义

租户非私有数据指的是用户租户中存储的、需要在主备集群之间同步及物理备份的数据。这部分数据主要包括用户的业务数据,例如:

  • 用户创建的表
  • 部分系统表(如事务数据、schema 数据等)

这些数据是用户业务的核心部分,因此需要确保其高可用性和持久性,支持跨集群物理同步和物理备份恢复。

与 Meta 租户的区别

相比之下,Meta 租户存储的是用户租户的租户私有数据,这部分数据主要用于支撑用户租户的正常运行,包括但不限于:

  • 配置项
  • 位置信息
  • 副本信息
  • 日志流状态
  • 备份恢复相关信息
  • 合并信息

Meta 租户的数据不需要跨库物理同步以及物理备份恢复,因为这些数据是每个租户独立维护的,并且在租户恢复时会自动重新生成或调整。

具体对比

对比项 系统租户 用户租户 Meta 租户
租户 ID (TENANT_ID) 1 最小值:1002 最小值:1001,与用户租户 ID 关系:Meta 租户 ID + 1 = 用户租户 ID
租户类型 (TENANT_TYPE) SYS USER META
租户名规范 SYS 大小写英文字母、数字和下划线 META${user_tenant_id}
数据属性 集群私有数据 租户非私有数据 租户私有数据
扩展性 数据不可水平扩展,只有一个日志流 具备水平扩展能力,支持动态扩容和缩容 数据不可水平扩展,只有一个日志流

示例说明

假设我们有一个用户租户 mysql001,其租户 ID 为 1002,对应的 Meta 租户为 META$1002,租户 ID 为 1001。在这个场景中:

  • 用户租户 mysql001 存储的是用户的业务数据,如用户创建的表、事务数据等,这些数据需要进行跨集群物理同步和物理备份恢复。
  • Meta 租户 META$1002 存储的是支撑 mysql001 运行的元数据,如配置项、副本信息等,这些数据不需要跨集群物理同步和物理备份恢复。

总结

租户非私有数据是指用户租户中存储的、需要进行跨集群物理同步和物理备份恢复的业务数据。而 Meta 租户存储的是用户租户的私有元数据,用于支撑用户租户的正常运行,这部分数据不需要进行跨集群物理同步和物理备份恢复。通过这种设计,OceanBase 数据库实现了更细粒度的资源管理和更好的资源隔离,同时保证了系统的稳定性和性能。

如果您还有其他疑问或者需要进一步的帮助,请随时告知。

更多信息请查看:

  1. 租户介绍
  2. OceanBase 术语
  3. 用户和权限概述
  4. 多租户架构概述
  5. 系统视图概述
  6. 产品 FAQ
  7. 物理备库
  8. 快速入门系列教程
4 个赞

您的问题可能存在误解,实际上用户创建的表并不会存储在 Meta 租户中。根据文档中的信息:

用户租户与 Meta 租户的区别

  1. 用户租户

    • 用户租户是用于存储用户的业务数据,包括用户创建的表、事务数据、schema 数据等。
    • 用户租户的数据需要进行跨集群物理同步和物理备份恢复,以确保高可用性和持久性。
  2. Meta 租户

    • Meta 租户主要用于存储和管理用户租户的集群私有元数据,如配置项、位置信息、副本信息、日志流状态、备份恢复相关信息、合并信息等。
    • 这些数据是为了支持用户租户的正常运行而存在的,并不是用户的业务数据。
    • Meta 租户的数据不需要跨库物理同步及物理备份恢复,因为这些数据是每个租户独立维护的,并且在租户恢复时会自动重新生成或调整。

具体说明

  • 用户创建的表:用户创建的表及其相关数据(如事务数据、索引等)都存储在用户租户中,而不是 Meta 租户中。用户租户负责管理这些表的生命周期、查询、更新等操作。

  • Meta 租户的作用:Meta 租户主要负责存储与用户租户相关的元数据,例如:

    • 配置项:用于配置用户租户的行为。
    • 位置信息:记录用户租户的数据分布情况。
    • 副本信息:记录用户租户的数据副本位置。
    • 日志流状态:记录用户租户的日志流信息。
    • 备份恢复相关信息:记录用户租户的备份和恢复状态。
    • 合并信息:记录用户租户的合并操作信息。

文档依据

根据片段标题为“OceanBase 术语 → M → Meta 租户(Meta Tenant)”的文档内容:

Meta 租户用于存储和管理用户租户的集群私有数据,这部分数据不需要跨库物理同步以及物理备份恢复,例如:配置项、位置信息、副本信息、日志流状态、备份恢复相关信息、合并信息等。Meta 租户不可登录,普通用户只能通过系统租户的视图查询 Meta 租户下的数据。Meta 租户没有独立的 Unit,创建租户时默认为 Meta 租户预留资源,各项资源从用户租户资源中扣除。

因此,用户创建的表不会存储在 Meta 租户中,而是存储在用户租户中。Meta 租户仅用于存储与用户租户相关的元数据,以支持用户租户的正常运行。

如果您还有其他疑问或者需要进一步的帮助,请随时告知。

具体信息可参考以下文档:

  1. 租户介绍
  2. OceanBase 术语
  3. 登录 OceanBase 租户
  4. 租户内部内存管理
  5. default_table_store_format
  6. 内存结构
  7. 用户租户介绍
1 个赞

:clap: :clap: :clap: :clap:

1 个赞

Meta租户本质上也是一个租户,有自己独立的schema名字空间,从SQL引擎、事务引擎、存储引擎到日志引擎都不特殊处理和感知Meta租户,与其他租户一样相互隔离。

从数据层面,Meta租户与普通租户一样实现了schema元信息自解释,可以实现服务自举。

从功能层面,Meta租户管理了一组内部表,存储了租户级别的私有数据,包括:配置项、用户租户日志流位置信息、日志流状态信息、日志流副本信息、合并调度和进度信息、备份恢复管理信息、主备租户管理信息等。可以看出,Meta租户下存储的数据都是和集群相关的数据,我们称之为私有数据,这些数据不参与物理备份恢复,不会通过REDO日志方式物理同步和恢复到物理备集群上。

本质上,我们将用户的数据分为两部分进行管理:

私有数据:和集群、Server、副本等相关的数据,不参与跨集群物理同步和物理备份恢复,存放在Meta租户中
非私有数据:用户创建和管理的数据,包括:数据库对象schema、用户表数据、事务数据、日志流管理数据等,有更强的数据保护和可用性要求,支持跨集群物理同步和物理备份恢复,存放在用户租户下

1 个赞

好好学习,天天向上 :+1: :+1: :+1:

1 个赞

天天学一点

1.在4.x之前版本的话,用户租户的数据直接存储在系统租户中,可能是为了减轻系统租户的资源问题,减轻系统租户的负担,粒度更细,方便管理
2.meta租户专用于存储用户租户的 元数据、日志流等数据,避免系统租户的共有数据混淆,数据具有一定隔离性
3.meta租户和用户租户id相差1,也可能便于运维时方便定位

看着小助手 回答的没有问题呀

我才发现自己看错了。。尴尬,还以为文档里面写的是Meta租户包含租户非私有数据 :joy:

点赞