【问题标题】:setup activemq cluster in docker swarm在 docker swarm 中设置 activemq 集群
【发布时间】:2020-11-24 07:08:59
【问题描述】:

主题行:在 docker swarm 中设置 activemq 集群。

问题摘要: - 无法在 docker swarm 中创建具有两个主动-主动 activemq 节点的设置。所以需要你的帮助来设置它。以下是我正在尝试创建的设置的详细信息。

详情: 尝试在 docker swarm 设置中创建两个节点的 activemq 集群(不是 AMQ Artemis)。 码头工人版本是 19.03.12 以下虚拟机用于设置我的应用程序。

  1. node-infra - 这个 vm 是 swarm leader 并且有“activemq”容器
  2. node-infra2 - 这个 vm 是另一个 swarm 领导者,并且有“activemq”容器。
  3. node-app - 这个 vm 是运行我的应用程序的工作节点。

root@node-infra:~# docker node ls

ID 主机名状态可用性管理器状态引擎版本

ypzb7jmys3qzyea5r4r1te5b6 node-app Ready Active 19.03.12

byuar7z0uphd01zlujy9iy0n1 * node-infra Ready Active Leader 19.03.12

tvjzzlamc29gzrsnq3xn3e58w node-infra2 Ready Active Reachable 19.03.12

在此设置中创建了以下覆盖 docker 网络。 docker network create --driver=overlay --subnet=192.168.1.0/24 --attachable mynetwork

使用以下命令在两个 node-infra 节点中启动 activemq 容器。 docker run -d --restart unless-stopped --net mynetwork --log-opt mode=non-blocking --log-opt max-buffer-size=4m -p 61616:61616 -p 8161:8161 --name activemq rmohr/activemq:5.15.3-alpine

其余条目为默认条目,但以下条目已更改。

activemq.xml 条目如下,用于 node-infra 节点

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="master_infra" brokerId="master_id_infra" dataDirectory="${activemq.data}" schedulerSupport="true">
<networkConnectors>
<networkConnector name="default-nc" prefetchSize="10" uri="multicast://default" />
</networkConnectors>
<transportConnectors>
 <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"  rebalanceClusterClients="true" updateClusterClients="true" discoveryUri="multicast://default"/>
</transportConnectors>

对于 node-infra2 类似,以下是 activemq.xml 条目。

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="master_infra2" brokerId="master_id_infra2" dataDirectory="${activemq.data}" schedulerSupport="true">
<networkConnectors>
<networkConnector name="default-nc" prefetchSize="10" uri="multicast://default" />
</networkConnectors>
<transportConnectors>
 <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"  rebalanceClusterClients="true" updateClusterClients="true" discoveryUri="multicast://default"/>
</transportConnectors>

当我在 node-infra 上启动容器 activemq 和在 node-infra2 上启动 activemq 时。 即使我启用了多播发现,两个容器都无法相互建立连接。日志中没有错误,但感觉不到还有另一个启用了多播发现的activemq容器。

当我在没有容器的情况下直接在 vm 上进行此设置时,它按预期工作,两个 activemq 实例通过多播网络共享消息。但 docker 容器不会发生这种情况。

有人可以帮忙吗?让我知道是否需要更多信息才能重现。

【问题讨论】:

    标签: docker activemq swarm


    【解决方案1】:

    Docker 覆盖网络不支持多播。看起来您的代理依赖多播来查找其他活动节点。

    另见Multicast with Docker Swarm and overlay network

    【讨论】:

    • 谢谢。所以在我们得到 docker 的支持之前,我现在不使用多播。
    • 有支持多播的 Docker 网络插件 (?)。我没用过。
    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多