OceanBase 通过 Root Service 管理各个节点间的负载均衡。不同类型的副本需求的资源各不相同,Root Service 在执行分区管理操作时需要考虑的因素包括每台 OBServer 上的 CPU、磁盘使用量、内存使用量、IOPS 使用情况、避免同一张表格的分区全部落到少数几台 OBServer,等等。让耗内存多的副本和耗内存少的副本位于同一台机器上,让占磁盘空间多的副本和占磁盘空间少的副本位于同一台机器上。经过负载均衡,最终会使得所有机器的各类型资源占用都处于一种比较均衡的状态,充分利用每台机器的所有资源。
负载均衡分机器、unit两个粒度,前者负责机器之间的均衡,选择一些 unit 整体从负载高的机器迁移到负载低的机器上;后者负责两个unit之间的均衡,从负载高的 unit 搬迁副本到负载低的 unit。
类别 | 机器负载均衡 | unit 负载均衡 |
均衡对象 | 机器 | unit |
搬迁内容 | unit | 副本 |
均衡粒度 | 粗 | 细 |
均衡范围 | zone 内均衡 | zone 内均衡 |
一个租户拥有若干个资源池,这些资源池的集合描述了这个租户所能使用的所有资源。一个资源池由具有相同资源规格(Unit Config)的若干个 UNIT(资源单元)组成。每个 UNIT 描述了位于一个 Server 上的一组计算和存储资源,可以视为一个轻量级虚拟机,包括若干 CPU 资源、内存资源、磁盘资源等。一个资源池只能属于一个租户,一个租户在同一个 Server 上最多有一个 UNIT。对于每个 Zone,根据 UNIT 的动态调度,达到均衡的策略。其中:
属于同一个租户的若干个 UNIT,会均匀分散在不同的 Server 上。
属于同一个租户组的若干个 UNIT,会尽量均匀分散在不同的 Server 上。
当一个 Zone 内机器整体磁盘使用率超过一定阈值时,通过交换或迁移 UNIT 降低磁盘水位线。
否则,根据 UNIT 的 CPU 和内存规格,通过交换或迁移 UNIT 降低 CPU 和内存的平均水位线。