Vivid
拓扑与法定人数

多数据中心

DC、Rack、Region、Zone 与跨 DC Gossip

集群支持多数据中心(Multi-Datacenter)部署,通过拓扑标签区分节点所在位置,并针对跨 DC 场景做超时与 Gossip 优化。

拓扑标签

在 ClusterOptions 中设置,会写入 NodeState.Labels 并随 Gossip 传播:

标签选项说明
datacenterWithClusterDatacenter数据中心标识
rackWithClusterRack机架标识
regionWithClusterRegion区域标识(同 Region 优先 Gossip)
zoneWithClusterZone可用区标识

GetMembers() 返回的 ClusterMemberInfo 包含 Datacenter、Rack、Region、Zone。

种子按 DC 分组

使用 WithClusterSeedsByDC 按 DC 分组种子,加入时优先尝试本 DC 种子:

vivid.WithClusterSeedsByDC(map[string][]string{
    "dc1": []string{"seed-dc1-a:8080", "seed-dc1-b:8080"},
    "dc2": []string{"seed-dc2-a:8080", "seed-dc2-b:8080"},
}),

SeedsByDC 可与 Seeds 同时存在,合并使用;全球部署时建议每 DC 至少配置一种子。

跨 DC 故障检测

  • CrossDCFailureDetectionTimeout:跨 DC 成员的故障检测超时。若 >0 则对其它 DC 的成员使用此超时;为 0 时默认采用 FailureDetectionTimeout 的 2 倍(推荐跨 DC 显式配置为 2–3 倍同 DC 超时)。
  • CrossDCDiscoveryInterval:跨 DC Gossip 的轮次间隔。若 >0 则额外启动一轮仅向跨 DC 目标发送的 Gossip,降低跨 DC 带宽与误判;0 表示不单独调度。

跨 DC Gossip 目标数

MaxDiscoveryTargetsPerTickCrossDC:跨 DC 每轮 Gossip 最大目标数;>0 时跨 DC 轮次使用此值,否则使用 MaxDiscoveryTargetsPerTick。

必须参与 Quorum 的 DC

RequiredDCsForQuorum:必须参与 quorum 的 DC 列表;非空时这些 DC 中每个至少需有 1 个健康节点才满足 quorum,用于关键 DC 必须参与的多活。

Gossip 选择优先级

GossipTargetSelector 按优先级选择目标:同 Region 同 DC 优先,再同 Region 跨 DC,再跨 Region;减少跨 DC 流量、加快本 DC 收敛。

多 DC 下的优雅退出

多 DC 时建议:

  • LeaveBroadcastDelay 增大至 1–2s,给跨 DC 传播留足时间。
  • LeaveBroadcastRounds 设为 >1,多轮广播以提高高延迟 DC 收敛概率。

On this page