Solr Cloud是否需要负载平衡器,例如Haproxy在主要失败中



我搜索了很多,但不幸的是,关于solr云有一些简单的困惑。可以说,我有三个系统,在同一三台计算机上配置的Solrcloud(1个主和2个从属(和外部Zookeeper来制作法定人数。系统名称为

  • 主人
  • 从属1
  • 公共front

公共前期是我配置haproxy的系统。它从www接收请求,并根据ACLS发送到后端服务器。

根据我的理解,如果我要求向Solr Collection(即主人(,它将其路由到奴隶,因此负载平衡。无需在此处指定奴隶。不是?

现在在公共场合,我是否应该将每个solr配置为一个单独的从属,或者只是为了加载余额。

现在,如果我仅将主系统配置为Haproxy中的Solr-server,则如果Solr-Server(Master(下降,那么我认为我无法从Haproxy获得Solr(尽管奴隶一直到上升,但在Haproxy中不配置(。

我在哪里错了,最好的方法是什么?

Solr Cloud中没有传统的masterslave-有一组复制品,其中一个被定义为领导者。领导者的选择是自动化的 - 即,第一个说它想成为领导者,获得该状态的复制品。这是根据收集状态。在您的示例中,有三个复制品,一个被设计为领导者。如果该复制品消失了,那么剩下的两个复制品之一就会成为新的领导者,一切正常。领导者的作用是成为索引的最新版本并处理任何更新 - 首先是其自己的索引,然后将这些更新路由到任何副本。

也有几种类型的副本,并不是所有这些都适合晋升为领导者 - 但在默认配置中,它们可以是。

这是事实 - 由于没有真正的主人,因此所有三个索引都包含相同的数据,并且它们都是同一碎片的复制品,因此不必通过主人来路由。如果您使用的是愚蠢的Haproxy,则可以安全地将请求放在所有三个节点中,并且他们应该能够在不联系任何其他节点的情况下回答查询(只要它们都包含集合的所有碎片(。

但是,如果您使用的是Solrj或其他具有Zookeeper的客户端(并使用Zookeeper兼容客户端(,则客户端将与Zookeeper保持联系,并为您的群集阅读状态信息。这使客户可以知道哪些服务器当前是您收集的复制品,并联系了可以决定具有查询所需信息的任何节点。在您的情况下,结果将是相同的,只是您的客户知道不连接到消失的任何节点,并且会自动知道添加到群集中的节点。

"一个solr节点路由请求到另一个节点"仅在您联系的节点没有任何您要查询的集合的副本时才相关获取该内容。在这种情况下,将会发生集群间请求,并且集群上的负载将比必要的略高。当集合复制到所有三个节点时 - 或使用Solrj时,该集群间请求不应发生。

相关内容

最新更新