暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase数据库空UNIT迁移卡住问题处理

IT那活儿 2025-08-15
162
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!


问题描述

问题发生当天,检查发现某台OB主机异常,OCP上显示该主机上OBServer已不可提供服务。
协调主机侧核查,得到该OB主机异常,只能重装的结论。经过客户同意,目前需要先将该OB主机踢出OB集群,再交由主机侧重装。
环境信息:
  • OB环境:准生产环境
  • OB版本:3.2.4.5
  • OB租户类型:OB Oracle租户
  • OB架构:2-2-2【即三zone,每个zone两个OBServer】


问题排查

2.1 OCP检查OB集群状态
检查除了异常OB主机,其他OBServer状态正常,且资源充足,满足租户缩容条件。
2.2 OB集群缩容
在资源充足的情况下,将OB集群中租户unit个数从2缩到1。
2.3 Unit个数缩容,涉及unit副本迁移
由于OB集群开启了自动均衡,正常情况下每个unit都会承载基本相同数量的副本,即每个unit都会有数据,故减少unit个数时,需要先将unit副本迁移走。
2.4 异常OBServer上unit迁移卡住
检查异常OBServer上unit副本为0,按预想空unit迁移会很快结束,但实际unit迁移卡住。后台查询__all_rootservice_job视图显示SHRINK_RESOURCE_POOL_UNIT_NUM缩容任务状态一直处于INPROGRESS运行中,且租户状态一直显示运维中,任务长时间未终止。


问题原因及处理方式

3.1 问题原因
空unit产生主要怀疑是由于该OBServer异常导致unit中副本自动迁移走,但unit本身未清理掉,导致残留了个空unit。
空unit一般均为特殊情况,OceanBase数据库内部迁移任务在完成后会有检查动作,但是空unit不会记录到tenant_zone_list中,会被过滤掉,导致检查一直不通过从而卡住。
3.2 解决方式
处理方式一:
1)租户状态异常,一直显示运维中,需要先将该zone上unit个数调整回2
查询unit视图,确认异常unit所属resource_pool:
select * from gv$unit where tenant_id = <tenant_id> and unit_id = <unit_id>;
调整回对应resource_pool资源池Unit个数为2:
alter resource pool <resource_pool> unit_num = 2;
2)后台删除空unit
注意:删除时需要同步修改资源池unit个数,不然无法执行。
alter resource pool <resource_pool> unit_num=1 delete unit = (<unit_id>);
3)检查unit已删除,且租户恢复正常,unit个数也已缩容
处理方式二:
1)通过修改locality方式,给该空unit添加副本,让这个空unit有数据
alter tenant <tenant_name> set locality="xxx";
2)再执行unit副本迁移并缩容

END


本文作者:冯俊鸿(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论