Jms 警告:网络上有多台服务器广播相同的节点id

Jms 警告:网络上有多台服务器广播相同的节点id,jms,activemq-artemis,Jms,Activemq Artemis,我有一个由三个ActiveMQ代理组成的集群,它们在不同的机器上运行。现在,我看到一个警告反复声明如下 2020-06-17 10:40:07,378 WARN [org.apache.activemq.artemis.core.client] AMQ212034: There are more than one servers on the network broadcasting the same node id. You will see this message exactly onc

我有一个由三个ActiveMQ代理组成的集群,它们在不同的机器上运行。现在,我看到一个警告反复声明如下

2020-06-17 10:40:07,378 WARN  [org.apache.activemq.artemis.core.client] AMQ212034: There are more than one servers on the network broadcasting the same node id. You will see this message exactly once (per node) if a node is restarted, in which case it can be safely ignored. But if it is logged continuously it means you really do have more than one node on the same network active concurrently with the same node id. This could occur if you have a backup node active at the same time as its live node. nodeID=03451127-a9c9-11ea-992a-005056ad92be
下面是master's broker.xml的一个片段:

tcp://10.5.100.1:61616 10.5.100.1 231.7.7.7 9876 10000 nettyartemis 500 符合事实的 严格的 1. 10.5.100.1 5432 231.7.7.7 9876 2000 nettyartemis 下面是slave的broker.xml的一个片段:

tcp://10.5.100.2:61616 10.5.100.2 231.7.7.7 9876 10000 nettyartemistwo 500 符合事实的 严格的 1. 10.5.100.2 5432 231.7.7.7 9876 2000 nettyartemistwo
知道我为什么会收到此警告吗?

当代理实例第一次启动时,它会初始化其日志。代理在此初始化阶段所做的一件事是生成一个UUID,该UUID将用于为集群之类的事情唯一地标识代理。这称为节点id

通常,当用户看到网络上有多台服务器广播相同的节点id时,表示他们已手动将一个代理的日志复制到另一个代理。这通常是在用户最初配置代理群集时完成的,因为他们希望复制配置,而不是在每个节点上从头开始。但是,不只是将broker.xml复制到另一个节点,而是复制整个日志,并且由于日志包含唯一的节点id,因此两个代理最终使用相同的id

这种情况下的解决方案是从记录此消息的代理之一中删除默认情况下存储在数据目录中的日志。一旦代理重新启动,日志将重新初始化,并创建一个新的节点id

如果已配置HA且主设备和从设备同时处于活动状态,也可以记录此警告消息。主节点和从节点自然共享相同的节点ID,因为它们通过共享存储或复制拥有相同的日志。然而,只有一个经纪人应该是活跃的。如果两个经纪人都是活跃的,那就叫做分裂大脑。这种情况可能是非常有问题的,因为两个经纪人将在相同的日记账数据上独立操作。这可能会导致重复的消息以及看似丢失的消息,并且恢复数据的完整性即使不是不可能,也是极其困难的

在共享存储配置中,共享存储本身减轻了由于日志上的共享文件锁定而导致的大脑分裂风险。物理上只允许一个代理访问日志数据

然而,在复制配置中,大脑分裂的风险要高得多,特别是因为主设备和从设备都有自己的数据副本。如果主设备和从设备之间的网络连接出现故障,则从设备无法真正确定主设备是否确实死亡,或者是否只是网络问题。这就是为什么。这允许建立适当的仲裁,以便实时集群成员可以投票决定适当的故障转移


我还看到,您没有在主代理上设置true,这可能会导致在发生故障转移的简单情况下出现大脑分裂,并且您在不首先关闭从代理的情况下重新启动主代理。如果不为true,主代理将直接启动,而不检查其他代理(例如,其备份是否正在广播其节点id)。

当代理实例首次启动时,它将初始化其日志。代理在此初始化阶段所做的一件事是生成一个UUID,该UUID将用于为集群之类的事情唯一地标识代理。这称为节点id

通常,当用户看到网络上有多台服务器广播相同的节点id时,表示他们已手动将一个代理的日志复制到另一个代理。这通常是在用户最初配置代理群集时完成的,因为他们希望复制配置,而不是在每个节点上从头开始。但是,不只是将broker.xml复制到另一个节点,而是复制整个日志,并且由于日志包含唯一的节点id,因此两个代理最终使用相同的id

这种情况下的解决方案是从记录此消息的代理之一中删除默认情况下存储在数据目录中的日志。一旦代理重新启动,日志将重新初始化,并创建一个新的节点id

如果已配置HA且主设备和从设备同时处于活动状态,也可以记录此警告消息。主节点和从节点自然共享相同的节点ID,因为它们具有相同的日志 通过共享存储或复制。然而,只有一个经纪人应该是活跃的。如果两个经纪人都是活跃的,那就叫做分裂大脑。这种情况可能是非常有问题的,因为两个经纪人将在相同的日记账数据上独立操作。这可能会导致重复的消息以及看似丢失的消息,并且恢复数据的完整性即使不是不可能,也是极其困难的

在共享存储配置中,共享存储本身减轻了由于日志上的共享文件锁定而导致的大脑分裂风险。物理上只允许一个代理访问日志数据

然而,在复制配置中,大脑分裂的风险要高得多,特别是因为主设备和从设备都有自己的数据副本。如果主设备和从设备之间的网络连接出现故障,则从设备无法真正确定主设备是否确实死亡,或者是否只是网络问题。这就是为什么。这允许建立适当的仲裁,以便实时集群成员可以投票决定适当的故障转移


我还看到,您没有在主代理上设置true,这可能会导致在发生故障转移的简单情况下出现大脑分裂,并且您在不首先关闭从代理的情况下重新启动主代理。如果不为true,主代理将直接启动,而不检查其他代理(例如,其备份是否正在广播其节点id)。

为什么复制日志?主机停机并重新启动时是否会出现这种情况?因为这可能是一个实际的案例,这是否意味着每当大师倒下时,就必须有人删除这些日记?我更新了我的答案,希望能解释得更好。谢谢贾斯汀Bertram@JustinBertram客户机java是否有办法了解主动/主动场景?我不确定您的意思。无论如何,这个答案已经被问题的原始作者标记为正确。我建议你问一个新问题:为什么要复制期刊?主机停机并重新启动时是否会出现这种情况?因为这可能是一个实际的案例,这是否意味着每当大师倒下时,就必须有人删除这些日记?我更新了我的答案,希望能解释得更好。谢谢贾斯汀Bertram@JustinBertram客户机java是否有办法了解主动/主动场景?我不确定您的意思。无论如何,这个答案已经被问题的原始作者标记为正确。我建议你问一个新问题。