replication - 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。有谁知道我可能做错什么?
解决方案
故障恢复仅适用于实时/备份对。它不适用于实时/备份/备份三元组。
在您的用例中,有 3 个代理实例 - 一个是实时的,另一个是备份的。但是,备份服务器仅归一台实时服务器所有。这意味着当 3 个代理实例启动时,将有 1 个实时备份对和一个“剩余”备份,它将处于一种空闲状态,等待连接到没有备份的实时代理。然后,如果活动代理失败,活动代理的备份将接管并变为活动,另一个备份现在将成为刚刚变为活动的服务器的备份。一旦失败的代理实例重新启动,它将尝试将自己注册为现在活动代理的备份并启动故障恢复。但是,由于现在在线的代理已经有备份,它将拒绝来自原始实时的注册消息,因为它已经有备份,
需要明确的是,live 一次只能复制到一个备份。鉴于多个备份可以防止故障恢复工作,我并不清楚它们有什么好处。
推荐阅读
- r - 如果向量包含 NA 和 0,则总和为 0?
- php - 如果订单未取消,则 4 小时后向物流中心发送 woocommerce 订单的自定义提醒电子邮件
- javascript - 如何解决 Redux 表单图片上传和裁剪问题的状态?
- linux - 如果从自定义脚本执行 poweroff 命令,initramfs 会停止
- python - ValueError 试图从列表中的熊猫数据框中删除元素
- react-native - React Native Flatlist 单选渲染错误只读
- jq - jq - 合并具有相同键/值的对象的值并将它们添加到相关对象的数组中
- c - C中的简单函数,用于反转指针引用的字符串
- google-bigquery - 有没有办法计算 SQL/Google BigQuery 中最近的连续销售?
- python - 如何找到完全静音的音频文件