首批通过分布式安全可靠测评,为关键业务系统打造
集群添加节点失败,报错 server id maybe invalid 的原因和解决方法
更新时间:2026-06-04 01:56
问题现象
OCP 单 Zone 扩容成多 Zone,在 OCP 添加节点任务,执行到 run io calibration 阶段报错,同时按照 OCP 报错黑屏查询 GV$OB_IOCALIBRATION_STATUS 报错 4016,将这个任务放弃后就可以正常查询。
OCP 白屏界面报错信息:

OBClient 黑屏客户端报错信息:

问题排查过程
在添加机器的 OBServer 节点,通过命令过滤关键词获取日志信息。
grep 'server id maybe invalid' observer.log输出结果如下:
[2024-04-11 09:05:50.750230] ERROR issue_dba_error (ob_log.cpp:1875) [3656029][T1_L5_G0][T1][xxxxx-xxxxx-xxxxx-xxxxx] [lt=6][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4016, file="ob_sql_session_mgr.cpp", line_no=343, info="server id maybe invalid") [2024-04-11 09:05:50.750236] EDIAG [SQL] create_sessid (ob_sql_session_mgr.cpp:343) [3656029][T1_L5_G0][T1][xxxxx-xxxxx-xxxxx-xxxxx] [lt=5][errcode=-4016] server id maybe invalid(ret=-4016, server_id=11374) BACKTRACE:0x126580fd 0x745e522 0x745dfe4 0x745dc72 0x743d1fb 0xe09120e 0xe090f77 0xc5e0528 0xc5e114b 0xd05a84b 0x559831d 0x5533dc3 0x51c0e61 0x51ba63c 0x9ee2cb4 0x12d3b7b3 0x7f0c32f4af1b 0x7f0c32e821c0上述日志信息显示了
server id maybe invalid相关信息和当前的server_id=11374。OCP 白屏界面放弃问题任务,之后在 OBClient 黑屏确认当前 server_id 值。
检查当前集群内其他节点的 server id 值。
obclient> select * from oceanbase.gv$ob_parameters where name like "%server_id%";检查当前集群的
ob_max_used_server_id值。obclient> select * from oceanbase.__all_sys_stat where name ='ob_max_used_server_id';如果当前集群的 ob_max_used_server_id >= 4095 后,新增 server 不可用。
问题原因
每次 add_server 动作均会推高 server_id(每次+1),sql_session 层建立连接时校验 server_id < MAX_SERVER_ID(=4095)。当前 server_id 已推高至 11374,导致 add_server 成功后无法建立连接查询 SQL。从而导致 OCP 添加节点失败。
问题的风险及影响
无法添加新的节点到 OBServer 集群中。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V4.x 版本。
解决方法
确认该集群现存 server 的 server_id 正常后,在 SYS 租户下手动修改内部表。
-- 恢复操作,该集群正常节点最大 server_id=2。
obclient > update oceanbase.__all_sys_stat set value=2 where name='ob_max_used_server_id';
警告
修改内部表存在一定的风险,请勿自行操作。如果需要修改,请联系 OceanBase 技术支持团队。