首页 > 解决方案 > Artemis 复制备份不会故障回复

问题描述

我有三个“复制”模式服务器,一个是主服务器,两个是从服务器。

Master 启用了“check-for-live-server”。从站启用了“允许故障回复”。

故障转移工作正常,但是当主服务器再次可用时,等待至少 5 分钟后,从服务器仍然不执行自动故障回复。

下面是 HA 设置。

大师(192.168.102.55)broker.xml

    <connectors>
        <connector name="netty-connector">tcp://192.168.102.55:61616</connector>
    </connectors>

    <acceptors>
        <acceptor name="netty-acceptor">tcp://192.168.102.55:61616</acceptor>
    </acceptors>

    <cluster-user>user</cluster-user>
      <cluster-password>password</cluster-password>

      <broadcast-groups>
         <broadcast-group name="bg-group">
            <group-address>231.7.7.7</group-address>
            <group-port>9876</group-port>
            <broadcast-period>5000</broadcast-period>
            <connector-ref>netty-connector</connector-ref>
         </broadcast-group>
      </broadcast-groups>

      <discovery-groups>
         <discovery-group name="dg-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>netty-connector</connector-ref>
            <message-load-balancing>ON_DEMAND</message-load-balancing>
            <max-hops>2</max-hops>
            <discovery-group-ref discovery-group-name="dg-group"/>
         </cluster-connection>
      </cluster-connections>

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

奴隶(192.168.102.53)broker.xml

    <connectors>
        <connector name="netty-connector">tcp://192.168.102.53:61616</connector>
    </connectors>

    <acceptors>
        <acceptor name="netty-acceptor">tcp://192.168.102.53:61616</acceptor>
    </acceptors>

    <cluster-user>user</cluster-user>
    <cluster-password>password</cluster-password>

     <broadcast-groups>
         <broadcast-group name="bg-group">
            <group-address>231.7.7.7</group-address>
            <group-port>9876</group-port>
            <broadcast-period>5000</broadcast-period>
            <connector-ref>netty-connector</connector-ref>
         </broadcast-group>
      </broadcast-groups>

      <discovery-groups>
         <discovery-group name="dg-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>netty-connector</connector-ref>
            <message-load-balancing>ON_DEMAND</message-load-balancing>
            <max-hops>2</max-hops>
            <discovery-group-ref discovery-group-name="dg-group"/>
         </cluster-connection>
      </cluster-connections>

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

我使用的 Artemis 版本是 2.11.0。有谁知道我可能做错什么?

标签: replicationhigh-availabilityactivemq-artemis

解决方案


故障恢复仅适用于实时/备份对。它不适用于实时/备份/备份三元组。

在您的用例中,有 3 个代理实例 - 一个是实时的,另一个是备份的。但是,备份服务器仅归一台实时服务器所有。这意味着当 3 个代理实例启动时,将有 1 个实时备份对和一个“剩余”备份,它将处于一种空闲状态,等待连接到没有备份的实时代理。然后,如果活动代理失败,活动代理的备份将接管并变为活动,另一个备份现在将成为刚刚变为活动的服务器的备份。一旦失败的代理实例重新启动,它将尝试将自己注册为现在活动代理的备份并启动故障恢复。但是,由于现在在线的代理已经有备份,它将拒绝来自原始实时的注册消息,因为它已经有备份,

需要明确的是,live 一次只能复制到一个备份。鉴于多个备份可以防止故障恢复工作,我并不清楚它们有什么好处。


推荐阅读