Docker 如何设置一个简单的停靠RabbitMQ集群?

Docker 如何设置一个简单的停靠RabbitMQ集群?,docker,rabbitmq,cluster-computing,ubuntu-16.04,Docker,Rabbitmq,Cluster Computing,Ubuntu 16.04,我一直在读一些关于设置停靠RabbitMQ集群的文章,google在同一台机器上显示了这样做的各种结果 我正在尝试跨多台计算机设置RabbitMQ群集 我有三台机器的名称分别为dockerswarmodemaster1,dockerswarmodemaster2和dockerswarmodemaster3 在第一台机器(dockerswarmmodemaster1)上,我发出以下命令: docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p

我一直在读一些关于设置停靠RabbitMQ集群的文章,google在同一台机器上显示了这样做的各种结果

我正在尝试跨多台计算机设置RabbitMQ群集

我有三台机器的名称分别为
dockerswarmodemaster1
dockerswarmodemaster2
dockerswarmodemaster3

在第一台机器(dockerswarmmodemaster1)上,我发出以下命令:

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
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
现在这启动了一个rabbitMQ,我可以转到15672的管理页面,看到它按照预期工作

然后我SSH到我的第二台机器(dockerswarmodemaster2),这就是我一直坚持的一点。我一直在尝试以下命令的变体:

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
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
不管我怎么做,两台RabbitMQ机器上的网页都会显示“集群链接”部分下没有集群。我还没试过使用第三台机器

所以-更多信息:

  • 计算机名称可通过DNS解析
  • 我尝试在两台机器上的docker run命令中使用--net=host开关;没有变化
  • 我没有使用docker swarm或swarm模式
  • 我没有安装docker compose。如果可能的话,我宁愿不使用它
  • 有没有办法通过docker run命令执行此操作,或者我必须下载rabbit admin cli并手动加入群集?

    您可以使用此插件创建RabbitMQ docker群集

    该插件使用
    etcd2
    consul
    作为服务发现,这样您就不需要使用
    rabbitmqctl
    命令行

    我和docker swarm一起使用它,但它不是必需的


    结果是

    官方容器似乎不支持环境变量
    CLUSTERED
    clustereu WITH
    。它只支持在中指定的列表变量。 据这位官员介绍,可能的解决方案之一是通过配置文件。因此,您可以只向容器提供自己的配置。 在您的情况下,修改后的默认配置如下所示:

    [ 
      { rabbit, [ 
        { loopback_users, [ ] }, 
        { cluster_nodes, {['rabbit@dockerswarmmodemaster1'], disc }} 
      ]} 
    ].
    
    将此代码段保存到,例如,
    /home/user/rmq/rabbitmq.config
    。 提示:如果您想在管理控制台中查看节点,则需要添加另一个文件
    /home/user/rmq/enabled_plugins
    ,其中只包含字符串

    [rabbitmq_management].
    
    之后,您的命令将如下所示

    docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671  \
    -p 15672:15672 -p 25672:25672 --name jessica_rabbit \
    -v /home/user/rmq:/etc/rabbmitmq \
    -e RABBITMQ_ERLANG_COOKIE='secret cookie here' \
    rabbitmq:3-management
    

    PS,您还需要考虑设置环境变量RabByMQUESULNMENT.

    < P>。为了创建集群,所有要组成集群的RabBMQ节点必须通过节点名(主机名)访问(每个人都可以访问)。 您需要使用
    --hostname
    选项为每个docker容器指定主机名,并为所有其他容器添加/etc/host条目,这可以通过
    --add host
    选项或手动编辑/etc/hosts文件来完成。 下面是一个带有docker容器的3个rabbitmq节点集群的示例(rabbitmq:3-management映像)

    首先,创建一个网络,以便分配IP:
    docker network create--subnet=172.18.0.0/16 mynet1
    。我们将有以下内容:

    • 3个名为rab1con、rab2con和rab3con的docker容器
    • IPs分别为172.18.0.11、-12和-13
    • 它们中的每一个将分别具有主机名rab1、rab2和rab3
    • 它们必须共享同一个erlang cookie
    把第一个旋转起来

    docker run -d --net mynet1 --ip 172.18.0.11 --hostname rab1 --add-host rab2:172.18.0.12 --add-host rab3:172.18.0.13 --name rab1con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management
    
    第二个

    docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --add-host rab3:172.18.0.13 --name rab2con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management
    
    最后一个

    docker run -d --net mynet1 --ip 172.18.0.13 --hostname rab3 --add-host rab2:172.18.0.12 --add-host rab1:172.18.0.11 --name rab3con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management
    
    然后,在容器rab2con中,执行以下操作

    rabbitmqctl stop_app
    rabbitmqctl join_cluster rabbit@rab1
    rabbitmqctl start_app
    
    拉邦也是如此,就这样