solrCloud搭建笔记(更好一点)

之前已经写了一篇solrCloud的搭建笔记了,最近又发现一种更好的方法,在记录一边,我使用的zk的版本是3.4.6,使用的solr的版本是5.5.3,请在apache的官网现在solr此版本的安装包,另外我使用的tomcat是8.x的版本,8之下的会报一个错。

1、搭建zk环境,我的zk的url是ip:2181,为了不和其他的配置混乱,我在zk中单独建立了一个节点,来存放solr的信息,solr中叫做chroot,我建立的solr的chroot叫做solr5,所以最终的连接zk的ulr为ip.2181/solr5。

2、上传配置文件:

     找到你的solr的安装包,将安装包\server\solr-webapp\webapp\WEB-INF\lib\*这个路径放在你的classpath下面,然后执行下面的命令  

java org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost ip:2181/solr5 -confdir  安装包\server\solr\configsets\basic_configs\conf -confname article

他表示将 安装包\server\solr\configsets\basic_configs\conf文件夹内的所有的文件都上传到zk上,给这个配置文件起名字为article,执行完这个命令之后就会发现在zk的solr5这个节点下就会多一个节点,叫做configs,它里面有个子节点叫做article,他代表我们创建的article配置文件,他的子节点就是我们上传的配置文件。

[zk: localhost:2181(CONNECTED) 106] ls /solr5/configs/article
[currency.xml, protwords.txt, synonyms.txt, _rest_managed.json, solrconfig.xml, lang, stopwords.txt, managed-schema]

3、准备搭建solr

    1、找到安装包/server/solr-webapp/webapp,将最后的webapp目录放到tomcat的webapps中,改名为solr,将server/lib/ext中的jar包放到solr在tomcat中的lib中,这些jar包是做日志用的,再在lib的同级目录创建一个classes目录,将server/resources/logging.properties复制到里面,这个是供log4j使用的。

    2、修改web.xml,修改solr/home,将其改为你的地址,表示这个节点的solr创建的索引的工作地址。

    3、在你的solrhome指定的文件夹中,放入solr.xml,这个文件在solr安装包的server/solr文件夹内可以发现。在这个文件中,添加一行,<str name="zkHost">ip:2181/solr5</str>  这个表示zk的url,将solr.xml的hostPort改为你的tomcat的port,比如我的是8080,则改为8080,最终solr.xml的内容为:

<solr> <!-- 加粗的为我修改过的 -->
  <solrcloud>
    <str name="host">${host:}</str>
    <int name="hostPort">${jetty.port:8080}</int>  <!-- 注意这个,每个tomcat可能都不同,尤其是单机时!!!-->
    <str name="hostContext">${hostContext:solr}</str>

    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>

    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
    <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
    <str name="zkCredentialsProvider">${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider}</str>
    <str name="zkACLProvider">${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider}</str>
    <str name="zkHost">ip:2181/solr5</str>  
  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:600000}</int>
    <int name="connTimeout">${connTimeout:60000}</int>
  </shardHandlerFactory>

</solr>

   启动你的服务器,注意如果你有多个服务器,比如多个tomcat,请保证他们的端口不冲突,建议你在做这些操作之前先启动tomcat的实验,即configtest.sh试验一下,保证端口不冲突在启动。这里假设你的tomcat正常启动。在启动一个tomcat之后,请到zk上看看solr5节点下的变化,在启动第一个之后会增加很多的节点,其中有一个很重要的就是live_nodes, ls /solr5/live_nodes就会发现它里面多一个子节点,表示我们刚刚启动的solr,他的名字就是我们启动的solr的ip:port_solr,如果果真出现的话你的tomcat启动成功了,solr已经和zk联系上了。然后每启动一个tomcat,都会发现会多个节点出现在live_nodes下面。还有别忘了每启动一个都到solr的管理页面访问下,solr5.5.3的首页和solr4的不同,添加了/admin.html,比如localhost:8080/solr/admin.html。

4、创建collection(我把它称作集合):

     执行solr的api创建一个集合,我在试验时是使用了4个tomcat,所以我创建的集合的shard为4,并且每个shard有3个replica,我执行的命令是:

http://localhost:8080/solr/admin/collections?action=CREATE&name=article&numShards=4&replicationFactor=3&collection.configName=article&maxShardsPerNode=3

他的意思是,执行创建集合的指令(action=CREATE),创建集合的名字是article(name=article),他有四个shard(numShards=4),每个shard有三个replica(replicationFactor=3),这个集合使用的配置文件的名字是article(collection.configName=article),在每个solr中(也就是每个tomcat中的solr)最多可以出现3个shard(maxShardsPerNode=3,这个必须添加,默认是1个)。此时再到zk中查看一下集合的状态,在solr5中集合的状态实在每一个集合中,使用 get /solr5/collections/article/state.json,查看一下此集合的状态,最后选择一个solr看看它的管理页面的cloud。

就这么简单,solrCloud就搭建完成了!

猜你喜欢

转载自suichangkele.iteye.com/blog/2352841