1.下载地址
http://lucene.apache.org/solr/
参考WIKI文档: http://wiki.apache.org/solr/SolrCloud
(1)加压缩包并,将solr-4.9.0\example 文件件复制一份,cp -r example example2
(2)启动一个节点
cd examplejava -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar
(3)启动另一个节点并加入Zookeeper集群-DzkRun参数是启动一个嵌入式的Zookeeper服务器,它会作为solr服务器的一部分-Dbootstrap_confdir参数是上传本地的配置文件上传到zookeeper中去,作为整个集群共用的配置文件-DnumShards指定了集群的逻辑分组数目
cd example2
java -Djetty.port=7574 -DzkHost=localhost:9983 -jar start.jar
-DzkHost=localhost:9983就是指明了Zookeeper集群所在位置然后我们可以打开http://localhost:8983/solr/collection1/admin/zookeeper.jsp 或者http://localhost:8983/solr/#/cloud看看目前集群的状态
cd exampledocsjava -Durl=http://localhost:8983/solr/collection1/update -jar post.jar ipod_video.xmljava -Durl=http://localhost:8983/solr/collection1/update -jar post.jar monitor.xmljava -Durl=http://localhost:8983/solr/collection1/update -jar post.jar mem.xml
现在这个demo就比较完善了,下图就是全部配置完成后的状态但是尽管solr服务器可以容忍挂掉,但集群中只有一个zookeeper服务器来维护集群的状态信息,单点的存在即是不稳定的根源。如果这个zookeeper服务器挂了,那么分布式查询还是可以工作的,因为每个solr服务器都会在内存中维护最近一次由zookeeper维护的集群状态信息,但新的节点无法加入集群,集群的状态变化也不可知了。因此,为了解决这个问题,需要对Zookeeper服务器也设置一个集群,让其也具备高可用性和容错性。有两种方式可选,一种是提供一个外部独立的Zookeeper集群,另一种是每个solr服务器都启动一个内嵌的Zookeeper服务器,再将这些Zookeeper服务器组成一个集群。我们这里用后一种做示例:增加两个节点cp -r example exampleBcp -r example2 example2Bcd exampleBjava -Djetty.port=8900 -DzkHost=localhost:9983 -jar start.jarcd example2Bjava -Djetty.port=7500 -DzkHost=localhost:9983 -jar start.jar
(2)在Tomcat的 conf/Catalina/localhost 目录下面增加一个文件 solr.xml,内容如下:
<Context docBase="/usr/local/solrhome/solr.war" debug="0" crossContext="false" ><Environment name="solr/home"type="java.lang.String"value="/usr/local/solrhome"override="true" /></Context>
<!--
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
-->
改为 :
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
java.lang.UnsupportedClassVersionError: org/apache/solr/servlet/SolrDispatchFilter : Unsupported major.minor version 51.0 (unable to load class org.apache.solr.servlet.SolrDispatchFilter)
che.solr.common.SolrException: Found multiple cores with the name [collection1],with instancedirs [/usr/local/solrhome/solr-4.9.0/example/example-schemaless/solr/collection1/] and [/usr/local/solrhome/solr-4.9.0/example/solr/collection1/]
原来我解压solr后的文件夹放到了solhome下,后来又复制了example/solr/下的文件到solhome,
solr启动时会到 solrhome下检查所有文件夹,并加载core配置,结果solrhome下有两个collection1 core所以 Found multiple cores with the name [collection1],删除solr-4.9.0文件夹即可,再次重启成功运行!至此单个solr启动完成
<solrcloud><str name="host">192.168.66.99</str> // admin界面地址<int name="hostPort">7080</int> // admin界面地址端口<str name="hostContext">/solr</str> // admin界面地址工程名(即tomcat下solr解压出的工程名)<int name="zkClientTimeout">${zkClientTimeout:30000}</int><bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool></solrcloud><shardHandlerFactory name="shardHandlerFactory"class="HttpShardHandlerFactory"><int name="socketTimeout">${socketTimeout:0}</int><int name="connTimeout">${connTimeout:0}</int></shardHandlerFactory></solr>
复制 tomcat/webapps/ solr/WEB-INF/lib下所有jar包复制 example/lib/ext 下所有 jar 包复制 example/resources/log4j.properties