HA 集群 ActiveMQ Artemis 的正确配置
Right configuration for HA cluster ActiveMQ Artemis
我是 ActiveMQ Artemis 的新手,请社区检查我是否正确配置了 HA 代理集群,或者我应该以其他方式配置它们,因为我没有找到关于我的案例的详细教程。所有代理 运行 在同一台机器上。
场景:
61617
端口上有一个主节点,61618
和61619
端口上有两个从节点(slave1,slave2)。如果主节点死亡,其中一个从节点变为活动节点(复制模式)。
消费者有必要作为 "black-box" 与集群通信。我的意思是 master 的变化(即当 master 死亡时)不应该对消费者有任何影响(即它连接到集群的方式)。
我设法做了什么(据我所知,对于这种情况,我们应该只配置集群、接受器和连接器属性,因此我只附上这部分代理配置):
经纪人大师:
<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 cluster 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>
slave 2 broker cluster conf与master相同(通过控制台--clustered创建节点时自动配置)
<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>
消费者中的 JNDI 配置:
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)
我的配置有效,但我不确定它是否正确。
我还发现了使用静态连接器的类似 question。他们在做什么?我不明白他们是如何工作的。或者这可能是我正在寻找的正确配置方式?
首先要注意的是,使用单个 live/backup 对(甚至 live/backup/备份三元组)进行网络复制是危险的,因为 "split-brain." 我会建议您使用 1 live/backup 对共享存储或 3 live/backup 对复制(这将允许建立适当的法定人数)。阅读 the documentation about split brain 了解更多详情。
除了脑裂的风险外,代理配置看起来还不错。大多数(如果不是全部)配置细节都包含在 clustering and HA 文档中。代理也附带了大量示例,其中许多特定于集群和 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 多播的环境中,我建议您使用 discovery/broadcast 组配置而不是静态发现。
一般来说,如果一切都按您希望的方式工作,则表明您的配置没有问题。
我是 ActiveMQ Artemis 的新手,请社区检查我是否正确配置了 HA 代理集群,或者我应该以其他方式配置它们,因为我没有找到关于我的案例的详细教程。所有代理 运行 在同一台机器上。
场景:
61617
端口上有一个主节点,61618
和61619
端口上有两个从节点(slave1,slave2)。如果主节点死亡,其中一个从节点变为活动节点(复制模式)。
消费者有必要作为 "black-box" 与集群通信。我的意思是 master 的变化(即当 master 死亡时)不应该对消费者有任何影响(即它连接到集群的方式)。
我设法做了什么(据我所知,对于这种情况,我们应该只配置集群、接受器和连接器属性,因此我只附上这部分代理配置):
经纪人大师:
<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 cluster 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>
slave 2 broker cluster conf与master相同(通过控制台--clustered创建节点时自动配置)
<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>
消费者中的 JNDI 配置:
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)
我的配置有效,但我不确定它是否正确。
我还发现了使用静态连接器的类似 question。他们在做什么?我不明白他们是如何工作的。或者这可能是我正在寻找的正确配置方式?
首先要注意的是,使用单个 live/backup 对(甚至 live/backup/备份三元组)进行网络复制是危险的,因为 "split-brain." 我会建议您使用 1 live/backup 对共享存储或 3 live/backup 对复制(这将允许建立适当的法定人数)。阅读 the documentation about split brain 了解更多详情。
除了脑裂的风险外,代理配置看起来还不错。大多数(如果不是全部)配置细节都包含在 clustering and HA 文档中。代理也附带了大量示例,其中许多特定于集群和 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 多播的环境中,我建议您使用 discovery/broadcast 组配置而不是静态发现。
一般来说,如果一切都按您希望的方式工作,则表明您的配置没有问题。