具有复制的leveldb存储的最小activemq群集大小

具有复制的leveldb存储的最小activemq群集大小,activemq,apache-zookeeper,leveldb,Activemq,Apache Zookeeper,Leveldb,需要至少3个ActiveMQ实例和3个ZooKeeper服务器才能使用复制的LevelDB存储运行主/从设置,其基本原理是什么?如果要求是由ZooKeeper的使用造成的,它需要至少3台服务器,那么ZooKeeper需要至少3台服务器来提供可靠性的理由是什么 它是为了在网络分区的情况下(通过牺牲较小分区的可用性)保证一致性,就像在2节点主备份配置中一样,无法区分故障对等点还是两个节点位于不同的网络分区中 它是为了提供对拜占庭式故障的容忍度,在这种情况下,需要2f+1节点才能生存f个故障节点(考

需要至少3个ActiveMQ实例和3个ZooKeeper服务器才能使用复制的LevelDB存储运行主/从设置,其基本原理是什么?如果要求是由ZooKeeper的使用造成的,它需要至少3台服务器,那么ZooKeeper需要至少3台服务器来提供可靠性的理由是什么

  • 它是为了在网络分区的情况下(通过牺牲较小分区的可用性)保证一致性,就像在2节点主备份配置中一样,无法区分故障对等点还是两个节点位于不同的网络分区中
  • 它是为了提供对拜占庭式故障的容忍度,在这种情况下,需要2f+1节点才能生存f个故障节点(考虑到只有崩溃故障才需要f+1节点才能生存f个故障)
还是有其他原因


谢谢

Zookeeper需要至少3台服务器,因为它选择新的Activemq主机的方式。动物园管理员需要多数票(n/2+1)才能选出新的主人。如果没有多数,则不会选择主控,系统将失败。这与使用奇数个Zookeepers服务器的原因相同。(例如,3台服务器的故障率与4台服务器相同,因为大多数服务器仍然只能丢失1台服务器。)

对于Activemq,至少需要3台服务器源于消息的同步方式,以及当选择新的主服务器时,至少需要一个节点仲裁(N/2+1)才能识别最新的更新。ActiveMQ将与1个从属服务器同步消息,然后以“确定”响应。然后,它将与所有其他从机异步同步。如果节点出现故障时仲裁不存在,则Zookeeper无法区分哪个节点是最新更新的节点。这是最初只有2个节点时发生的情况,因此建议至少有3个节点

,在其工作原理下:

所有需要同步到磁盘的消息传递操作将在完成之前等待更新复制到节点的仲裁中。因此,如果使用replicas=“3”配置存储,则仲裁大小为(3/2+1)=2。主设备将在本地存储更新,并在报告成功之前等待另一个从设备存储更新。另一种考虑方法是,存储将对复制节点的仲裁执行同步复制,并对任何其他节点执行异步复制

当选择新的主节点时,您还需要至少一个在线节点仲裁,才能找到具有最新更新的节点。具有最新更新的节点将成为新的主节点。因此,建议您使用至少3个副本节点运行,这样您就可以在不中断服务的情况下关闭一个副本节点


谢谢-但是这并没有回答我的问题:谢谢-但是这并没有回答我的问题,例如,activemq的开发人员为什么选择将消息同步到节点的仲裁?是为了保证网络分区的一致性,还是仅仅因为zookeeper已经需要3台服务器?如果提供了可靠的网络,则可以实现主/从集群,这些集群可以在f崩溃故障中生存,前提是您有f+1进程,这显然比要求2f+1进程在f崩溃故障中生存要少得多。这是为了一致性。虽然我同意这在某些情况下没有完全意义,但他们选择新主机的默认算法需要n/2+1个可用节点。这一决定的部分原因是由于它们的同步机制,以及您至少需要2个节点来确定哪些节点具有最新消息。我认为,如果他们只需要在任何时候至少启动2个节点,这将更有意义,因此您最好进行故障转移,基本上n-2个节点可能会丢失。我相信他们有这样的理由。