如何在Solr中处理负载均衡?

时间:2014-09-02 12:20:06

标签: java solr fault-tolerance

我有8个solr分片和3个动物园管理员一起运行,有时候如果任何服务器发生故障,它会给我以下的堆栈跟踪,我可以在查询中使用shards.tolerant = true处理它。

我的问题是如何在solr cloud中默认使这个容错,所以每当我触发查询它会返回很少的保证结果而不是异常?

ERROR - 2014-09-02 12:01:45.610; org.apache.solr.common.SolrException; org.apache.solr.common.SolrException: no servers hosting shard: 
    at org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:149)
    at org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:119)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

2 个答案:

答案 0 :(得分:0)

如果您的分片已关闭,可能会发生这种情况。由于该节点,是否有任何碎片?
你有多少副本?

负载平衡:
如果您使用CloudSolrServer客户端,它将负责负载平衡。在Solr Cloud中,查询将被分发。

答案 1 :(得分:0)

要在Solr Cloud中设置高可用性,您至少需要2个Solr实例。创建集合时,请指定分片数和复制因子,SolrCloud将在完成此操作后为您创建每个副本上的镜像分片。您还可以确认它在云视图中有效。

此时,您只需像以前一样将数据索引到Solr中,它就会自动发送到“leader”实例,然后复制到镜像实例。

当查询进入时,无论哪个节点收到它,它都会自动在SolrCloud中反弹以命中给定分片的实例,然后结果将被聚合并发送回客户端。