如何配置 activemq-replicatedLevelDB 以配置实例连接到 master/slave 的特定端口

How to configure activemq-replicatedLevelDB to configure instance to connect to specific port of master/slave

我是 activemq-replicatedLevelDB 的新手,所以根据我有限的理解,我可能会认为事情是错误的。

我正在使用 zookeeper 设置 3 个 activemq 实例,然后确定 activemq 实例中的哪个是 AWS 中的主实例。 Zookeeper部署在私有子网内,activemq部署在public子网内,zookeeper和activemq通信没有问题。

出于安全目的:

Question/Issue: 我找不到在哪里可以配置 activemq 实例,这些 activemq 实例应该相互通信到哪个端口。

问题原因: 我需要限制这些 activemq 实例打开的可用端口。而且我不能简单地允许来自 public 子网

的所有访问

端口限制示例如下

我正在使用安全组来限制 AWS 中的这些访问。我尝试允许所有端口都可以通过 public 子网访问,这允许 activemq 知道其他 activemq 实例处于活动状态,并且它们能够选择 master/slaves。每次从头开始设置后,端口 45818 都不是同一个端口。所以我假设这是随机的。

下面的示例日志

Promoted to master
Using the pure java LevelDB implementation.
Master started: tcp://**.*.*.**:45818

删除该端口设置(允许所有访问)后,我得到了以下堆栈跟踪

Not enough cluster members have reported their update positions yet.
 org.apache.activemq.leveldb.replicated.MasterElector

如果我对上面stacktrace的理解是正确的,那就说明当前activemq不知道其他activemq实例的存在。所以我需要知道在检查其他 activemq 实例时如何配置这些 activemq 的端口,以便我可以 restrict/allow 访问。

这里是我的activemq配置指向zookeeper地址。其他配置为默认值。

activemq版本:5.13.4

<persistenceAdapter>
        <replicatedLevelDB directory="activemq-data"
            replicas="3"
            bind="tcp://0.0.0.0:0"
            zkAddress="testzookeeperip1:2181,testzookeeperip2:2181,testzookeeperip3:2181"
            hostname="testhostnameofactivemqinstance"
        />
    </persistenceAdapter>

如果有任何信息缺失,我会尽快更新这个问题。谢谢

这与其说是一个合格的答案,不如说是一个提示,但太大而无法评论。

您使用 bind="tcp:0.0.0.0:0" 配置了动态端口。我没有在此配置设置上使用固定端口,但配置文档说,您可以设置它。

绑定端口将用于与master的复制协议,所以很明显,你不能切断它,但只允许zk机器在那里通信应该没问题。

我没有分析代理之间的流量,但据我了解复制的 LevelDB,ZK 决定活动主服务器,而不是代理。因此,该端口上的代理之间应该没有通信。

外部代理地址是在配置文件 <broker> 部分的 transportConnectors 元素上配置的,但我想你已经涵盖了。

我建议,您将绑定配置到一个固定端口,并允许从 ZK 和集群合作伙伴(如果需要)到该端口进行通信。客户端只能访问传输端口。允许与 ZKs 通信,应该就是这样。