本文介绍在 OceanBase 集群执行合并报错 4217的原因以及解决方法。
适用版本
OceanBase 数据库 V1.4.7x 版本
问题现象
在 OceanBase 集群执行合并报错,错误信息如下所示。
obclient> ALTER SYSTEM MAJOR FREEZE; ERROR 4217 (HY000) : Major freeze not allowed now
可能原因
检查
observer.log
日志,错误信息如下。
WARN [RS] check_freeze_with_new_round (ob_root_major_freeze.cpp:940) [58321] [trace_id] cannot major freeze, some partitions in inalive server(ret=-4217, inalive_server_array=[“IP:port”])
对于 OceanBase 数据库 V1.4.7x 版本,执行合并前,如果集群中存在状态为
INACTIVE
或
DELETING
的节点,并且该节点上存在分区,则无法进行合并。
解决方式
对于 OceanBase 数据库 V1.4.7x ,该问题可通过以下两种方式解决。
方法一:通过 OCP 替换或删除状态为
INACTIVE
或
DELETING
的节点
以下操作以 OCP V2.4.x 为例进行说明。不同 OCP 版本的操作界面可能不同,请以实际界面为准;具体的操作方法,请参见对应版本的《OCP 用户指南》。
- 登录 OCP。
- 在左侧导航栏中选择 集群,在 **集群列表 **中单击要执行合并的集群名称,进入 **集群概览 **页面。
- 在 OBServer 列表中,找到非 运行中 状态的节点,在对应的 **操作 **列单击 **删除 **或 替换。
- 登录 OceanBase 数据库执行合并。
obclient> ALTER SYSTEM MAJOR FREEZE;
方法二:忽略故障 OBServer 进行合并
下面以 OCP V2.4.x 为例介绍忽略故障 OBServer 进行合并的方法。不同 OCP 版本的操作界面可能不同,请以实际界面为准;具体的操作方法,请参见对应版本的《OCP 用户指南》。
-
登录 OCP。
-
在左侧导航栏中选择 集群,在 **集群列表 **中单击要执行合并的集群名称,进入 **集群概览 **页面。
-
记录状态不是 运行中 节点的 IP 地址与端口号。
-
如果节点处于
DELETING
状态,则可能是由于迁移资源单元需要的时间比较长,而此时需要合并(长时间不合并将导致内存满的问题)。
-
执行以下 SQL 语句忽略指定的 OBServer 进行合并。
obclient> ALTER SYSTEM major freeze ignore “ip:port”;