ActiveMQ artemis - 集群和备份投票是如何工作的?

问题描述 投票:0回答:0

我有一个关于 ActiveMQ artemis bakeup voting 的问题。

文档中说这个角色在集群中至少需要3对live/backup节点。 对于一个 3 节点的集群,如果它得到 2 票表示它的实时服务器不再可用,它将启动,对于 4 个节点,这将是 3 票,依此类推。

在我的环境中,集群中有 2 对活动/备份节点:

师傅:

<ha-policy>
     <replication>
        <master>
           <vote-on-replication-failure>true</vote-on-replication-failure>
           <check-for-live-server>true</check-for-live-server>
        </master>
     </replication>
  </ha-policy>

奴隶:

<ha-policy>
     <replication>
        <slave>
           <allow-failback>true</allow-failback>
        </slave>
     </replication>
  </ha-policy>

经纪人图: https://i.stack.imgur.com/XH5Gf.png

以我有限的经验,脑裂只发生在一个master集群中,就像zookeeper一样。 我的问题如下:

  1. 我的集群会出现裂脑吗?
  2. 投票何时以及如何开始运作?
  3. 如果一个副本失去了与实时代理的复制连接, 只有主节点投票吗?

然后我用核心api测试我的集群,有一个现象,我在主节点(A)上创建了一个队列, 另一个主节点(B)没有相同的队列,然后我使用queueQuery函数找到队列,如果连接在节点(B)上它返回false,所以我的生产者连接到节点(B)不能向集群发送任何消息。

当我使用ServerLocator连接集群时,它会随机选择一个master节点连接,所以我只有一个master节点信息,无法获取其他master节点的任何信息,所以我必须在每个master上创建队列节点,但是如果两个主节点上的队列中都有消息,则消费者只会从其中一个节点接收消息,而永远不会消费另一个主节点上的消息。这是正常现象吗?

我的集群配置如下:

<address-setting match="#">
        <dead-letter-address>DLQ</dead-letter-address>
        <expiry-address>ExpiryQueue</expiry-address>
        <redelivery-delay>0</redelivery-delay>
        <redistribution-delay>0</redistribution-delay>
        <!-- with -1 only the global-max-size is in use for limiting -->
        <max-size-bytes>-1</max-size-bytes>
        <message-counter-history-day-limit>10</message-counter-history-day-limit>
        <address-full-policy>PAGE</address-full-policy>
        <auto-create-queues>true</auto-create-queues>
        <auto-create-addresses>true</auto-create-addresses>
        <auto-create-jms-queues>true</auto-create-jms-queues>
        <auto-create-jms-topics>true</auto-create-jms-topics>
        <auto-delete-queues>false</auto-delete-queues>
        <auto-delete-addresses>false</auto-delete-addresses>
     </address-setting>

<broadcast-groups>
     <broadcast-group name="my-broadcast-group">
        <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="my-discovery-group">
        <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="my-discovery-group"/>
     </cluster-connection>
  </cluster-connections>

我很想知道主节点如何相互通信?

cluster-computing voting artemis
© www.soinside.com 2019 - 2024. All rights reserved.