当前位置: 首页 > 知识库问答 >
问题:

HA集群ActiveMQ Artemis的正确配置

皇甫伟彦
2023-03-14

我是ActiveMQ Artemis的新手,请社区检查一下我对HA cluster of brokers的配置是否正确,或者我应该以另一种方式配置它们,因为我还没有找到关于我的案例的详细教程。所有代理都在同一台机器上运行。

场景:

61617端口上有一个主节点,在6161861619端口上有两个从节点(slave1、slave2)。如果主节点死亡,则其中一个从节点变为活动(复制模式)。

使用者必须将集群作为一个“黑箱”与集群通信。我的意思是master的更改(即master死亡时)不会对consumer(即它连接到集群的方式)产生任何影响。

我所做的(正如我所理解的,在本例中,我们应该只配置集群、接受器和连接器属性,因此我只附加代理配置的这一部分):

经纪人大师:

<connectors>
    <connector name="artemis">tcp://localhost:61617</connector> 
</connectors>

<ha-policy>
    <replication>
        <master/>
    </replication>   
</ha-policy>

<acceptors>
    <acceptor name="artemis">tcp://localhost:61617</acceptor>
</acceptors>

<cluster-user>cluster</cluster-user>
<cluster-password>cluster</cluster-password>
<broadcast-groups>
    <broadcast-group name="bg-group1">
        <group-address>231.7.7.7</group-address>
        <group-port>9876</group-port>
        <broadcast-period>5000</broadcast-period>
        <connector-ref>artemis</connector-ref>
    </broadcast-group>
</broadcast-groups>
<discovery-groups>
    <discovery-group name="dg-group1">
        <group-address>231.7.7.7</group-address>
        <group-port>9876</group-port>
        <refresh-timeout>10000</refresh-timeout>
    </discovery-group>
</discovery-groups>
<cluster-connections>
    <cluster-connection name="my-cluster">
        <connector-ref>artemis</connector-ref>
        <message-load-balancing>ON_DEMAND</message-load-balancing>
        <max-hops>0</max-hops>
        <discovery-group-ref discovery-group-name="dg-group1"/>
    </cluster-connection>
</cluster-connections>

slave 1 broker集群conf与master相同(通过控制台创建节点时自动配置--clustered)

<ha-policy>
    <replication>
        <slave/>
    </replication>
</ha-policy>

<connectors>
    <connector name="artemis">tcp://localhost:61618</connector>
    <connector name="netty-live-connector">tcp://localhost:61617</connector>
</connectors>

<acceptors>
    <acceptor name="artemis">tcp://localhost:61618 </acceptor>
</acceptors>
<ha-policy>
    <replication>
        <slave/>
    </replication>
</ha-policy>

<connectors>
    <connector name="artemis">tcp://localhost:61619</connector>
    <connector name="netty-live-connector">tcp://localhost:61617</connector>
</connectors>

<acceptors>
    <acceptor name="artemis">tcp://localhost:61619</acceptor>
</acceptors>
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory
connectionFactory.ConnectionFactory=(tcp://localhost:61617?ha=true&retryInterval=1000&retryIntervalMultiplier=1.0&reconnectAttempts=10,tcp://localhost:61618?ha=true&retryInterval=1000&retryIntervalMultiplier=1.0&reconnectAttempts=10,tcp://localhost:61619?ha=true&retryInterval=1000&retryIntervalMultiplier=1.0&reconnectAttempts=10)

我的配置工作,但我不确定它是否是正确的方式,它应该是。

我也发现了使用静态连接器的类似问题。他们在干什么?我不明白它们是怎么工作的。或者可能是我正在寻找的正确的配置方式?

共有1个答案

柯曦
2023-03-14

首先要注意的是,在网络复制中使用单个Live/Backup对(甚至Live/Backup/Backup三重组)是危险的,因为有“分裂大脑”的风险。我建议您使用1个带有共享存储的Live/Backup对,或者使用3个带有复制的Live/Backup对(这将允许建立正确的仲裁)。阅读关于分裂大脑的文档以获得更多细节。

除了大脑分裂的风险之外,代理配置看起来还可以。集群和HA文档涵盖了大部分(如果不是全部)配置细节。broker附带了大量示例,其中许多都是特定于集群和HA的。

可以简化连接工厂URL。目前您有:

(tcp://localhost:61617?ha=true&retryInterval=1000&retryIntervalMultiplier=1.0&reconnectAttempts=10,tcp://localhost:61618?ha=true&retryInterval=1000&retryIntervalMultiplier=1.0&reconnectAttempts=10,tcp://localhost:61619?ha=true&retryInterval=1000&retryIntervalMultiplier=1.0&reconnectAttempts=10)
(tcp://localhost:61617,tcp://localhost:61618,tcp://localhost:61619)?ha=true&retryInterval=1000&retryIntervalMultiplier=1.0&reconnectAttempts=10

静态连接器通常用于不支持UDP多播的环境中。它允许手动配置集群成员。如果您所处的环境支持UDP多播,我建议您使用发现/广播组配置,而不是静态发现。

一般来说,如果一切都按照您希望的方式工作,这表明您的配置很好。

 类似资料:
  • 我正在尝试在kubernetes上部署高可用的flink集群。在下面的示例中,工作节点被复制,但我们只有一个主pod。 https://github.com/apache/flink-statefun 据我所知,有两种方法可以让job manager成为HA。 https://ci.apache.org/projects/flink/flink-docs-stable/ops/jobmanager

  • 下面是Broker.xml中artemis集群(3台服务器)的设置 我预计broker3在集群中就应该开始接收请求。

  • 我的应用程序使用以下ActiveMQ Artemis集群配置,因为我需要最少数量的节点和HA。 null null 对于分裂的大脑,我发现以下文件帮助 具体地说,当备份失去与其活动服务器的连接时,备份将变为活动状态。这可能是有问题的,因为这也可能是由于暂时的网络问题而发生的。为了解决这个问题,备份将尝试确定它是否仍然可以连接到群集中的其他服务器。如果它可以连接到一半以上的服务器,它将成为活动的,如

  • 我试图安装一个Flink HA群集(动物园管理员模式),但任务管理器找不到作业管理器。 这里我给你介绍一下建筑; 大师: 奴隶: flink-conf.yaml: 这里是任务管理器的日志,它试图连接到localhost而不是Machine1: PS.:/etc/hosts包含localhost、Machine1和Machine2 你能告诉我任务经理如何连接到工作经理吗? 当做

  • 我有一个Flink 1.2集群的设置,由3个JobManager1和2个TaskManager1组成。我从JobManager1开始动物园管理员法定人数,我得到确认,动物园管理员开始其他2个JobManager1,然后我在这个JobManager1上开始一个Flink作业。 flink-conf.yaml在所有5个虚拟机上都是相同的,这意味着jobmanager。rpc。地址:指向各处的JobMa

  • 本文档介绍了如何配置生产可用的 TiDB 集群。涵盖以下内容: 资源配置 部署前需要根据实际情况和需求,为 TiDB 集群各个组件配置资源,其中 PD、TiKV、TiDB 是 TiDB 集群的核心服务组件,在生产环境下它们的资源配置还需要按组件要求指定,具体参考:资源配置推荐。 为了保证 TiDB 集群的组件在 Kubernetes 中合理的调度和稳定的运行,建议为其设置 Guaranteed 级