Skip to content

支持 master_quorum 自定义选主 ObjectId 并补齐配置校验 #965

@SisyphusSQ

Description

@SisyphusSQ

背景

当前分支中,master_quorum 的选主 _id 使用代码内写死的固定值。
在主备部署场景下,不同同步任务如果都开启 master_quorum,会共享同一个 election 文档,缺少按任务或实例组隔离的能力。

问题

  1. master_quorum 的 election _id 固定写死,无法按实例组配置。
  2. 多个独立同步任务开启 master_quorum 时,存在共享同一选主文档的风险。
  3. 配置层缺少对 master_quorum 关键字段的显式校验。

目标

  1. master_quorum 增加可配置的 election ObjectId。
  2. 在开启 master_quorum 时,启动阶段强制校验该配置是否存在。
  3. 保持现有 quorum 选主机制不变,仅增强配置能力和可用性。

方案概述

  • 新增配置项 master_quorum.objectId,用于指定 election 文档的 _id
  • collector 启动阶段,如果 master_quorum = truemaster_quorum.objectId 为空,则启动失败并返回明确错误。
  • selectLeader() 中不再使用固定 ObjectId,而是改为读取配置中的 master_quorum.objectId
  • 顺带梳理启动阶段的初始化顺序,避免相关能力初始化被选主流程阻塞。
  • 更新默认配置文件和相关说明文档,补充新配置项的用途和填写要求。

影响范围

  • collector/configure/configure.go
  • cmd/collector/sanitize.go
  • cmd/collector/collector.go
  • quorum/quorum.go
  • conf/collector.conf
  • README / 配置说明文档

验收标准

  • 未开启 master_quorum 时,行为与现状保持一致。
  • 开启 master_quorum 且未配置 master_quorum.objectId 时,程序启动失败,并输出明确错误信息。
  • 开启 master_quorum 且配置合法 master_quorum.objectId 时,能够正常参与选主。
  • 不同同步任务可通过不同 master_quorum.objectId 使用不同 election 文档,互不干扰。
  • 配置样例中包含 master_quorum.objectId,避免代码与样例不一致。

风险与注意事项

  • master_quorum.objectId 必须是合法的 MongoDB ObjectID 十六进制字符串。
  • 如果只修改代码而不更新配置样例,用户开启功能后可能直接启动失败。
  • 本次改动不涉及 quorum 选主算法本身,仅涉及选主文档标识和启动流程整理。

非目标

  • 不修改现有 quorum 选主算法。
  • 不调整 heartbeat、抢主超时等策略参数。
  • 不引入新的主备状态管理机制。

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions