我有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)
答案 0 :(得分:0)
如果您的分片已关闭,可能会发生这种情况。由于该节点,是否有任何碎片?
你有多少副本?
负载平衡:
如果您使用CloudSolrServer客户端,它将负责负载平衡。在Solr Cloud中,查询将被分发。
答案 1 :(得分:0)
要在Solr Cloud中设置高可用性,您至少需要2个Solr实例。创建集合时,请指定分片数和复制因子,SolrCloud将在完成此操作后为您创建每个副本上的镜像分片。您还可以确认它在云视图中有效。
此时,您只需像以前一样将数据索引到Solr中,它就会自动发送到“leader”实例,然后复制到镜像实例。
当查询进入时,无论哪个节点收到它,它都会自动在SolrCloud中反弹以命中给定分片的实例,然后结果将被聚合并发送回客户端。