无法进行合并,错误代码 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. 1606099246959-9520bfc0-26fb-49b1-9770-b7cbe0ad2a61
  4. 在 OBServer 列表中,找到非 运行中 状态的节点,在对应的 操作 列单击 删除 或 替换
  5. 1606100164197-3eda71a7-d79a-41d6-a157-8de473965595
  6. 登录 OceanBase 数据库执行合并。
obclient> ALTER SYSTEM MAJOR FREEZE;

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

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

  1. 登录 OCP。
  2. 在左侧导航栏中选择 集群,在 集群列表 中单击要执行合并的集群名称,进入 集群概览 页面。
  3. 1606099246959-9520bfc0-26fb-49b1-9770-b7cbe0ad2a61
  4. 记录状态不是 运行中 节点的 IP 地址与端口号。
  5. 如果节点处于 
    DELETING
     状态,则可能是由于迁移资源单元需要的时间比较长,而此时需要合并(长时间不合并将导致内存满的问题)。
  6. 执行以下 SQL 语句忽略指定的 OBServer 进行合并。
obclient> ALTER SYSTEM major freeze ignore "ip:port";