2014-09-02 57 views
0

我有8个solr碎片与3个动物园管理员一起运行,有些时候如果任何服务器出现故障,它会给我下面的堆栈跟踪,我可以在查询中使用shards.tolerant = true处理该问题。如何处理Solr中的负载平衡?

我的问题是如何在默认情况下在solr云中实现容错,所以无论何时我发起查询,它将返回几个保证结果而不是异常?

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

如果您的分片已关闭,可能会发生这种情况。是否因该节点导致分片下降?
你有多少副本?

负载平衡:
CloudSolrServer客户端负责负载平衡,如果您使用它。在Solr Cloud中,查询是分布式的。

+0

嗨,是的一个碎片是这就是为什么我得到这个错误....我只有8个碎片,他们都是领导者,云有大约7000万个文件和2TB空间,没有副本......你想要什么建议? – 2014-09-02 18:10:23

+0

创建至少2个副本以消失一个节点。 – techuser 2014-09-02 18:16:56

0

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

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

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