王现岗
#1
【 使用环境 】测试环境
【 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 个赞
论坛小助手
#4
根据文档库中的信息,以下是对您问题的解答:
关于 ADD REPLICA 命令中 REPLICA_TYPE
参数的作用
-
ADD REPLICA 的行为与租户的 Locality
根据文档片段 9 和 10 的描述,OceanBase 数据库的副本分布和类型主要由租户的 Locality 决定。即使在执行 ALTER SYSTEM ADD REPLICA
时指定了 REPLICA_TYPE
参数,最终生成的副本类型仍然会受到租户 Locality 的约束。因此,如果 Locality 中定义了某个 Zone 的副本类型为 F
(全功能型副本),那么即使在命令中指定为 R
(只读型副本),实际补齐的副本类型仍会是 F
。
依据:文档片段 9 提到,“当租户的 Locality 发生变更时,在该租户下,所有表的副本分布情况也会随之变化。” 这表明 Locality 是决定副本类型的最终规则。
-
REPLICA_TYPE
参数的意义
尽管最终的副本类型可能受 Locality 约束,但 REPLICA_TYPE
参数仍然是一个必选参数。它的作用在于:
- 明确运维意图:通过指定
REPLICA_TYPE
,可以清晰表达运维人员希望添加的副本类型。
- 检查合法性:系统会检查指定的
REPLICA_TYPE
是否符合当前日志流的多数派要求(见文档片段 5)。如果指定的类型会导致日志流无法形成多数派,则命令会报错。
总结:REPLICA_TYPE
参数虽然在某些情况下看似没有直接作用,但它仍然是必要的,用于明确运维意图并进行合法性检查。
关于手动修改副本类型的行为
-
MODIFY REPLICA 的限制
根据文档片段 5 的描述,ALTER SYSTEM MODIFY REPLICA
命令可以尝试修改副本类型,但最终的修改结果仍然需要满足租户的 Locality 配置。如果 Locality 中定义了某个 Zone 的副本类型为 F
,那么即使命令执行成功,副本类型最终仍会被调整为 F
。
依据:文档片段 5 提到,“要确保修改副本类型后日志流还能形成多数派,否则运维命令报错。” 这意味着,即使命令执行不报错,最终的副本类型也可能被 Locality 规则覆盖。
-
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';
总结
-
ADD REPLICA 中的 REPLICA_TYPE
参数
- 参数本身是必选的,用于明确运维意图和进行合法性检查。
- 最终的副本类型仍需符合租户的 Locality 配置。
-
手动修改副本类型的行为
- 即使
ALTER SYSTEM MODIFY REPLICA
命令执行成功,最终的副本类型仍可能被 Locality 规则覆盖。
- 如果需要更改副本类型,建议先调整租户的 Locality 配置。
-
建议
如果您希望灵活控制副本类型,请结合 Locality 配置和运维命令一起使用。例如,先通过 ALTER TENANT ... LOCALITY
调整副本分布策略,再执行 ADD REPLICA
或 MODIFY REPLICA
命令。
希望以上解答对您有所帮助!如果仍有疑问,请进一步说明您的需求。
更多信息请查看:
- MODIFY REPLICA
- Locality 介绍
- 修改租户副本
- ob_compatibility_version
- oceanbase.CDB_OB_LS_ARB_REPLICA_TASKS
- ADD REPLICA
- 增加副本
- 单机在线转分布式部署
1 个赞