Consul的一个关键特性是支持多数据中心。consul架构中提到是构建低耦合的多个数据中心,一个数据中心的网络连接问题或故障不在其他数据中心的可用性。每个数据中心都是独立运行,并且拥有私有的LAN
gossip pool。
参照consul部署,部署两个数据中dc1和dc2。数据中心的名字对consul而言是不透明的,它们只是用于管理员与consul交互使用。
通过consulmembers –wan命令可以查询WAN中的节点:
$ consul members-wan ...
输出结果是WAN gossip pool中的节点列表,只包含server节点。 client节点只会想本地数据中的server节点发送请求,不会加入WAN Gossip Pool。Client请求会通过本地数据中的Server节点转发到目标数据中心。
下一步是保证所有的Server节点均加入到WAN gossip Pool。
$ consul join -wan<server 1> <server 2> ... ...
join命令加上-wan参数,是讲Server加入到WAN gossip pool。而LAN gossip pool,只需要加入到现有的某个Server节点即可,和通过gossip协议与其他成员交换信息即可知道所有的成员节点。然而,对于启动的consul的Server,只知道自己的信息,必须添加到群集中。
一旦加入完成,基于WAN通过gossip协议就可以使用members命令查询所有的Server节点。
我们也可以通过HTTP API来查询所有的数据中心:
$ curlhttp://localhost:8500/v1/catalog/datacenters ["dc1", "dc2"]
做一个简单的测试,查询某个数据中心的所有节点:
$ curlhttp://localhost:8500/v1/catalog/nodes?dc=dc1 ... $ curlhttp://localhost:8500/v1/catalog/nodes?dc=dc2 ...
构建多数据中心,网络需要满足如下要求:1.所有的Server节点都是互通,否则,基于gossip协议的RPC转发将无法工作。如果服务发现是可以跨数据中心,网络必须能够跨区域之间的路由的IP地址以及。2.如果使用服务发现,那么所有的数据中心都是互通的,或者基于VPN或其他隧道机制是互通的。Consul不能处理VPN、address rewritting,或者NAT
traversal。