マスター/スレーブ Solr をセットアップし、スレーブに対してのみライブ クエリを実行します。フル インポート (最適化あり) は毎日午前 2 時にマスターで行われます。デルタ インポートは、あるエンティティでは 5 分ごとに、別のエンティティでは 1 時間ごとに行われます。つまり、マスター crontab は次のようになります。
# full-import Lists entity
00 02 * * * curl "http://localhost:8080/solr/List/dataimport?command=full-import&clean=true&optimize=true&entity=Lists" > /dev/null
# delta-import Lists entity
*/5 0-1,4-23 * * * curl "http://localhost:8080/solr/List/dataimport?command=delta-import&entity=Lists" > /dev/null
# delta-import ViewedLists entity
23 0-1,4-23 * * * curl "http://localhost:8080/solr/List/dataimport?command=delta-import&entity=ViewedLists" > /dev/null
次の例外は、アプリ ログで毎日数回発生します。
...
org.apache.solr.client.solrj.SolrServerException: Error executing query
at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:95)
at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:118)
...
および任意のクエリ用の次のようなもの:
08:26:39,430 ERROR SolrUtil:107 - SOLR QUERY (LIST): q=*:*&fq=-list_type:CONTRIBUTING AND is_source_list:false AND is_blocked_on_hpage:false&start=0&rows=8&sort=first_publish_date desc
org.apache.solr.client.solrj.SolrServerException: java.net.SocketException: Connection reset
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:478)
at org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:244)
at org.apache.solr.client.solrj.request.QueryRequest.process(QueryRequest.java:89)
at org.apache.solr.client.solrj.SolrServer.query(SolrServer.java:118)
...
solr スレーブ サーバーの tomcat で localhost.log ファイルを調べると、次の例外が同時に発生します。
Apr 06, 2013 7:16:33 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.solr.servlet.SolrDispatchFilter.sendError(SolrDispatchFilter.java:389)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:291)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:722)
レプリケーションのセットアップは次のとおりです。
<requestHandler name="/replication" class="solr.ReplicationHandler" >
<lst name="master">
<str name="enable">${enable.master:false}</str>
<str name="replicateAfter">startup</str>
<str name="replicateAfter">commit</str>
<str name="replicateAfter">optimize</str>
<str name="confFiles">solrconfig.xml,data-config.xml,schema.xml,stopwords.txt,synonyms.txt,elevate.xml</str>
</lst>
<lst name="slave">
<str name="enable">${enable.slave:false}</str>
<str name="masterUrl">http://${master.ip}:${master.port}/solr/${solr.core.name}/replication</str>
<str name="pollInterval">00:00:10</str>
</lst>
</requestHandler>
フル インポートとデルタ インポートのほかに、15 分ごとにロードされる外部ファイル フィールドもあります。マスターとスレーブの両方で reloadCache を使用します。
この例外の原因と修正方法を教えてください。
更新pollInterval
:を 10 秒から 1 分に増やしました。まだ同じ問題が発生しています。また、エラーが短時間で別のクエリで発生していることを忘れていたので、クエリに依存しません。
更新 2 : デルタ インポートの頻度を 10 分に 1 回に減らし、外部ファイル フィールドの読み込みと reloadCache を 1 時間に 1 回に減らしました。例外の頻度は減ったように見えますが、まだ例外が見られます。