修改 Primary Zone 失败,错误代码 4179的原因是什么?

本文介绍修改 Primary Zone 失败报 4179 错误的原因和解决方法。

适用版本

OceanBase 数据库所有版本

问题现象

执行以下 SQL 语句修改租户的 Primary Zone 提示错误,错误信息如下。

ALTER TENANT test_tenant primary_zone=‘second_zone’; ERROR 4179 (HY000): primary zone F type replica not enough in its region not allowed

日志信息如下:

WARN [RS] do_check_primary_zone_region_condition (ob_ddl_service.cpp:10992) [26906][YB420BA64E88-0005A027DF243ACC] [lt=14] primary zone F type replica is not enough in its region(ret=-4179)

可能原因

根据错误信息,可知错误是由于

primary_zone

的 Region 中包含的 Zone 的全副本数量不满足多数派引起的。

说明OceanBase 数据库使用了 Paxos 协议来保证数据可靠性。设置表、租户或数据库的 Primary Zone 时,会检查指定的 Primary Zone 所在的 Region,如果指定的 Primary Zone 所在的 Region 中包含的 Zone 的全副本数量不满足多数派要求,系统会报错。

例如,目前集群的 Zone 与 Region 设置如下图的情况下,禁止将 Primary Zone 切换到 zone3。

解决方法

可以通过以下两种方法之一解决该问题。

  • 扩容要修改的 Zone 所在的 Region,使其成为多数派。例如,对于以上 1-1-1 的部署模式,可以将 Region_2 扩容为 2 个 Zone 的 1-1-1-1-1 部署模式,如下图所示:
  • 可以通过修改 Region 属性进行临时规避:

obclient> ALTER SYSTEM MODIFY ‘target_primary_zone_name’ REGION ‘same_as_other_majority_zone_name’;

  • 若要通过更改 Region 的方式来规避,需要注意以下问题:
  • Region 的分布是否符合预期,配置是否正确。
  • 例如,1-1-1 部署模式中,Zone1 和 Zone2 的 Region 为 BEIJING,Zone3 的 Region 为 HANGZHOU,则将 Primary Zone 设为 Zone3 的操作是不合理的,因为这违反了多数派规则。
  • 若 Region 配置正确,考虑是否一定要将 Primary Zone 设置到单 Zone 的 Region 上。
  • 例如,1-1-1 部署模式中,Zone1 和 Zone2 的 Region 为 BEIJING,Zone3 的 Region 为 HANGZHOU,您需要停止 Primary Zone 上的 observer 进程,此时需要将主副本切换到其他 Zone 中,您可以选择将 Zone2 设置为 Primary Zone。
  • 若需要将 Primary Zone 设置在单 Zone 的 Region,可以使用更改 Region 的方式规避该错误。但这种方式会存在隐患,例如 OMS 的副本选取以及副本的级联都依赖于 Region,若更改 Region 可能会有非预期的影响。