Artemis 复制备份不会故障恢复
Artemis replication backup does not failback
我有三台“复制”模式的服务器,一台是主服务器,两台是从服务器。
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。有谁知道我可能做错了什么?
故障回复仅适用于 live/backup 对。它不适用于 live/backup/备份三元组。
在您的用例中有 3 个代理实例 - 一个是实时的,两个是备份的。但是,备份服务器仅由一台活动服务器拥有。这意味着当 3 个代理实例启动时,将有 1 个实时备份对和一个“剩余”备份,后者将处于一种空闲状态,等待附加到没有备份的实时代理。然后,如果实时代理失败,实时代理的备份将接管并变为实时,另一个备份现在将成为刚刚变为实时的服务器的备份。一旦失败的代理实例重新启动,它将尝试将自己注册为现存代理的备份并启动故障回复。但是,由于现存代理已经有一个备份,它将拒绝来自原始活动的注册消息,因为它已经有一个备份,因此不会发生故障恢复。
需要说明的是,一个 live 一次只能复制到一个 单个 备份。我不太清楚多个备份有什么好处,因为它们会阻止故障恢复工作。
我有三台“复制”模式的服务器,一台是主服务器,两台是从服务器。
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。有谁知道我可能做错了什么?
故障回复仅适用于 live/backup 对。它不适用于 live/backup/备份三元组。
在您的用例中有 3 个代理实例 - 一个是实时的,两个是备份的。但是,备份服务器仅由一台活动服务器拥有。这意味着当 3 个代理实例启动时,将有 1 个实时备份对和一个“剩余”备份,后者将处于一种空闲状态,等待附加到没有备份的实时代理。然后,如果实时代理失败,实时代理的备份将接管并变为实时,另一个备份现在将成为刚刚变为实时的服务器的备份。一旦失败的代理实例重新启动,它将尝试将自己注册为现存代理的备份并启动故障回复。但是,由于现存代理已经有一个备份,它将拒绝来自原始活动的注册消息,因为它已经有一个备份,因此不会发生故障恢复。
需要说明的是,一个 live 一次只能复制到一个 单个 备份。我不太清楚多个备份有什么好处,因为它们会阻止故障恢复工作。