2014-04-11 19:03:12 +00:00
---
layout: "docs"
page_title: "Multiple Datacenters"
sidebar_current: "docs-guides-datacenters"
2014-10-19 23:40:10 +00:00
description: |-
2015-03-01 03:20:02 +00:00
One of the key features of Consul is its support for multiple datacenters. The architecture of Consul is designed to promote low coupling of datacenters so that connectivity issues or failure of any datacenter does not impact the availability of Consul in other datacenters. This means each datacenter runs independently, each having a dedicated group of servers and a private LAN gossip pool.
2014-04-11 19:03:12 +00:00
---
2015-03-01 03:20:02 +00:00
# Multiple Datacenters
2014-04-11 19:03:12 +00:00
2014-04-17 21:45:53 +00:00
One of the key features of Consul is its support for multiple datacenters.
2014-04-11 19:03:12 +00:00
The [architecture ](/docs/internals/architecture.html ) of Consul is designed to
2015-03-01 03:20:02 +00:00
promote a low coupling of datacenters so that connectivity issues or
2014-04-11 19:03:12 +00:00
failure of any datacenter does not impact the availability of Consul in other
2015-03-01 03:20:02 +00:00
datacenters. This means each datacenter runs independently, each having a dedicated
2014-04-11 19:03:12 +00:00
group of servers and a private LAN [gossip pool ](/docs/internals/gossip.html ).
2015-10-15 18:36:54 +00:00
To get started, follow the [bootstrapping guide ](/docs/guides/bootstrapping.html ) to
2015-03-01 03:20:02 +00:00
start each datacenter. After bootstrapping, we should have two datacenters now which
we can refer to as `dc1` and `dc2` . Note that datacenter names are opaque to Consul;
they are simply labels that help human operators reason about the Consul clusters.
2014-04-11 19:03:12 +00:00
2015-03-01 03:20:02 +00:00
To query the known WAN nodes, we use the [`members` ](/docs/commands/members.html )
command with the `-wan` parameter:
2014-04-11 19:03:12 +00:00
2014-10-19 23:40:10 +00:00
```text
2014-04-11 19:03:12 +00:00
$ consul members -wan
...
```
This will provide a list of all known members in the WAN gossip pool. This should
2015-03-01 03:20:02 +00:00
only contain server nodes. Client nodes send requests to a datacenter-local server,
so they do not participate in WAN gossip. Client requests are forwarded by local
servers to a server in the target datacenter as necessary.
2014-04-11 19:03:12 +00:00
2016-10-07 08:42:37 +00:00
The next step is to ensure that all the server nodes join the WAN gossip pool (include all the servers in all the datacenters):
2014-04-11 19:03:12 +00:00
2014-10-19 23:40:10 +00:00
```text
2014-04-11 19:03:12 +00:00
$ consul join -wan < server 1 > < server 2 > ...
...
```
2015-03-01 03:20:02 +00:00
The [`join` ](/docs/commands/join.html ) command is used with the `-wan` flag to indicate
we are attempting to join a server in the WAN gossip pool. As with LAN gossip, you only
need to join a single existing member, and the gossip protocol will be used to exchange
information about all known members. For the initial setup, however, each server
2014-04-11 19:03:12 +00:00
will only know about itself and must be added to the cluster.
2015-03-01 03:20:02 +00:00
Once the join is complete, the [`members` ](/docs/commands/members.html ) command can be
used to verify that all server nodes gossiping over WAN.
We can also verify that both datacenters are known using the
[HTTP Catalog API ](/docs/agent/http/catalog.html#catalog_datacenters ):
2014-04-11 19:03:12 +00:00
2014-10-19 23:40:10 +00:00
```text
2014-04-11 19:03:12 +00:00
$ curl http://localhost:8500/v1/catalog/datacenters
["dc1", "dc2"]
```
As a simple test, you can try to query the nodes in each datacenter:
2014-10-19 23:40:10 +00:00
```text
2014-04-11 19:03:12 +00:00
$ curl http://localhost:8500/v1/catalog/nodes?dc=dc1
...
$ curl http://localhost:8500/v1/catalog/nodes?dc=dc2
...
```
2016-10-07 08:42:37 +00:00
In order to persist the `join` information, the following can be added to the `consul` configuration in each of the `server` nodes in the cluster. For example, in `dc1` server nodes:
```
...
"retry_join_wan":[
"dc2-server-1",
...
2016-11-18 00:43:47 +00:00
"dc2-server-N"
2016-10-07 08:42:37 +00:00
],
...
```
2014-04-11 19:03:12 +00:00
There are a few networking requirements that must be satisfied for this to
2015-03-01 03:20:02 +00:00
work. Of course, all server nodes must be able to talk to each other. Otherwise,
2014-04-11 19:03:12 +00:00
the gossip protocol as well as RPC forwarding will not work. If service discovery
2015-03-01 03:20:02 +00:00
is to be used across datacenters, the network must be able to route traffic
2014-04-11 19:03:12 +00:00
between IP addresses across regions as well. Usually, this means that all datacenters
must be connected using a VPN or other tunneling mechanism. Consul does not handle
VPN, address rewriting, or NAT traversal for you.