【问题标题】:Clustering vernemq docker containers running on different machines集群在不同机器上运行的 vernemq docker 容器
【发布时间】:2021-01-07 16:00:36
【问题描述】:

我希望通过在第二个实例的 docker-compose.yml 文件上使用下面的 sn-p 来实现这一点很容易

- DOCKER_VERNEMQ_DISCOVERY_NODE=<ip address of the first instance> 

但这似乎不起作用。

第二个实例的日志确认它正在尝试集群:

13:56:09.795 [info] Sent join request to: 'VerneMQ@<ip address of the first instance>'
13:56:16.800 [info] Unable to connect to 'VerneMQ@<ip address of the first instance>'

虽然第一个实例的日志根本没有显示任何内容。

在第二个实例中,我可以确认端点是可访问的:

$ docker exec -it vernemq /bin/sh
$ curl <ip address of the first instance>:44053
curl: (56) Recv failure: Connection reset by peer

然后在第一个实例的日志中,我看到一个完全预期的错误,并确认我已经到达第一个实例

13:58:33.572 [error] CRASH REPORT Process <0.3050.0> with 0 neighbours crashed with reason: bad argument in vmq_cluster_com:process_bytes/3 line 142
13:58:33.572 [error] Ranch listener {{172,19,0,2},44053} terminated with reason: bad argument in vmq_cluster_com:process_bytes/3 line 142

这可能与从 docker 容器内看到的 IP 地址是 172.19.0.2 而外部地址是 10. ... 这一事实有关。

还尝试将第一个实例的主机名添加到known_hosts,但无济于事。

请指教。

我正在使用 erlio/docker-vernemq:1.10.0

$ docker --version
Docker version 19.03.13, build 4484c46d9d

$ docker-compose --version
docker-compose version 1.27.2, build 18f557f9

【问题讨论】:

    标签: docker docker-compose mqtt-vernemq


    【解决方案1】:

    我设法通过创建docker overlay network 对其进行了排序

    在机器 1 上:docker swarm init
    在机器 2 上:docker swarm join --token ...
    在 machine1 上:docker network create --driver=overlay --attachable vernemq-overlay-net

    我的 dockerfile 的相关位是:

    version: '3.6'
    
    services:
      vernemq:
        container_name: ${NODE_NAME:?Node name not specified}
        image: vernemq/vernemq:1.10.4.1
        environment:
          - DOCKER_VERNEMQ_NODENAME=${NODE_NAME:?Node name not specified}
          - DOCKER_VERNEMQ_DISCOVERY_NODE=${DISCOVERY_NODE:-}
    
    networks:
      default:
        external:
          name: vernemq-overlay-net
    

    使用以下环境变量:

    机器1:

    • NODE_NAME=vernemq1.example.com
    • DISCOVERY_NODE=

    机器2:

    • NODE_NAME=vernemq2.example.com
    • DISCOVERY_NODE=vernemq1.example.com

    注意:
    据我所知,由于 docker-compose 中的错误,machine2 可能找不到 vernemq-overlay-net
    在这种情况下,您使用 docker: docker run -dit --name alpine --net=vernemq-overlay-net alpine 启动一个容器,这将使其可用于 docker-compose。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 2018-08-07
      • 2016-05-19
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多