solr集群是通过Zookeeper进行管理的,而下载的solr中本身就已经内嵌的Zookeeper了,当然也可以独立开启Zookeeper,我是选择的采用内嵌的Zookeeper的方式
- 将solr-4.5.1/example/webapps/solr.war包发布到tomcat的webapps目录下发布
- 在tomcat/webapps/solr下新建一个solrhhome文件夹,然后将solr-4.5.1/example目录下的solr文件夹复制到solrhome目录下
- 配置tomcat/webapps/solr/WEB-INF下的web.xml文件,
<env-entry-value>E:/apache-tomcat-7.0.16/webapps/solr/solehome/solr配置solr/home,网上有很多种配置方法</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
4. 同样在另外一台或者两台机器上重复以上的步骤
5. 修改tomcat/bin/catalina.bat文件,假设我希望A机器作为Zookeeper的服务器,此机器的ip为192.168.1.100
在文件第一行加上set JAVA_OPTS=-DzkRun -DnumShards=2 -Dbootstrap_confdir=E:/apache-tomcat-7.0.16/webapps/solr/solehome/solr/collection1/conf -Dcollection.configName=myconf
其中-DzkRun代表运行开启内置Zookeeper, -DnumShards=2代表两片分区
6.接下来配置E:/apache-tomcat-7.0.16/webapps/solr/solehome/solr/solr.xml文件,内嵌的Zookeeper端口是solr端口+1000,
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">8080-此处修改为你的tomcat端口</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:15000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
7.接下来配置其它两台机器,很简单,首先再一次做第7步的工作,然后编辑tomcat/bin/catalina.bat文件,在第一行加上set JAVA_OPTS=-ZkHost=192.168.1.100:9080
其中ip和端口都是Zookeeper服务器的Ip和端口 【set JAVA_OPTS=-DzkRun -DzkHost=localhost:9080】
8.接下来首先启动Zookeeper所在的服务器,然后启动另外两台服务器,启动好之后,输入http://ip:port/solr/admin就可以看到cloud菜单,就可以看到你想看的了。。
SOLR复制模式,是一种在分布式环境下用于同步主从服务器的一种实现方式,因之前提到的基于rsync的SOLR不同方式部署成本过高,被SOLR1.4版本所替换,取而代之的就是基于HTTP协议的索引文件传输机制,该方式部署简单,只需配置一个文件即可。以下讲解具体操作步骤:
步骤分主服务器和从服务器,允许有多个从服务器,即从服务器的配置一样。
主服务器:
在solrConfig.xml中:
Xml代码 收藏代码
<requestHandler name="/replication" class="solr.ReplicationHandler">
<lst name="master">
<str name="replicateAfter">commit</str>
<str name="confFiles">schema.xml,solrconfig_slave.xml:solrconfig.xml</str>
<str name="commitReserveDuration">00:01:00</str>
</lst>
</requestHandler>
说明:
replicateAfter : SOLR会自行在以下操作行为发生后执行复制: 'commit', 'startup' 'optimize',这里我们选择commit , 即SOLR每一次接受到commit请求后,会执行复制策略。
confFiles : 待分发的配置文件,solr 也会将主服务器上的字段配置文件:schema.xml和stopwords.txt,固排文件: elevate.xml同步到辅服务器上。
commitReserveDuration: 每次commit之后,保留增量索引的周期时间,这里设置为5分钟。
从服务器:
Xml代码 收藏代码
<requestHandler name="/replication" class="solr.ReplicationHandler">
<lst name="slave">
<str name="masterUrl">http://192.168.172.2:7100/solr/${solr.core.name}/replication</str>
<str name="pollInterval">00:08:00</str>
<!-- external 很容易有索引大小不对, 压缩文件损坏这2个问题, 导致复制无法进行, 且一直复制失败, 测试下来internal没任何问题 -->
<str name="compression">internal</str>
<str name="httpConnTimeout">1000</str>
<str name="httpReadTimeout">2000</str>
</lst>
</requestHandler>
说明:
masterUrl : 主服务器同步URL地址
pollInterval:从服务器同步间隔,即每隔多长时间同步一次主服务器
httpConnTimeout:设置连接超时(单位:毫秒)
httpReadTimeout:如果设置同步索引文件过大,则应适当提高此值。(单位:毫秒)
httpBasicAuthUser:验证用户名,需要和主服务器一致
httpBasicAuthPassword:验证密码,需和主服务器一致
compression:external or internal 使用SOLR自己的压缩算法或应用容器的