【问题标题】:Network of ActiveMQ brokers using Multicast inside Kubernetes在 Kubernetes 中使用多播的 ActiveMQ 代理网络
【发布时间】:2020-07-15 16:29:51
【问题描述】:

我已经部署了带有 statefulset 对象的 ActiveMQ 代理 pod。 activeMQ的配置如下:

<networkConnectors>
  <networkConnector uri="multicast://default" dynamicOnly="true" networkTTL="3" duplex="true" prefetchSize="1" decreaseNetworkConsumerPriority="false" />
</networkConnectors>
<transportConnectors>
  <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
  <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600&amp;wireFormat.allowNonSaslConnections=true" discoveryUri="multicast://default"/>
</transportConnectors>

对于测试,只有 2 个 pod,activemq-0 和 activemq-1。使用 Wireshark 分析数据包表明多播发现正在工作。但是经纪人不会在他们之间转发消息。 这是 activemq-0 的日志:

    2020-07-14 09:17:32,943 | INFO  | Establishing network connection from vm://localhost to amqp://activemq-1.activemqsvc.default.svc.cluster.local:5672 | org.apache.activemq.network.DiscoveryNetworkConnector | Notifier-MulticastDiscoveryAgent-listener:DiscoveryNetworkConnector:NC:BrokerService[localhost]
2020-07-14 09:18:02,463 | WARN  | Transport Connection to: tcp://172.17.0.7:37174 failed: org.apache.activemq.transport.InactivityIOException: Channel was inactive for too (>30000) long: tcp://172.17.0.7:37174 | org.apache.activemq.broker.TransportConnection.Transport | AmqpInactivityMonitor Async Task: java.util.concurrent.ThreadPoolExecutor$Worker@54f96489[State = -1, empty queue]

【问题讨论】:

    标签: docker networking kubernetes activemq multicast


    【解决方案1】:

    并非所有 CNI 插件都支持多播。

    我知道支持它的一个 CNI 是 WeaveNet,所以你可能要考虑使用它。

    其他方法是使用:

    hostNetwork: true
    dnsPolicy: ClusterFirstWithHostNet
    

    this SO answer 建议的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2010-11-30
      • 2012-02-17
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多