大规模数据环境垂直扩容,分区rebalance时,有资源自适应调节机制么,是否可避免过度占用系统资源

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】OB
【 使用版本 】v4.4.2-ce
【问题描述】大规模数据垂直扩容,分区rebalance时,有资源自适应调节机制么,是否可避免过度占用系统资源。

  1. 想确认rebalance期间是否有资源自适应调节机制,是否可避免过度占用系统资源?
  2. 如果有自适应,占用的规格比例是什么?
  3. 能否显示设置rebalance期间的迁移速率,或者资源规格,进一步降低影响?
  4. 是否有大数据rebalance的影响测试?

【复现路径】
【附件及日志】

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

3 个赞

@论坛小助手

1 个赞

资源自适应调节机制与分区rebalance

根据文档库中的信息,OceanBase 确实提供了资源自适应调节机制来避免在分区rebalance期间过度占用系统资源。具体来说:

  • enable_rebalance 配置项 作为负载均衡的总开关,用于控制资源单元的均衡。当设置为 true 时,可以进行负载均衡操作,同时通过一些配置项来控制rebalance的行为和资源使用情况。

  • server_balance_cpu_mem_tolerance_percent 配置项 用于触发资源单元均衡的阈值。当某些节点的资源单元负载与平均负载的差值超过该配置项设置的值时,开始调度均衡,直到所有节点的资源单元的负载与平均负载的差值都小于这个值。

资源单元的均衡

设置rebalance期间的迁移速率或资源规格

  • 自适应调节机制:OceanBase 的rebalance过程会根据当前系统的负载情况自动调整资源使用,以避免过度占用系统资源。但具体的资源使用比例和调节策略是基于系统内部算法动态调整的,并没有明确的文档说明具体的数值比例。

  • 迁移速率:目前 OceanBase 并没有直接提供设置rebalance期间迁移速率的配置项。但是,可以通过调整系统负载和资源使用情况间接影响rebalance的速度。例如,通过调整 server_balance_cpu_mem_tolerance_percent 配置项,可以控制rebalance的触发条件和速度。

  • 资源规格:如果需要进一步降低rebalance对系统的影响,可以通过调整租户的资源配置(如CPU、内存等)来限制rebalance过程中使用的资源。例如,可以修改资源池的资源配置,将 MAX_CPUMEMORY_SIZE 等参数适当调小。

    obclient> ALTER RESOURCE UNIT uc1 MAX_CPU 6, MEMORY_SIZE '36G';
    

    租户资源垂直扩缩容 → 修改资源配置

大数据rebalance的影响测试

  • 影响测试:OceanBase 官方并没有提供专门针对大数据rebalance影响的测试报告。但您可以根据实际生产环境的数据量和系统负载情况,自行进行测试。建议在测试环境中模拟大规模数据的垂直扩容和分区rebalance,观察系统性能指标(如CPU使用率、内存使用率、I/O吞吐量等),以评估rebalance对系统的影响。

综上所述,OceanBase 提供了资源自适应调节机制来避免在分区rebalance期间过度占用系统资源。虽然没有直接设置rebalance期间迁移速率的配置项,但可以通过调整其他相关配置项来间接控制rebalance的速度和资源使用情况。对于大数据rebalance的影响测试,建议在测试环境中进行详细评估。

检索到的文档如下:

  1. enable_rebalance
  2. 节点数据盘空间满
  3. 数据负载均衡概述
  4. 租户资源垂直扩缩容
  5. 设置并行执行参数
  6. 集群级别的扩容和缩容
  7. auto_split_tablet_size
  8. 概述
  9. 资源单元的均衡
1 个赞

6666

资源平衡是由RootServic来负责吧

1 个赞

在 OceanBase v4.4.2-ce(社区版)中,当进行垂直扩容(如调大租户的 Unit Config)触发分区重平衡(Rebalance)及副本迁移时,系统具备完善的自适应调节机制与资源隔离策略,能够有效避免迁移过度占用系统资源而影响前台业务。

@淇铭 没有看到有迁移相关的测试,用AI分析了一下源码还有相关手段,辛苦看下是否准确?

1. 系统自适应了什么

资源维度 怎么做的 靠不靠谱
网络带宽 服务器启动时自动检测网卡速率,迁移流量上限 = 网卡速率 × sys_bkgd_net_percentage(默认 60%)。超出排队等待。业务请求走不同的 RPC 通道,不经过此限速。 :white_check_mark: 靠谱
磁盘空间 迁入数据前检查目标端磁盘空间,不足则拒绝迁入,返回 OB_SERVER_OUTOF_DISK_SPACE :white_check_mark: 靠谱
内存 MemStore 内存使用率超过 writing_throttling_trigger_percentage(60%)时,系统限制业务写入速度(非迁移本身)。 :warning: 间接
磁盘 IO 无自适应。 迁移的 SSTable 读写、日志持久化与业务共用磁盘带宽,系统不做限速。 :x:
CPU OceanBase 有 CPU 负载剥离机制,但仅对 Compaction 生效,明确排除迁移/Transfer。触发前提:租户 ≥ 8C 且物理 CPU 利用率 ≥ 80%。 :x:

一句话:网络和磁盘空间有自动保护,CPU 和磁盘 IO 没有。

2. 对业务有什么影响

服务器状态 影响 表现
资源充裕 :green_circle: 迁移全速,业务正常
资源紧张(CPU 40~80%,IO 有排队) :yellow_circle: 轻微 迁移与业务争抢 CPU/IO,查询延迟可能上升。网络有令牌桶兜底不受影响
资源饱和(CPU>80%,IO 饱和,内存>80%) :red_circle: 明显 迁移不自动降速,持续争抢 CPU 和磁盘 IO。MemStore 超 60% 触发业务写入限流。磁盘满时拒绝迁入

3. 谁的限制生效?

扩容/自动均衡时,限制用谁的?

限制维度 作用级别 用谁的 说明
网络带宽 集群级 集群统一值 sys_bkgd_net_percentageOB_CLUSTER_PARAMETER)全集群一个值,所有租户的迁移流量共享同一管道
线程并发 租户级 扩容目标租户自己的 ha_high_thread_scoreOB_TENANT_PARAMETER)每个租户独立。给租户 A 扩节点,用的是租户 A 自己配的值
磁盘 IO 租户级 扩容目标租户自己的 迁移 IO 归入租户自身的 USER_RESOURCE_OTHER_GROUP_ID(group=0),受租户 Unit 规格中 IOPS/带宽配额约束
均衡开关 租户级 扩容目标租户自己的 enable_rebalance 各租户独立开关。关闭租户 A 的均衡不影响租户 B

关键sys_bkgd_net_percentage 是集群统一限速(不分租户),ha_*_thread_scoreenable_rebalance 是各租户各自的。扩容后自动均衡用的是目标租户自身的配置,和系统租户无关。

4. 按场景调参

场景 A:资源充裕

不调。 默认配置即可。

场景 B:资源有点紧张

-- 以下在目标租户下执行:
ALTER SYSTEM SET ha_high_thread_score = 4;           -- 并发 8 → 4(租户级)
ALTER SYSTEM SET ha_mid_thread_score = 2;            -- 并发 5 → 2(租户级)
ALTER SYSTEM SET partition_balance_schedule_interval = '6h';  -- 2h → 6h(租户级)

-- 以下在 sys 租户下执行(集群级参数):
ALTER SYSTEM SET sys_bkgd_net_percentage = 30;      -- 带宽 60% → 30%(影响所有租户)

场景 C:资源饱和,必须保护业务

-- 目标租户下执行:
ALTER SYSTEM SET ha_high_thread_score = 1;           -- 租户级,仅影响本租户
ALTER SYSTEM SET ha_mid_thread_score = 1;
ALTER SYSTEM SET replica_parallel_migration_mode = 'off';
ALTER SYSTEM SET partition_balance_schedule_interval = '24h';

-- sys 租户下执行(集群级):
ALTER SYSTEM SET sys_bkgd_net_percentage = 10;       -- 影响所有租户的后台带宽

-- 直接暂停(目标租户下执行):
ALTER SYSTEM SET enable_rebalance = false;

-- 取消已在执行的任务:
ALTER SYSTEM REMOVE BALANCE TASK;

-- 高峰后恢复:
ALTER SYSTEM SET enable_rebalance = true;

场景 D:只控一个维度

关心什么 调哪个 作用域
网络(所有租户) ALTER SYSTEM SET sys_bkgd_net_percentage = 20; 集群
网络(单租户无法单独限) 无独立参数。网络是集群统一管道
CPU(单租户) ALTER SYSTEM SET ha_high_thread_score = 2; 租户
磁盘 IO(单租户) ALTER SYSTEM SET ha_high_thread_score = 2;(降低并发 = 减少 IO 争抢) 租户
拉长周期(单租户) ALTER SYSTEM SET partition_balance_schedule_interval = '12h'; 租户
只关分区均衡(单租户) ALTER SYSTEM SET __balance_controller = '{"ENABLE_PARTITION_BALANCE": false}'; 租户

5. 参数速查

控制迁移速率

参数 默认 作用域 方向 效果
sys_bkgd_net_percentage 60 集群 迁移网络带宽降低(所有租户共享
ha_high_thread_score 0→8 租户 迁移并发降低,CPU/IO 占用同步下降。0=使用内置默认 8
ha_mid_thread_score 0→5 租户 中优先级迁移并发降低。0=使用内置默认 5
replica_parallel_migration_mode auto 租户 off LS 串行迁移,消除瞬时峰值
disk_io_thread_count 8 集群 磁盘 IO 线程数减少(:warning: 影响所有 IO,非仅迁移)

控制触发频率

参数 默认 作用域 方向 效果
enable_rebalance True 租户 停止生成新均衡任务(仅本租户)
partition_balance_schedule_interval 2h 租户 均衡检查频率降低。0=禁用分区均衡
balancer_idle_time 10s 租户 均衡调度最小空闲拉长
balancer_task_timeout 20m 集群 均衡任务超时缩短
balancer_tolerance_percentage 10 集群 Unit 均衡容忍度提高,迁移量减少
__balance_controller “” 集群 JSON 按均衡类型精细开关

保护阈值

参数 默认 作用域 方向 效果
writing_throttling_trigger_percentage 60 租户 推迟 MemStore 写入限流触发
data_disk_usage_limit_percentage 90 集群 数据盘安全使用上限
data_disk_write_limit_percentage 0 集群 设定 磁盘超此水位停止写入(0=禁用)

6. 组合开关:enable_rebalance + enable_transfer

enable_rebalance enable_transfer 效果
false 任意 完全停止自动均衡(含 LS 均衡和分区均衡)
true true 完整均衡:LS 分裂/合并 + Transfer 分区迁移(默认)
true false 有限均衡:仅 LS 迁移,不做 Transfer。分区不会在 LS 间移动,均衡效果有限但资源消耗更低

enable_rebalance=false 时也可以手动执行 ALTER SYSTEM TRANSFER PARTITION 迁移单个分区。

7. 常用命令

操作 命令
暂停新均衡 ALTER SYSTEM SET enable_rebalance = false;
取消执行中的均衡 ALTER SYSTEM REMOVE BALANCE TASK;
手动触发均衡 CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(600);
手动迁移单个分区 ALTER SYSTEM TRANSFER PARTITION TABLE_ID=xxx, OBJECT_ID=xxx TO LS 1001;
恢复默认 ALTER SYSTEM SET enable_rebalance = true;

ALTER SYSTEM SET sys_bkgd_net_percentage = 60;
ALTER SYSTEM SET ha_high_thread_score = 0;
ALTER SYSTEM SET ha_mid_thread_score = 0;|
|查看配置|SHOW PARAMETERS LIKE '%balance%';
SHOW PARAMETERS LIKE '%ha_%thread%';
SHOW PARAMETERS LIKE 'sys_bkgd_net_percentage';
SHOW PARAMETERS LIKE '%disk_io%';|

8. 监控均衡状态

-- 当前正在执行的均衡 Job(每个租户同一时间只有一个)
SELECT * FROM CDB_OB_BALANCE_JOBS WHERE tenant_id = xxx;

-- 正在执行的 Transfer 任务
SELECT * FROM CDB_OB_TRANSFER_TASKS WHERE tenant_id = xxx;

-- LS 副本分布(看各节点 LS 数量是否均匀)
SELECT svr_ip, svr_port, COUNT(*) ls_cnt 
FROM CDB_OB_LS_LOCATIONS WHERE tenant_id = xxx 
GROUP BY svr_ip, svr_port;

-- 分区在各 LS 上的分布(看分区数量是否均匀)
SELECT ls_id, COUNT(*) tablet_cnt 
FROM CDB_OB_TABLE_LOCATIONS WHERE tenant_id = xxx 
AND role='LEADER' AND table_type='USER TABLE' 
GROUP BY ls_id;

-- 各 LS 磁盘占用(看磁盘是否均衡,阈值 50G/LS)
SELECT a.svr_ip, b.ls_id, SUM(data_size)/1024/1024/1024 total_gb 
FROM CDB_OB_TABLET_REPLICAS a, CDB_OB_TABLE_LOCATIONS b 
WHERE a.tenant_id=b.tenant_id AND a.tablet_id=b.tablet_id 
AND b.role='LEADER' AND b.table_type='USER TABLE' 
AND a.tenant_id=xxx GROUP BY svr_ip, ls_id;

均衡策略优先级:LS 均衡 > 分区属性对齐 > 分区数量均衡 > 分区磁盘均衡。partition_balance_schedule_interval 调小可以加快对齐(如临时调到 10m),对齐后恢复默认。

9. 记住

  1. 网络和磁盘空间有自动保护,不用担心迁移打满带宽或撑爆磁盘。
  2. CPU 和磁盘 IO 没有自动保护,负载偏高时迁移不会自己减速,必须手动降并发或暂停均衡。
  3. 网络限速是集群级sys_bkgd_net_percentage 影响所有租户的后台流量,调它要谨慎。单租户无法单独限制自己的迁移带宽。
  4. 线程和均衡开关是租户级ha_*_thread_scoreenable_rebalance 各租户独立,在目标租户下执行即可。扩容后自动均衡用的是目标租户自己的配置。
  5. 所有调整不丢数据,最坏情况是迁移变慢、均衡耗时变长。

看着分析的没有问题