无法进行合并,错误代码 4217时怎么办?

本文介绍在 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 用户指南》。

  1. 登录 OCP。
  2. 在左侧导航栏中选择 集群,在 **集群列表 **中单击要执行合并的集群名称,进入 **集群概览 **页面。
  3. 在 OBServer 列表中,找到非 运行中 状态的节点,在对应的 **操作 **列单击 **删除 **或 替换
  4. 登录 OceanBase 数据库执行合并。

obclient> ALTER SYSTEM MAJOR FREEZE;

方法二:忽略故障 OBServer 进行合并

下面以 OCP V2.4.x 为例介绍忽略故障 OBServer 进行合并的方法。不同 OCP 版本的操作界面可能不同,请以实际界面为准;具体的操作方法,请参见对应版本的《OCP 用户指南》。

  1. 登录 OCP。

  2. 在左侧导航栏中选择 集群,在 **集群列表 **中单击要执行合并的集群名称,进入 **集群概览 **页面。

  3. 记录状态不是 运行中 节点的 IP 地址与端口号。

  4. 如果节点处于

    DELETING

    状态,则可能是由于迁移资源单元需要的时间比较长,而此时需要合并(长时间不合并将导致内存满的问题)。

  5. 执行以下 SQL 语句忽略指定的 OBServer 进行合并。

obclient> ALTER SYSTEM major freeze ignore “ip:port”;