问题摘要:-无法在docker swarm中创建具有两个活动activemq节点的设置。所以需要你的帮助来设置。以下是我试图创建的设置的详细信息。
详细信息:尝试在docker swarm设置中创建两个节点的activemq集群(而不是AMQ Artemis(。docker版本为19.03.12以下vm用于设置我的应用程序。
- node infra-这个vm是群领导者;activemq";集装箱
- node-infra2-这个vm是另一个集群领导者;activemq";集装箱
- node-app-这个vm是运行我的应用程序的工作节点
root@node-infra:~#docker节点ls
ID主机名状态可用性管理器状态引擎版本
ypzb7jmys3qzyea5r4r1te5b6节点应用程序就绪活动19.03.12
byuar7z0uphd01zluj9iy0n1*节点基础设施就绪活动领导者19.03.12
tvjzzlamc29gzrsnq3xn3e58w node-infra2 Ready Active Reachable 19.03.12
在此设置中创建了以下覆盖docker网络。docker网络创建--驱动程序=覆盖--子网=192.168.1.0/24--可连接的mynetwork
使用以下命令在两个节点基础节点中启动activemq容器。docker run-d--除非停止,否则重新启动--net mynetwork--日志选择模式=非阻塞--日志选择最大缓冲区大小=4m-p 61616:61616-p 8161:8161--名称activemq rmohr/activemq:5.15.3-alpine
其余条目为默认条目,但以下条目已更改。
activemq.xml条目如下所示,用于node infra node
<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&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&wireFormat.maxFrameSize=104857600" rebalanceClusterClients="true" updateClusterClients="true" discoveryUri="multicast://default"/>
</transportConnectors>
当我在nodeinfra上启动容器activemq,在node-infra2上启动activemq时。尽管我启用了多播发现,但两个容器都无法相互建立连接。日志中没有错误,但它并不意味着还有另一个启用了多播发现的activemq容器。
当我在没有容器的vm上直接进行此设置时,它可以像预期的那样工作,两个activemq实例都通过多播网络共享消息。但docker集装箱却没有。
有人能帮忙吗。如果需要复制更多信息,请告诉我。
Docker覆盖网络不支持多播。看起来您的代理依赖于多播来查找其他活动节点。
另请参阅Docker Swarm和覆盖网络的多播