咨询一下ADD REPLICA使用

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】社区 V4.3.5.1
【问题描述】手动删除了一个副本,该副本是F,然后再执行添加副本,添加的时候指定的副本类型是R,但实际副本补齐后是F副本,也就是说是遵循的租户的locality,那add replica命令中的参数replica_type感觉就没用任何的用处了啊,还是一个必选的参数。

ALTER SYSTEM ADD REPLICA
LS [=] ls_id
SERVER [=] ‘svr_ip:svr_port’
REPLICA_TYPE [=] ‘replica_type’
[DATA_SOURCE [=] ‘data_source’]
[PAXOS_REPLICA_NUM [=] $paxos_replica_num]
[TENANT [=] ‘$tenant_name’];

还有就是手动修改副本类型 指定了R类型 可以执行不报错 但修改后还是F类型

3 个赞

@论坛小助手

根据文档库中的信息,以下是对您问题的解答:

关于 ADD REPLICA 命令中 REPLICA_TYPE 参数的作用

  1. ADD REPLICA 的行为与租户的 Locality
    根据文档片段 9 和 10 的描述,OceanBase 数据库的副本分布和类型主要由租户的 Locality 决定。即使在执行 ALTER SYSTEM ADD REPLICA 时指定了 REPLICA_TYPE 参数,最终生成的副本类型仍然会受到租户 Locality 的约束。因此,如果 Locality 中定义了某个 Zone 的副本类型为 F(全功能型副本),那么即使在命令中指定为 R(只读型副本),实际补齐的副本类型仍会是 F

    依据:文档片段 9 提到,“当租户的 Locality 发生变更时,在该租户下,所有表的副本分布情况也会随之变化。” 这表明 Locality 是决定副本类型的最终规则。

  2. REPLICA_TYPE 参数的意义
    尽管最终的副本类型可能受 Locality 约束,但 REPLICA_TYPE 参数仍然是一个必选参数。它的作用在于:

    • 明确运维意图:通过指定 REPLICA_TYPE,可以清晰表达运维人员希望添加的副本类型。
    • 检查合法性:系统会检查指定的 REPLICA_TYPE 是否符合当前日志流的多数派要求(见文档片段 5)。如果指定的类型会导致日志流无法形成多数派,则命令会报错。

    总结REPLICA_TYPE 参数虽然在某些情况下看似没有直接作用,但它仍然是必要的,用于明确运维意图并进行合法性检查。


关于手动修改副本类型的行为

  1. MODIFY REPLICA 的限制
    根据文档片段 5 的描述,ALTER SYSTEM MODIFY REPLICA 命令可以尝试修改副本类型,但最终的修改结果仍然需要满足租户的 Locality 配置。如果 Locality 中定义了某个 Zone 的副本类型为 F,那么即使命令执行成功,副本类型最终仍会被调整为 F

    依据:文档片段 5 提到,“要确保修改副本类型后日志流还能形成多数派,否则运维命令报错。” 这意味着,即使命令执行不报错,最终的副本类型也可能被 Locality 规则覆盖。

  2. Locality 的优先级
    Locality 是 OceanBase 数据库中描述数据副本分布的核心机制。无论是通过 ADD REPLICA 添加副本还是通过 MODIFY REPLICA 修改副本类型,最终的结果都需要符合 Locality 的定义。因此,如果您希望更改副本类型,建议先调整租户的 Locality 配置,然后再执行相关操作。

    示例:假设您希望将某个 Zone 的副本类型从 F 修改为 R,可以通过以下步骤实现:

    -- 修改租户的 Locality 配置
    ALTER TENANT tenant_name LOCALITY='F@zone1,R@zone2';
    
    -- 确保 Locality 变更完成后,再尝试修改副本类型
    ALTER SYSTEM MODIFY REPLICA
    LS = ls_id
    SERVER = 'svr_ip:svr_port'
    REPLICA_TYPE = 'R'
    PAXOS_REPLICA_NUM = paxos_replica_num
    TENANT = 'tenant_name';
    

总结

  1. ADD REPLICA 中的 REPLICA_TYPE 参数

    • 参数本身是必选的,用于明确运维意图和进行合法性检查。
    • 最终的副本类型仍需符合租户的 Locality 配置。
  2. 手动修改副本类型的行为

    • 即使 ALTER SYSTEM MODIFY REPLICA 命令执行成功,最终的副本类型仍可能被 Locality 规则覆盖。
    • 如果需要更改副本类型,建议先调整租户的 Locality 配置。
  3. 建议
    如果您希望灵活控制副本类型,请结合 Locality 配置和运维命令一起使用。例如,先通过 ALTER TENANT ... LOCALITY 调整副本分布策略,再执行 ADD REPLICAMODIFY REPLICA 命令。

希望以上解答对您有所帮助!如果仍有疑问,请进一步说明您的需求。

更多信息请查看:

  1. MODIFY REPLICA
  2. Locality 介绍
  3. 修改租户副本
  4. ob_compatibility_version
  5. oceanbase.CDB_OB_LS_ARB_REPLICA_TASKS
  6. ADD REPLICA
  7. 增加副本
  8. 单机在线转分布式部署
1 个赞