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

时间:2016-10-21 12:17:50

标签: amazon-web-services activemq apache-zookeeper

我是activemq-replicatedLevelDB的新手,所以基于我有限的理解,我可能会认错。

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

出于安全目的:

问题/问题:我找不到可以将activemq实例配置到这些activemq实例相互通信的端口的位置。

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

下面的端口限制示例

  • 端口22应该打开以进行ssh访问
  • zookeeper客户端端口(2181)应该只对访问进行打开 来自这些activemq实例
  • 端口8161应该可以从特定来源访问

我正在使用安全组来限制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>

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

1 个答案:

答案 0 :(得分:0)

这是一个提示,而不是一个合格的答案,但是太大而无法发表评论。

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

绑定端口将用于与主服务器的复制协议,因此很明显,您无法将其关闭,但是只允许zk计算机在那里进行通信。

我没有分析经纪人之间的流量,但据我了解复制的LevelDB,ZK决定活跃的主人,而不是经纪人。因此,该端口上的经纪人之间不应该进行任何沟通。

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

我建议您将绑定配置为固定端口,并允许从ZK进行与该端口的通信,如果需要,还可以从群集伙伴进行通信。客户端只能访问传输端口。允许与ZK进行通信,应该是它。