我是activemq-replicatedLevelDB的新手,所以基于我有限的理解,我可能会认错。
我正在使用zookeeper设置3个activemq实例,然后确定哪个activemq实例是AWS中的主实例。 Zookeeper部署在私有子网内,activemq部署在公有子网内,zookeeper和activemq通信没有问题。
出于安全目的:
问题/问题:我找不到可以将activemq实例配置到这些activemq实例相互通信的端口的位置。
问题原因:我需要限制这些activemq实例打开的可用端口。我不能简单地允许来自公共子网的所有访问
下面的端口限制示例
我正在使用安全组来限制AWS中的这些访问。我尝试允许所有端口可访问公共子网,这允许activemq知道其他activemq实例是活动的,并且它们能够选择主/从。从头开始每次设置后,端口45818都不是同一个端口。所以我认为这是随机的。
以下示例日志
Promoted to master
Using the pure java LevelDB implementation.
Master started: tcp://**.*.*.**:45818
一旦我删除了该端口设置(允许所有访问),我就得到了下面的stacktrace
Not enough cluster members have reported their update positions yet.
org.apache.activemq.leveldb.replicated.MasterElector
如果我对上面的堆栈跟踪的理解是正确的,它会告诉当前的activemq不知道是否存在其他activemq实例。所以我需要知道在检查其他activemq实例时如何配置这些activemq的端口,这样我就可以限制/允许访问。
这是我的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>
如果缺少任何信息,我会尽快更新这个问题。感谢
答案 0 :(得分:0)
这是一个提示,而不是一个合格的答案,但是太大而无法发表评论。
您使用bind="tcp:0.0.0.0:0"
配置了动态端口。我没有在此配置设置上使用固定端口,但配置文档说,您可以设置它。
绑定端口将用于与主服务器的复制协议,因此很明显,您无法将其关闭,但是只允许zk计算机在那里进行通信。
我没有分析经纪人之间的流量,但据我了解复制的LevelDB,ZK决定活跃的主人,而不是经纪人。因此,该端口上的经纪人之间不应该进行任何沟通。
外部代理地址是在配置文件的transportConnectors
部分的<broker>
元素上配置的,但我猜你已经覆盖了它。
我建议您将绑定配置为固定端口,并允许从ZK进行与该端口的通信,如果需要,还可以从群集伙伴进行通信。客户端只能访问传输端口。允许与ZK进行通信,应该是它。