我想知道如何在SolrCloud之上设置负载均衡器或者不需要负载均衡器?
如果是前者,需要将分片领导者添加到负载均衡器中?那么如果碎片领导者出于某种原因而改变呢?或者,是否可以将群集中的所有计算机(包括副本)添加到负载均衡器中?
如果是后者,我猜cname需要指向SolrCloud集群,它应该是循环DNS吗?
来自一些实际的Solrcloud操作经验的任何建议都会非常适合。
答案 0 :(得分:6)
通常SolrCloud与ZooKeeper结合使用,客户端使用CloudSolrServer访问SolrCloud。
查询将在以下流程中完成。
请注意,我只是部分阅读了Solr的源代码,并且有很多猜测。我读到的也是Solr 4.1的源代码,所以它可能已经过时了。
IPAddress:Port
列表。CloudSolrServer
的实例从ZooKeeper中检索服务器列表。CloudSolrServer
的实例随机选择一个SolrCloud服务器并向其发送查询。 (另外LBHttpSolrServer在循环中选择服务器?)更新将以与上述相同的方式完成,但也会填充到所有服务器。
请注意,对于SolrCloud,领导者和副本的差异很小,我们可以向任何服务器发送查询/更新。它会自动重定向到其他服务器。
简而言之,负载均衡是在客户端和服务器端完成的。 所以你不必担心它。
答案 1 :(得分:4)
A Load Balancer is needed and would be implemented by Zookeeper used in conjunction with SolrCloud.
When you use SolrCloud you must setup sharding and replication through the use of Zookeeper either using the embedded Zookeeper server that comes bundled with SolrCloud or you use a stand-alone Zookeeper ensemble (which is recommended for redundancy).
Then you would use SolrCloudClient to send your queries to Zookeeper which will then forward your query to the correct shard among your cluster. SolrCloudClient will require the name and address of all your Zookeeper instances upon instantiation and your Load-Balancing will be handled as appropriate from there.
Please see the following excllent tutorial: http://www.francelabs.com/blog/tutorial-solrcloud-amazon-ec2/
Solr Docs: https://cwiki.apache.org/confluence/display/solr/Setting+Up+an+External+ZooKeeper+Ensemble
答案 2 :(得分:1)
我处于类似的情况,我不能依赖CloudSolrServer进行负载均衡,我正在评估的一个可能的解决方案是使用Airbnb的突触(http://nerds.airbnb.com/smartstack-service-discovery-cloud/)根据状态动态重新配置现有的haproxy负载均衡器我们从Zookeeper获得的SolrCloud集群。
答案 3 :(得分:0)
此引用是指Solr的最新版本,在撰写时是ver。 7.1
当Solr节点收到搜索请求时,路由请求 在幕后制作碎片的复制品,碎片是其中的一部分 被搜查的集合。
所选副本充当聚合器:它创建内部请求 随机选择集合中每个碎片的副本, 协调响应,发出任何后续内部请求 需要(例如,改进facet值,或请求其他值) 存储的字段),并构造客户端的最终响应。
在SolrCloud集群中,每个单独的节点负载均衡读取 请求集合中的所有副本。你还需要一个负载 在'外面的平衡器'与群集对话,或者你需要一个 智能客户端,了解如何阅读和与Solr交互 ZooKeeper中的元数据,只请求ZooKeeper集合 地址,以开始发现它应该发送请求的节点。 (Solr提供了一个名为CloudSolrClient的智能Java SolrJ客户端。)