我正在从传统的Master-Slave模型转换到SolrCloud . 我正在使用Solr 4.4并且已经设置了2个分片,每个分片有1个副本 . 我有3个动物园管理员合奏 . 所有节点都在AWS EC2实例上运行 . 碎片在m1.xlarge上并共享一个zookeeper实例(安装在单独的卷上) . 为每个solr实例分配6 gb内存 .
我在索引中有大约1000万个文档 . 使用以前的独立模型,查询平均大约100毫秒 . 到目前为止,SolrCloud查询响应非常糟糕 . 查询响应时间超过1000毫秒,经常达到2000毫秒 . 我预计会因为额外的服务器,网络延迟等而出现一些激增,但这种差异实在令人费解 . 两种情况下的硬件类似,除了SolrCloud节点的一对共享zookeeper的事实 . m1x.large I / O很高,因此也不应该成为瓶颈 .
与旧设置的另一个区别是我正在使用新的CloudSolrServer类,它具有3个zookeeper参考用于负载 balancer . 但我不认为它有任何重大影响,因为从Solr管理查询面板执行的查询确认了缓慢 .
以下是我的一些配置设置:
提交频率
<autoCommit>
<maxTime>30000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
<maxTime>1000</maxTime>
</autoSoftCommit>
布尔子句: ``
<maxBooleanClauses>1024</maxBooleanClauses>
缓存设置:
<filterCache class="solr.FastLRUCache" size="16384" initialSize="4096"
autowarmCount="4096"/>
<queryResultCache class="solr.LRUCache" size="16384" initialSize="8192"
autowarmCount="4096"/>
<documentCache class="solr.LRUCache" size="32768" initialSize="16384"
autowarmCount="0"/>
<fieldValueCache class="solr.FastLRUCache" size="16384"
autowarmCount="8192" showItems="4096" />
<enableLazyFieldLoading>true</enableLazyFieldLoading>
<queryResultWindowSize>200</queryResultWindowSize>
<queryResultMaxDocsCached>400</queryResultMaxDocsCached>
查询侦听器:
<listener event="newSearcher" class="solr.QuerySenderListener">
<arr name="queries">
<lst><str name="q">line</str></lst>
<lst><str name="q">xref</str></lst>
<lst><str name="q">draw</str></lst>
</arr>
</listener>
<listener event="firstSearcher"
class="solr.QuerySenderListener">
<arr name="queries">
<lst><str name="q">line</str></lst>
<lst><str name="q">draw</str></lst>
<lst><str name="q">line</str><str
name="fq">language:english</str></lst>
<lst><str name="q">line</str><str
name="fq">Source2:documentation</str></lst>
<lst><str name="q">line</str><str
name="fq">Source2:CloudHelp</str></lst>
<lst><str name="q">draw</str><str
name="fq">language:english</str></lst>
<lst><str name="q">draw</str><str
name="fq">Source2:documentation</str></lst>
<lst><str name="q">draw</str><str
name="fq">Source2:CloudHelp</str></lst>
</arr>
</listener>
<maxWarmingSearchers>2</maxWarmingSearchers>
请求处理程序:
code>
<requestHandler name="/cloudhelp" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<float name="tie">0.01</float>
<str name="wt">velocity</str>
<str name="v.template">browse</str>
<str
name="v.contentType">text/html;charset=UTF-8</str>
<str name="v.layout">layout</str>
<str name="v.channel">cloudhelp</str>
<str name="defType">edismax</str>
<str name="q.alt">*:*</str>
<str name="rows">15</str>
<str
name="fl">id,url,Description,Source2,text,filetype,title,LastUpdateDate,PublishDate,ViewCount,TotalMessageCount,Solution,LastPostAuthor,Author,Duration,AuthorUrl,ThumbnailUrl,TopicId,score</str>
<str name="qf">text^1.5 title^2 IndexTerm^.9
keywords^1.2 ADSKCommandSrch^2 ADSKContextId^1</str>
<str name="bq">Source2:CloudHelp^3
Source2:youtube^0.85</str>
<str
name="bf">recip(ms(NOW,PublishDate),3.16e-11,1,1)^2.0</str>
<str name="df">text</str>
<str name="facet">on</str>
<str name="facet.mincount">1</str>
<str name="facet.limit">100</str>
<str name="facet.field">language</str>
<str name="facet.field">Source2</str>
<str name="facet.field">DocumentationBook</str>
<str name="facet.field">ADSKProductDisplay</str>
<str name="facet.field">audience</str>
<str name="hl">true</str>
<str name="hl.fl">text title</str>
<str name="f.text.hl.fragsize">250</str>
<str name="f.text.hl.alternateField">ShortDesc</str>
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.onlyMorePopular">false</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">1</str>
</lst>
<arr name="last-components">
<str>spellcheck</str>
</arr>
</requestHandler>
我注意到的一件事是queryresultcache命中率非常低,不确定我们的查询总是那么独特 . 我正在使用edismax并且有一个收件人(ms(NOW,PublishDate),3.16e-11,1,1)^ 2.0,这可以贡献吗?
对于这篇长篇文章感到抱歉,但是我在这里努力解决这个问题,特别是当查询在具有类似硬件和网络的主从环境中正常运行时 .
任何指针都将受到高度赞赏 .
- 谢谢
1 回答
谢谢你的注意:
默认情况下,SolrCloud在活动节点之间分配请求并整理结果 . 我的建议是使用Document and Query Routing among shard,它将提供最佳性能 .