在两个数据中心模式下测试 Consul

Testing Consul in two datacenter mode

我们正在对使用 Consul 进行服务发现的 Java 应用程序进行集成测试。 The Embedded Consul examples bootstrap a Consul server in a single datacenter, which works well for most of our testing. However, we're trying to test a situation in which a service record exists in one datacenter and not another. The consul guide 使用 vagrant 为每个数据中心创建虚拟环境,但这在自动化测试环境中似乎很难做到。

这是在本地拥有一个 consul 集群 运行 并模拟两个数据中心的唯一方法吗? Embedded Consul 库可以在幕后为我们做这件事吗,还是我们需要在集成测试配置中调用 vagrant?

您可以 运行 在一台机器上(在不同的端口和不同的数据目录上)使用多个 consul 进程。数据中心在配置中传递或作为命令行参数传递。你根本不需要使用 Vagrant.. Docker..

应该很简单

这里是一个示例 docker-compose.yml 文件 - https://github.com/hashicorp/consul/blob/master/demo/docker-compose-cluster/docker-compose.yml

最终的问题是每个实例的 -data-dir 需要不同:

consul agent -server -data-dir=/tmp/consul/node1 -node=agent-tpc -bind=127.0.0.1 -client==127.0.0.1 -datacenter=tpc
consul agent -server -data-dir=/tmp/consul/node2 -node=agent-cnj -bind=127.0.0.2 -client==127.0.0.2 -datacenter=cnj –retry-join-wan=127.0.0.1