Consul 多数据中心

单集群扛不住跨地域容灾与就近访问需求时,Consul 支持把多个数据中心(DC)联邦起来:每个 DC 内部独立自治,DC 之间通过 WAN gossip 互相发现并转发请求。

WAN gossip 与联邦

联邦发生在 server 之间:把一个 DC 的 server 用 WAN 地址加入另一个 DC,两边经 8302 端口交换成员信息:

# 在 dc2 的 server 上执行,把 dc1 的 server 加入 WAN 成员:
consul agent -server -datacenter=dc2 -retry-join-wan=192.168.1.11
# 任一节点查看 WAN 成员,应看到两个 DC 的 server:
consul members -wan
# 输出:s1.dc1 192.168.1.11:8302 alive server ...   s4.dc2 192.168.1.41:8302 alive server ...

只有 server 参与跨 DC 联邦,client 永远只属于本地 DC;各 DC 内部仍各自维护 LAN gossip。

请求自动转发

任意 agent 收到非本 DC 的请求会自动转发给目标 DC 的 server,业务无感知,也可显式指定 DC:

curl "http://127.0.0.1:8500/v1/catalog/services?dc=dc2"
# 输出:返回 dc2 的服务目录(本地 dc1 节点代转发)

数据中心命名与 DNS 发现

每个 DC 的名称在配置里声明,默认 dc1;多 DC 部署时务必显式命名:

{ "datacenter": "dc2", "node_name": "s4", "server": true }

跨 DC 服务发现走 DNS 的 <name>.service.<dc>.consul 形式:

dig @127.0.0.1 -p 8600 web.service.dc2.consul
# ANSWER SECTION 里返回 dc2 中 web 服务的健康实例 IP

容灾语义

联邦不等于数据同步:每个 DC 都是独立的 Raft 集群,KV 与服务数据只在本 DC 内复制,跨 DC 默认不复制任何数据。多 DC 的价值在请求级故障转移与就近访问,而不是数据备份:

方式数据语义适用
同 DC 多 server强一致复制单机房高可用
多 DC 联邦各自独立、请求互转跨地域容灾与就近
异地数据备份需 snapshot 主动完成防整个 DC 毁灭(见第 16 章)

小结

多数据中心要点:server 间用 -retry-join-wan 建联邦、请求可自动跨 DC 转发、DNS 用 <name>.service.<dc>.consul 跨 DC 解析。切记 KV 不跨 DC 复制,跨地域的数据安全要靠快照备份兜底。

笔记加载中…