dockerrabbitmqcluster-computingubuntu-16.04

How do I set up a simple dockerized RabbitMQ cluster?


I've been doing a bit of reading up about setting up a dockerized RabbitMQ cluster and google turns up all sorts of results for doing so on the same machine.

I am trying to set up a RabbitMQ cluster across multiple machines.

I have three machines with the names dockerswarmmodemaster1, dockerswarmmodemaster2 and dockerswarmmodemaster3

On the first machine (dockerswarmmodemaster1), I issue the following command:

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 \
    -p 25672:25672 --hostname dockerswarmmodemaster1 --name roger_rabbit \
    -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management

Now this starts up a rabbitMQ just fine, and I can go to the admin page on 15672 and see that it is working as expected.

I then SSH to my second machine (dockerswarmmodemaster2) and this is the bit I am stuck on. I have been trying variations on the following command:

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671  \
    -p 15672:15672 -p 25672:25672 --name jessica_rabbit -e CLUSTERED=true \
    -e CLUSTER_WITH=rabbit@dockerswarmmodemaster1 \
    -e RABBITMQ_ERLANG_COOKIE='secret cookie here' \
    rabbitmq:3-management

No matter what I try, the web page on both RabbitMQ machines says that there is no cluster under the 'cluster links' section. I haven't tried involving the third machine yet.

So - some more info:

  1. The machine names are resolvable by DNS.
  2. I have tried using the --net=host switch in the docker run command on both machines; no change.
  3. I am not using docker swarm or swarm mode.
  4. I do not have docker compose installed. I'd prefer not to use it if possible.

Is there any way of doing this from the docker run command or will I have to download the rabbit admin cli and manually join to the cluster?


Solution

  • You can use this plugin https://github.com/aweber/rabbitmq-autocluster to create a RabbitMQ docker cluster.

    The plugin uses etcd2 or consul as service discovery, in this way you don't need to use the rabbitmqctl command line.

    I used it with docker swarm, but it is not necessary.

    Here is the result