OceanBase 4.x 中租户资源池(UNIT)规划有哪些实践经验?

最近在做 OB 集群的容量规划,想和大家讨论一下 UNIT 数量、内存规格和 CPU 配比的实际经验,尤其是多租户场景下怎么分配比较合理,欢迎分享踩坑经历。

@论坛小助手

租户资源池(UNIT)规划实践经验

在 OceanBase 4.x 中,进行租户资源池(UNIT)的规划是一项重要的任务,尤其是在多租户场景下。以下是一些基于文档片段和最佳实践的经验分享:

1. 明确业务需求与资源需求

  • 在开始规划前,首先需要明确各个租户的业务特性和资源需求。例如,某些租户可能需要更多的 CPU 资源来处理高并发查询,而其他租户则可能更关注内存以支持大数据量的缓存。
  • 根据业务特性,初步确定每个租户的资源需求,包括 CPU、内存、IOPS 等。

2. 创建资源规格(Unit Config)

  • 在 OceanBase 中,资源单元(Unit)是租户使用 CPU 和内存的最小逻辑单元。您可以通过 CREATE RESOURCE UNIT 语句来定义资源规格。

  • 例如,可以创建两个不同规格的 Unit Config:

    obclient [oceanbase]> CREATE RESOURCE UNIT UNIT1 MAX_CPU =3, MIN_CPU =3, MEMORY_SIZE ='6G';
    obclient [oceanbase]> CREATE RESOURCE UNIT UNIT2 MAX_CPU =4, MIN_CPU =4, MEMORY_SIZE ='8G';
    

    参考文档体验多租户特性 → 创建资源规格 Unit Config

3. 合理分配资源池(Resource Pool)

  • 一个 Resource Pool 是由多个 Unit 组成的,用于管理租户的资源分配。在多租户环境下,合理的 Resource Pool 规划可以帮助优化资源利用率。
  • 为每个租户分配合适的 Resource Pool,确保其资源需求得到满足。例如,对于高并发读写操作的租户,可以分配更多 CPU 资源;对于需要大量内存的租户,可以分配更大的内存规格。

4. 考虑资源隔离

  • OceanBase 通过 Unit 来实现租户间的资源隔离,确保不同租户之间的资源不会互相争抢。从设计上,OceanBase 数据库支持租户间 CPU、Memory、IOPS 隔离。

  • 每个 Unit 可以类比于一个 Docker 容器,一个节点上可以创建多个 Unit,但每个节点上的每个租户只能有一个 Unit。

    参考文档租户间的资源隔离

5. 动态调整资源

  • 在实际运行过程中,根据业务负载的变化,可能需要动态调整租户的资源。可以通过修改 Unit Config 来调整租户的资源。

  • 例如,扩容 sys 租户的 CPU 和内存资源:

    ALTER RESOURCE UNIT unit_config_name min_cpu = 2, max_cpu = 2, memory_size = '2G', max_iops = 10000, min_iops = 10000;
    

    注意:当前版本中,仅 CPU 和 Memory 配置生效,其他 I/O 参数暂不生效。

    参考文档SYS 租户/RS 服务问题 → 应急处理方法 → 扩容 sys 租户资源

6. 监控与调优

  • 使用 OCP Express 或其他监控工具来监控租户的资源使用情况。例如,OCP Express 提供了 CPU 消耗比、内存消耗比和数据量前 3 的 OceanBase 租户数据展示。

    参考图片

  • 根据监控数据,及时调整资源分配,确保集群的稳定性和性能。

7. 内存超卖与资源硬限制

8. 总结

  • 在多租户场景下,合理的资源规划和分配非常重要。通过创建合适的 Unit Config、合理分配 Resource Pool、考虑资源隔离、动态调整资源以及监控与调优,可以有效提升集群的性能和稳定性。
  • 请根据具体的业务需求和资源情况进行规划,并定期评估和调整资源分配策略。

希望这些经验对你有所帮助!如果你有更多具体的问题或需要进一步讨论,请随时提问。

更多信息请查看:

  1. 体验多租户特性
  2. SYS 租户/RS 服务问题
  3. 租户的资源管理
  4. CREATE RESOURCE UNIT
  5. 租户间的资源隔离
  6. 产品 FAQ
  7. 集群总览
  8. 在您开始前