一、前言
在配置apache solr搜索引擎主/从(master/slave)服务的时候,报出“ Master at: http://xxxxx/xwood-solr/#/subject is not available. Index fetch failed. Exception: Invalid version (expected 2, but 60) or the data in not in'javabin' format”、“ERROR org.apache.solr.servlet.SolrDispatchFilter – null:java.lang.IllegalStateException: getWriter() has already been called for this response”、“Nested exception:org.xml.sax.SAXParseException; systemId: http://xxxx/solr/subject/select?q=title%3Aiot..; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.”等问题。
二、配置步骤
1. 配置solr版本为4.4.0,如下图所示
2. 主(写)master节点solr应用配置solrconfig.xml配置参考如下
<?xml version="1.0" encoding="UTF-8" ?>@b@... @b@ <requestHandler name="/replication" class="solr.ReplicationHandler" >@b@ <lst name="master">@b@ <!-- 当有新的索引被提交,标记新的索引和保存新索引的文件名 -->@b@ <str name="replicateAfter">commit</str>@b@ <!-- 当系统启动时,标记新的索引和保存新索引的文件名 -->@b@ <str name="replicateAfter">startup</str>@b@ <!-- 当索引优化时,标记新的索引和保存新索引的文件名,因为 commit,optimize 基本上是同时存在的,所以一般不用设置 optimize-->@b@ <!-- <str name="replicateAfter">optimize</str>-->@b@ <!-- 索引优化后创建一份备份索引,这个在复制过程中不需要设置 -->@b@ <!--<str name="backupAfter">optimize</str>-->@b@ <!-- 索引复制时,也同步从服务器的配置文件 solrconfig_slave.xml:solrconfig.xml 表示复制时,在slave端以solrconfig.xml进行保存,这样slave才能认识这个文件-->@b@ <str name="confFiles">solrconfig_slave.xml:solrconfig.xml,schema.xml,stopwords.txt,elevate.xml</str>@b@ <!-- 设置验证信息 -->@b@ <str name="httpBasicAuthUser">admin</str>@b@ <str name="httpBasicAuthPassword">123456</str>@b@ </lst>@b@</requestHandler>@b@ @b@...
3. 从(读)slave节点solr应用配置solrconfig.xml配置参考如下
<?xml version="1.0" encoding="UTF-8" ?>@b@...@b@ <requestHandler name="/replication" class="solr.ReplicationHandler" >@b@ <lst name="slave">@b@ <!-- 主服务器的URL,core_1是配置了多核,如果不是多核,连接应该是 http://www.abc.com/solr/replication -->@b@ <!-- <str name="masterUrl">http://www.abc.com/solr/core_1/replication</str> -->@b@ <str name="masterUrl">http://www.xwood.net/solr/subject/replication</str> @b@ <!-- 1分钟同步一次 -->@b@ <str name="pollInterval">00:00:60</str>@b@ <!-- 压缩机制,来传输索引,可选 internal|external,internal表示内网,external表示外网 -->@b@ <str name="compression">internal</str>@b@ <!-- 设置超时时间 -->@b@ <str name="httpConnTimeout">60000</str>@b@ <str name="httpReadTimeout">60000</str>@b@ <!-- 设置验证信息,要和master 服务器配置一样 -->@b@ <str name="httpBasicAuthUser">admin</str>@b@ <str name="httpBasicAuthPassword">123456</str>@b@ </lst>@b@ </requestHandler>@b@ ...
4. 在主节点Master新增一条记录,可以看到在slave服务器可以正常打印如下同步日志,说明配置OK了
510741 [snapPuller-8-thread-1] INFO org.apache.solr.handler.SnapPuller – Slav@b@e in sync with master.