solrCloud的搭建可以有两种方式:使用solr内嵌的jetty来搭建;使用外部web容器tomcat来搭建。对于使用jett来搭建参考solr官方的手册照着做肯定ok,下面我主要讲的是如何使用tomcat来搭建solrCloud。


废话不多说,开始我们的工作!

1.搭建tomcat单机版solr

见我的上一篇博文solr安装-tomcat单机版

2.安装配置zookeeper

具体下载,安装,配置不详细说了,很简单。只列出我的关键配置项,如下:

clientPort=4181

server.2=hadoop.datanode5.com:2888:9888

server.3=hadoop.datanode2.com:2888:9888
server.1=hadoop.datanode3.com:2888:9888

3. 配置solrCloud

(1)先配置主服务器tomcat 10.2.50.46

vim /usr/apache-tomcat-7.0.54/bin/catalina.sh   在图片所示位置加入以下代码

solr安装-tomcat+solrCloud构建稳健solr集群_tomcat

JAVA_OPTS="$JAVA_OPTS -Dbootstrap_confdir=/usr/solr/collection1/conf -Dcollection.configName=myconf -DzkHost=hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181"

注:其中DzkHost是用来指定zookeeper服务器的ip和端口。 confdir目录指定所有的索引库都从collection1索引库中同步字段

(2)配置从服务器tomcat 10.2.50.28 和10.2.50.52

vim /home/tomcat/bin/catalina.sh 在和上图同样的位置加入

JAVA_OPTS="-DzkHost=hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181"

(3)配置solr collection配置文件

/usr/solr/solr.xml:配置hostport为tomcat的服务端口;配置zkHhost。



<span class="tag" style="color: rgb(0, 0, 136);"><solr></span><span class="pln" style="color: rgb(0, 0, 0);">

  </span><span class="tag" style="color: rgb(0, 0, 136);"><solrcloud></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><str</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"host"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">${host:}</span><span class="tag" style="color: rgb(0, 0, 136);"></str></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><int</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"hostPort"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">8080</span><span class="tag" style="color: rgb(0, 0, 136);"></int></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><str</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"hostContext"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">${hostContext:solr}</span><span class="tag" style="color: rgb(0, 0, 136);"></str></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><int</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"zkClientTimeout"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">${zkClientTimeout:15000}</span><span class="tag" style="color: rgb(0, 0, 136);"></int></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><bool</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"genericCoreNodeNames"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">${genericCoreNodeNames:true}</span><span class="tag" style="color: rgb(0, 0, 136);"></bool></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><str</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"zkHost"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181</span><span class="tag" style="color: rgb(0, 0, 136);"></str></span><span class="pln" style="color: rgb(0, 0, 0);">
</span><span class="tag" style="color: rgb(0, 0, 136);"></solrcloud></span><span class="pln" style="color: rgb(0, 0, 0);">

  </span><span class="tag" style="color: rgb(0, 0, 136);"><shardHandlerFactory</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"shardHandlerFactory"</span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="atn" style="color: rgb(102, 0, 102);">class</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"HttpShardHandlerFactory"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><int</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"socketTimeout"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">${socketTimeout:0}</span><span class="tag" style="color: rgb(0, 0, 136);"></int></span><span class="pln" style="color: rgb(0, 0, 0);">
    </span><span class="tag" style="color: rgb(0, 0, 136);"><int</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="atn" style="color: rgb(102, 0, 102);">name</span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="atv" style="color: rgb(0, 136, 0);">"connTimeout"</span><span class="tag" style="color: rgb(0, 0, 136);">></span><span class="pln" style="color: rgb(0, 0, 0);">${connTimeout:0}</span><span class="tag" style="color: rgb(0, 0, 136);"></int></span><span class="pln" style="color: rgb(0, 0, 0);">
  </span><span class="tag" style="color: rgb(0, 0, 136);"></shardHandlerFactory></span><span class="pln" style="color: rgb(0, 0, 0);">

</span><span class="tag" style="color: rgb(0, 0, 136);"></solr></span>


/usr/solr/collection1/core.properties:删除该文件(这样集群启动后就没有collection)

/usr/solr/collection1/conf/solrconfig.xml:修改如下配置项:

<dataDir>${solr.data.dir:/data_solr/example-collection}</dataDir>


将所有的这些配置同步到各个节点上。

(3) 保存后依次启动tomcat,输入http://10.2.50.46:8080,看到如下界面说明成功

solr安装-tomcat+solrCloud构建稳健solr集群_hadoop_02

正常情况下,应该是没有collection和core的,我这里是自己创建了一个collection。

(4)创建collection,shard,core

有两种方式:一种是创建collection,自动分配shard和replica;另一种是创建collection,手动分配shard和replica。推荐后者,因为可控性强。

方式一:

'http://localhost:7070/solr/admin/collections?action=CREATE&name=europe-collection&numShards=3&replicationFactor=3&maxShardsPerNode=3'


方式二:

curl 'http://localhost:8080/solr/admin/cores?action=CREATE&name=cz_collection-shard1-replica1&instanceDir=/usr/solr/cz_collection-shard1-replica1&dataDir=/data_solr/cz_collection-shard1-replica1&collection=cz_collection&shard=shard1'

curl 'http://localhost:8080/solr/admin/cores?action=CREATE&name=cz_collection-shard1-replica2&instanceDir=/usr/solr/cz_collection-shard1-replica2&dataDir=/data_solr/cz_collection-shard1-replica2&collection=cz_collection&shard=shard1'

这样可以创建出一个collection,并自己指定该collection的shard和replica的所有配置项。还可以继续接着创建。

以上两种方式的具体api调用,请参看solr官方文档。

(5)集群运维

a.集群会发生变化的就是collection的配置,因此当collection的配置文件发生变化后就应该使用命令更新zookeeper中配置文件信息,solr很好提供了运维工具:

#collection配置
#将配置文件上传到ZooKeeper中
java -classpath .:/usr/solr/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181 -confdir /usr/solr/collection1/conf -confname myconf
#将上传到ZooKeeper中配置文件与Collection相关联
java -classpath .:/usr/solr/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection cz_collection -confname myconf -zkhost hadoop.datanode2.com:4181,hadoop.datanode3.com:4181,hadoop.datanode5.com:4181

b.对于collection,shard,core运维使用api接口即可,在此不说了。