首批通过分布式安全可靠测评,为关键业务系统打造
专有云 OCP 中 add server 在运行 IO 校准阶段报错 -4016 的原因和解决方法
更新时间:2026-06-08 02:41
问题现象
在 OCP 平台上执行 add server 操作时,在 Run io calibration 阶段失败,具体表现为在日志中发现报错,错误代码为 -4016 并且发现 server_id 非常大,大于 4096。

关键信息
错误日志显示大量的 RPC 请求发送给新加入的节点,错误码为
OB_TENANT_NOT_IN_SERVER。隐藏 sys 租户的创建成功时间晚于发送 RPC 的时间。
问题原因
在 OceanBase 数据库 V4.3.5 之前版本指定了 server_id 不能超过 4096 的限制,如果超过就会导致 add server 的时候出现问题。 一次 add_server 就会导致 server_id 被快速推高,主要是因为隐藏的 sys 租户尚未建立完成时尝试将这个机器加入集群。add_server 需要发送 RPC 去到这个要加进集群的机器中来检查这个机器是否为空,但是因为要加入集群的这个机器的隐藏 sys 租户没有建立导致出现 OB_TENANT_NOT_IN_SERVER 错误而不断重试,每次 add_server 都会推高了 server_id,最终超过 4096 限制,导致 add server 操作失败。
问题的风险及影响
add server 操作无法成功完成。
新加入的节点可能因为持续的 RPC 请求重试而导致资源浪费。
适用版本
OceanBase 数据库 V4.2.1 BP7(oceanbase-4.2.1.7-107000112024052920)之前版本。
解决方法
黑屏方式:
修改内部表以适应当前环境。
执行查询语句
select * from __all_server,找到最大的 id(其中 id 为当前除问题机器外最大的 server_id)。直连 sys 租户,然后执行更新语句
update __all_sys_stat set value=xx where name='ob_max_used_server_id';(这里 value 的值就是上面找到的 id)。警告
更新内部表
__all_sys_stat存在风险,请勿自行操作。如果需要修改,请咨询 OceanBase 技术支持。
如果问题机器已经进入了
__all_server表,需要使用alter system delete server将那个问题机器从__all_server表中删除。重新安装并启动机器,等待一段时间再进行 add_server 操作(需要在要加入集群的机器的 OBServer 日志中找到关键字
success to start weak read service就表明隐藏 sys 租户已经建立)。
规避方式
确保在执行 add server 操作前,隐藏的 sys 租户已经成功建立。
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.1 BP7(oceanbase-4.2.1.7-107000112024052920)及之后版本,以利用修复后的功能减少 server_id 被不当推高的风险。
对于完全避免此类问题,建议升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.3.5 GA(oceanbase-4.3.5.0-100000122024123020)版本,该版本不再依赖 server_id 进行操作。