首批通过分布式安全可靠测评,为关键业务系统打造
集群替换机器时卡住报错 4624 的原因和解决方法
更新时间:2026-07-02 15:41
问题现象
OceanBase 数据库 3-3-3 集群需要将 zone2 下的 109 节点替换为新的机器。在 zone2 成功添加 50 节点后,delete 109 节点卡住。如下为 oceanabse.__all_server 查询结果,可以看到 109 节点状态为 deleting。

Root Service 日志信息如下,可以看到 required_size 是 1952 GB(2096566894592/1024/1024/1024),报错 [errcode=-4624] no server has enough resource to hold the unit。
rootservice.log:[2024-08-30 11:08:31.029686] INFO [RS] ob_unit_manager.cpp:4608 [1185400][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=3] [dc=0] server total size no bigger than required size(required_size=2096566894592, total_size=1898620911616, unit_stat={unit_id:1001, required_size:2096560603136, partition_cnt:23053}, status.resource_info_={cpu:"1.580000000000000000e+02", mem_in_use:0, mem_total:674867583385, disk_in_use:6291456, disk_total:1898620911616, partition_cnt:0, report_cpu_assigned:"0.000000000000000000e+00", report_cpu_max_assigned:"0.000000000000000000e+00", report_mem_assigned:0, report_mem_max_assigned:0})
rootservice.log:[2024-08-30 11:08:31.029697] WDIAG ob_unit_placement_strategy.cpp:123 [1185400][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=4] [dc=0][errcode=-4624] machine resource 'zone2' is not enough to hold a new unit
rootservice.log:[2024-08-30 11:08:31.029708] WDIAG [RS] ob_unit_placement_strategy.cpp:124 [1185400][0][xxxxx-xxxxx-xxxxx-xxxxx] [lt=5] [dc=0][errcode=-4624] no server has enough resource to hold the unit(ret=-4624, unit_config={unit_config_id:1001, name:"config_REP_ZJCRM_zone2_UxxxCxxxG_sjd", max_cpu:"1.400000000000000000e+02", min_cpu:"1.400000000000000000e+02", max_memory:536870912000, min_memory:536870912000, max_disk_size:536870912000, max_iops:5000, min_iops:128, max_session_num:75}, servers=[])
关键信息
将机器 xx.xx.xx.109(磁盘大小 1768 GB)替换为同等规格的机器 xx.xx.xx.50(磁盘大小 1768 GB)为什么会报磁盘不足? 是因为多版本数据导致汇报到 oceanbase.__all_virtual_meta_table.required_size 偏大。 而通过合并可以消除多版本数据,所以可以手动触发合并后再替换机器。
问题原因
通过 oceanbase.__all_virtual_disk_stat 查询结果,新机器 xx.xx.xx.50 磁盘大小是 1768 GB。
+----------------+-------------------+-------------------+-------------------+--------------+
| svr_ip | total_G | free_G | used_G | used_percent |
+----------------+-------------------+-------------------+-------------------+--------------+
| xx.xx.xx.49 | 1768.246093750000 | 737.769531250000 | 1030.476562500000 | 58.28% |
| xx.xx.xx.109 | 1768.246093750000 | 787.507812500000 | 980.738281250000 | 55.46% |
| xx.xx.xx.35 | 1768.246093750000 | 813.060546875000 | 955.185546875000 | 54.02% |
| xx.xx.xx.50 | 1768.228515625000 | 1768.218750000000 | 0.009765625000 | 0.00% |
| xx.xx.xx.11 | 1768.246093750000 | 753.220703125000 | 1015.025390625000 | 57.40% |
| xx.xx.xx.12 | 1768.246093750000 | 698.248046875000 | 1069.998046875000 | 60.51% |
| xx.xx.xx.28 | 1768.246093750000 | 684.115234375000 | 1084.130859375000 | 61.31% |
| xx.xx.xx.23 | 1768.246093750000 | 772.750000000000 | 995.496093750000 | 56.30% |
| xx.xx.xx.22 | 1768.246093750000 | 688.146484375000 | 1080.099609375000 | 61.08% |
| xx.xx.xx.16 | 1768.246093750000 | 782.113281250000 | 986.132812500000 | 55.77% |
+----------------+-------------------+-------------------+-------------------+--------------+
查询 oceanbase.__all_virtual_meta_table 表统计的 unit 上分区 required_size 总和确实为 1958 GB,比此节点的磁盘 1768 GB 还大,所以报错。

问题的风险及影响
通过 oceanbase.__all_virtual_meta_table.required_size 查询显示的磁盘空间比实际空间偏大。
适用版本
OceanBase 数据库 V3.x 版本。
解决方法
手动触发合并,消除多版本数据,然后再替换机器。
规避方式
替换机器前通过 oceanbase.__all_virtual_meta_table.required_size 检查新机器所需磁盘空间大小,如有需要可以做次合并。