首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >备份生效时ActiveMQ Artemis主从错误

备份生效时ActiveMQ Artemis主从错误
EN

Stack Overflow用户
提问于 2022-03-08 16:51:57
回答 1查看 241关注 0票数 0

我有一个主从设置与一个主人和两个奴隶。当我杀死主人时,其中一个奴隶试图成为主人,但失败了,但有以下例外:

代码语言:javascript
复制
2022/03/08 16:13:28.746 | mb | ERROR | 1-156 | o.a.a.a.c.server                         |                                      | AMQ224000: Failure in initialisation: java.lang.IndexOutOfBoundsException: length(32634) exceeds src.readableBytes(32500) where src is: UnpooledHeapByteBuf(ridx: 78, widx: 32578, cap: 32578/32578)
    at io.netty.buffer.AbstractByteBuf.checkReadableBounds(AbstractByteBuf.java:643)
    at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1095)
    at org.apache.activemq.artemis.core.message.impl.CoreMessage.reloadPersistence(CoreMessage.java:1207)
    at org.apache.activemq.artemis.core.message.impl.CoreMessagePersister.decode(CoreMessagePersister.java:85)
    at org.apache.activemq.artemis.core.message.impl.CoreMessagePersister.decode(CoreMessagePersister.java:28)
    at org.apache.activemq.artemis.spi.core.protocol.MessagePersister.decode(MessagePersister.java:120)
    at org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.decodeMessage(AbstractJournalStorageManager.java:1336)
    at org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.lambda$loadMessageJournal$1(AbstractJournalStorageManager.java:1035)
    at org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList$SparseArray.clear(SparseArrayLinkedList.java:114)
    at org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList.clearSparseArrayList(SparseArrayLinkedList.java:173)
    at org.apache.activemq.artemis.utils.collections.SparseArrayLinkedList.clear(SparseArrayLinkedList.java:227)
    at org.apache.activemq.artemis.core.persistence.impl.journal.AbstractJournalStorageManager.loadMessageJournal(AbstractJournalStorageManager.java:990)
    at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.loadJournals(ActiveMQServerImpl.java:3484)
    at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.initialisePart2(ActiveMQServerImpl.java:3149)
    at org.apache.activemq.artemis.core.server.impl.SharedNothingBackupActivation.run(SharedNothingBackupActivation.java:325)
    at org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl$ActivationThread.run(ActiveMQServerImpl.java:4170)

我还观察到了很多类似这样的信息:

代码语言:javascript
复制
2022/03/08 16:13:28.745 | AMQ224009: Cannot find message 36,887,402,768
2022/03/08 16:13:28.745 | AMQ224009: Cannot find message 36,887,402,768

主设置:

代码语言:javascript
复制
<ha-policy>
   <replication>
      <master>
         <check-for-live-server>true</check-for-live-server>
      </master>
   </replication>
</ha-policy>
<connectors>
   <connector name="connector-server-0">tcp://172.16.134.51:62616</connector>
   <connector name="connector-server-1">tcp://172.16.134.52:62616</connector>
   <connector name="connector-server-2">tcp://172.16.134.28:62616</connector>
</connectors>
<acceptors>
   <acceptor name="netty-acceptor">tcp://172.16.134.51:62616</acceptor>
   <acceptor name="invm">vm://0</acceptor>
</acceptors>
<cluster-connections>
   <cluster-connection name="my-cluster">
      <connector-ref>connector-server-0</connector-ref>
      <retry-interval>500</retry-interval>
      <use-duplicate-detection>true</use-duplicate-detection>
      <message-load-balancing>ON_DEMAND</message-load-balancing>
      <max-hops>1</max-hops>
      <static-connectors>
         <connector-ref>connector-server-1</connector-ref>
         <connector-ref>connector-server-2</connector-ref>
      </static-connectors>
   </cluster-connection>
</cluster-connections>

从1安装:

代码语言:javascript
复制
<ha-policy>
   <replication>
      <slave>
         <allow-failback>true</allow-failback>
      </slave>
   </replication>
</ha-policy>
<connectors>
   <connector name="connector-server-0">tcp://172.16.134.51:62616</connector>
   <connector name="connector-server-1">tcp://172.16.134.52:62616</connector>
   <connector name="connector-server-2">tcp://172.16.134.28:62616</connector>
</connectors>
<acceptors>
   <acceptor name="netty-acceptor">tcp://172.16.134.52:62616</acceptor>
   <acceptor name="invm">vm://0</acceptor>
</acceptors>
<cluster-connections>
   <cluster-connection name="cluster">
      <connector-ref>connector-server-1</connector-ref>
      <retry-interval>500</retry-interval>
      <use-duplicate-detection>true</use-duplicate-detection>
      <message-load-balancing>ON_DEMAND</message-load-balancing>
      <max-hops>1</max-hops>
      <static-connectors>
         <connector-ref>connector-server-0</connector-ref>
         <connector-ref>connector-server-2</connector-ref>
      </static-connectors>
   </cluster-connection>
</cluster-connections>

奴隶2

代码语言:javascript
复制
<ha-policy>
   <replication>
      <slave>
         <allow-failback>true</allow-failback>
      </slave>
   </replication>
</ha-policy>
<connectors>
   <connector name="connector-server-0">tcp://172.16.134.51:62616</connector>
   <connector name="connector-server-1">tcp://172.16.134.52:62616</connector>
   <connector name="connector-server-2">tcp://172.16.134.28:62616</connector>
</connectors>
<acceptors>
   <acceptor name="netty-acceptor">tcp://172.16.134.28:62616</acceptor>
   <acceptor name="invm">vm://0</acceptor>
</acceptors>
<cluster-connections>
  <cluster-connection name="cluster">
      <connector-ref>connector-server-2</connector-ref>
      <retry-interval>500</retry-interval>
      <use-duplicate-detection>true</use-duplicate-detection>
      <message-load-balancing>ON_DEMAND</message-load-balancing>
      <max-hops>1</max-hops>
      <static-connectors>
         <connector-ref>connector-server-0</connector-ref>
         <connector-ref>connector-server-1</connector-ref>
      </static-connectors>
   </cluster-connection>
</cluster-connections>

你能告诉我我的设置有什么不对吗?我正在使用activemq-artemis版本2.17.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-08 21:01:08

我建议您升级到最新发布并重试。

此外,我建议将配置简化为只使用单个活动/备份对。代理将只向另一个代理复制数据。第二个备份将完全空闲,直到主备份或当前备份失败。

最后,在replication ha-policy中使用单个活动/备份对是非常危险的,因为存在裂脑的可能性。我强烈建议您使用共享存储,或者一旦您进入最新版本,您就可以使用可插入法定人数投票配置ZooKeeper,以降低拆分大脑的风险。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71398680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档