背景
当前分支中,master_quorum 的选主 _id 使用代码内写死的固定值。
在主备部署场景下,不同同步任务如果都开启 master_quorum,会共享同一个 election 文档,缺少按任务或实例组隔离的能力。
问题
master_quorum 的 election _id 固定写死,无法按实例组配置。
- 多个独立同步任务开启
master_quorum 时,存在共享同一选主文档的风险。
- 配置层缺少对
master_quorum 关键字段的显式校验。
目标
- 为
master_quorum 增加可配置的 election ObjectId。
- 在开启
master_quorum 时,启动阶段强制校验该配置是否存在。
- 保持现有 quorum 选主机制不变,仅增强配置能力和可用性。
方案概述
- 新增配置项
master_quorum.objectId,用于指定 election 文档的 _id。
- 在
collector 启动阶段,如果 master_quorum = true 且 master_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、抢主超时等策略参数。
- 不引入新的主备状态管理机制。
背景
当前分支中,
master_quorum的选主_id使用代码内写死的固定值。在主备部署场景下,不同同步任务如果都开启
master_quorum,会共享同一个 election 文档,缺少按任务或实例组隔离的能力。问题
master_quorum的 election_id固定写死,无法按实例组配置。master_quorum时,存在共享同一选主文档的风险。master_quorum关键字段的显式校验。目标
master_quorum增加可配置的 election ObjectId。master_quorum时,启动阶段强制校验该配置是否存在。方案概述
master_quorum.objectId,用于指定 election 文档的_id。collector启动阶段,如果master_quorum = true且master_quorum.objectId为空,则启动失败并返回明确错误。selectLeader()中不再使用固定 ObjectId,而是改为读取配置中的master_quorum.objectId。影响范围
collector/configure/configure.gocmd/collector/sanitize.gocmd/collector/collector.goquorum/quorum.goconf/collector.conf验收标准
master_quorum时,行为与现状保持一致。master_quorum且未配置master_quorum.objectId时,程序启动失败,并输出明确错误信息。master_quorum且配置合法master_quorum.objectId时,能够正常参与选主。master_quorum.objectId使用不同 election 文档,互不干扰。master_quorum.objectId,避免代码与样例不一致。风险与注意事项
master_quorum.objectId必须是合法的 MongoDBObjectID十六进制字符串。非目标