OceanBase 数据库的 zone 内副本均衡是一个两级均衡策略,其基本思路是:
第一优先级:以个数为单位将副本平铺到 zone 内的多个 server。
第二优先级:在保证个数平铺的基础之上通过迁移和交换副本的方式,调整各 server 的磁盘使用量,达到各磁盘的水位(百分比)均衡效果。
如果 zone 内多个 server 的磁盘容量差别较大,在保证分区个数均衡的情况下很难达到磁盘水位均衡。在这种情况下,可以通过配置项 _partition_balance_strategy 来控制具体使用怎样的均衡策略。
配置项 _partition_balance_strategy 的取值如下:
- auto:表示分片(历史库分库分表表名)和 partiton 两个均衡优先级均开启,先执行 partition 个数均衡,并在个数均衡的基础上做磁盘均衡调整。
- standard:表示不开启按分片均衡的策略,在个数均衡的基础上做磁盘均衡调整。
- disk_utilization_only:表示关闭第一优先级个数均衡,仅使用第二优先级磁盘水位的均衡策略。
如果设置 _partition_balance_strategy=disk_utilization_only,zone 内两台 server 的磁盘容量分别是 80TB 和 130TB,那么在平均单机数据量是 20/50/80TB 的时候,这两种机型上的数据量分别是多少?
- 平均数据量 20T 时:15.2T(80T server),24.8T(130T server),平均水位约为 19%。
- 平均数据量 50T 时:38.1T(80T server),61.9T(130T server),平均水位约为 47.6%。
- 平均数据量 80T 时:60.1T(80T server),89.9T(130T server),平均水位约为 76.2%。
在实际计算中,当某 server 的磁盘水位与平均水位差值超过一个 tolerance 时,均衡动作才会发起,均衡结果使得各 server 的磁盘水位在 average ± tolerance 之间(average 和 tolerance 都是百分比)。
适用版本
OceanBase 数据库 V4.0 以前的版本。