我正在从传统的主从模型过渡到 SolrCloud。我正在使用 Solr 4.4 并设置了 2 个分片,每个分片有 1 个副本。我有 3 个动物园管理员合奏。所有节点都在 AWS EC2 实例上运行。分片位于 m1.xlarge 上并共享一个 zookeeper 实例(安装在单独的卷上)。为每个 solr 实例分配 6 GB 内存。
我在索引中有大约 1000 万个文档。使用之前的独立模型,查询平均约为 100 毫秒。到目前为止,SolrCloud 的查询响应非常糟糕。查询响应时间超过1000ms,经常达到2000ms。由于额外的服务器、网络延迟等,我预计会出现一些激增,但这种差异确实令人困惑。两种情况下的硬件都是相似的,除了几个 SolrCloud 节点也共享 zookeeper。m1x.large I/O 很高,因此也不应该成为瓶颈。
与旧设置的另一个区别是我正在使用新的 CloudSolrServer 类,该类具有 3 个 zookeeper 参考用于负载平衡。但我不认为它有任何重大影响,因为从 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>
请求处理程序:
代码> <requestHandler name="/cloudhelp" class="solr.SearchHandler"> <lst name="默认值"> <str name="echoParams">显式</str> <float name="tie">0.01</float> <str name="wt">速度</str> <str name="v.template">浏览</str> <str name="v.contentType">text/html;charset=UTF-8</str> <str name="v.layout">布局</str> <str name="v.channel">云帮助</str> <str name="defType">edismax</str> <str name="q.alt">*:*</str> <str name="rows">15</str> <str name="fl">id,url,Description,Source2,文本,文件类型,标题,LastUpdateDate,PublishDate,ViewCount,TotalMessageCount,Solution,LastPostAuthor,Author,Duration,AuthorUrl,ThumbnailUrl,TopicId,score</str> <str name="qf">文本^1.5 标题^2 索引词^.9 关键字^1.2 ADSKCommandSrch^2 ADSKContextId^1</str> <str name="bq">来源2:CloudHelp^3 来源2:youtube^0.85</str> <str name="bf">recip(ms(NOW,PublishDate),3.16e-11,1,1)^2.0</str> <str name="df">文本</str> <str name="facet">开启</str> <str name="facet.mincount">1</str> <str name="facet.limit">100</str> <str name="facet.field">语言</str> <str name="facet.field">Source2</str> <str name="facet.field">文档手册</str> <str name="facet.field">ADSKProductDisplay</str> <str name="facet.field">观众</str> <str name="hl">真</str> <str name="hl.fl">文本标题</str> <str name="f.text.hl.fragsize">250</str> <str name="f.text.hl.alternateField">ShortDesc</str> <str name="spellcheck">真</str> <str name="spellcheck.dictionary">默认</str> <str name="spellcheck.collate">真</str> <str name="spellcheck.onlyMorePopular">假</str> <str name="spellcheck.extendedResults">假</str> <str name="spellcheck.count">1</str> </lst> <arr name="last-components"> <str>拼写检查</str> </arr> </requestHandler>
我注意到的一件事是 queryresultcache 命中率非常低,不确定我们的查询是否总是那么独特。我正在使用 edismax 并且有一个 recip(ms(NOW,PublishDate),3.16e-11,1,1)^2.0 ,这可以贡献吗?
很抱歉这篇长文,但我正在努力解决这个问题,特别是当查询在具有类似硬件和网络的主从环境中运行良好时。
任何指针将不胜感激。
- 谢谢