HA群集ActiveMQ Artemis的正确配置

时间:2019-10-29 11:09:10

标签: high-availability activemq-artemis

我是ActiveMQ Artemis的新手,请社区检查我是否正确配置了HA代理集群,或者我应该以其他方式进行配置,因为我没有找到关于此案例的详细教程。所有代理都在同一台计算机上运行。

场景

#include <arpa/inet.h> ... char address[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &my_sockaddr_in.sin_addr, address, sizeof(address)); 端口上有一个主节点,而端口6161761618上有两个从节点(slave1,slave2)。如果主节点死亡,则其中一个从节点将变为活动状态(复制模式)。

使用者有必要与群集进行“黑箱”通信。我的意思是说,更改主服务器(即,当主服务器去世时)不会对使用者产生任何影响(即,它与集群的连接方式)。

我设法做到的(据我所知,在这种情况下,我们应该仅配置集群,接受者和连接器属性,因此,我仅附加了代理配置的这一部分):

主经纪人:

61619

从属1代理,群集配置与主服务器相同(通过控制台--clustered通过控制台创建节点时自动配置)

<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>

从站2代理,群集配置与主服务器相同(通过控制台--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>

使用者中的JNDI配置:

<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>

我的配置有效,但是我不确定它是否正确。

我还发现了类似的question使用静态连接器。他们在做什么?我不明白他们的工作方式。还是这是我正在寻找的正确配置方式?

1 个答案:

答案 0 :(得分:1)

首先要注意的是,由于存在“裂脑”的风险,使用单个实时/备份对(甚至实时/备份/备份三元组)进行网络复制非常危险。我建议您将1个活动/备份对与共享存储一起使用,或将3个活动/备份对与复制一起使用(这将允许建立适当的仲裁)。阅读the documentation about split brain了解更多详情。

除了存在裂脑的风险外,代理配置看起来还不错。 clusteringHA文档中介绍了大多数(如果不是全部)配置详细信息。代理附带了很多示例,其中许多示例专门针对集群和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多播的环境中,建议您使用发现/广播组配置而不是静态发现。

通常,如果一切正常,那么您的配置就可以了。