solrcloud 搭建

可参考文章:
http://shiyanjun.cn/archives/100.html
http://distinctplace.com/howto/2014/06/30/dealing-with-multiple-config-sets-in-solrcloud/
 
我,caodan,终于又弄好了新版本的solrcloud,没想到单机转个cloud还这么麻烦,弄了整整两天。
 
首先,之前使用的是solr5.0.0,因为用5.3.0 smartcn组件总是出错,现在我终于给他搞定了。
直接把analysis-extras\lucene-libs\lucene-analyzers-smartcn-5.3.1.jar 复制到 solr_setup\server\solr-webapp\webapp\WEB-INF\lib 下面,注意,不要复制到 solr_setup\server\lib下面,因为那样会导致加载失败。
复制完之后,用中文就很简单了,直接定义fieldtype
    <fieldType name="text_chinese" class="solr.TextField" positionIncrementGap="100">
      <analyzer>
        <tokenizer class="solr.HMMChineseTokenizerFactory"/>
        <filter class="solr.PorterStemFilterFactory"/>
      </analyzer>
    </fieldType>
 
接下来,为了建立solrcloud,需要参考 solr reference book,跟着里面的Setting Up an External ZooKeeper Ensemble那个做。
注意,solr -e 参数只是内置的傻瓜参考样本。没法用于产品的,不要去使用 -e 选项。 -e cloud只是给小白建立example看着玩玩用的。
下面那句话 bin/solr start -cloud -s <path to solr home for new node> -p 8987 -z localhost:2181 才是真材实料的布置环境。
 
好了先说布置 zookeeper,先去下载zookeeper,安装好。
然后配置zoo.cfg,这个好配置,注意clientPort是给solr连接用的,下面 server.1=localhost:2888:3888 的两个端口,是给不同zookeeper之间通信用的。
假设有三个node,同时配置三个zookeeper,有点傻瓜的时必须在syncLimit的时间内把他们同时打开,要不就会同步失败。
 
接下来就用 solr -cloud -z localhost:2181 -p 8983 命令去启动solr去连接zookeeper。
不要去指定 -s 选项,那是用来指定solr home的,如果需要多个solr就多复制几份,不要在一个solr安装目录下弄多个solr home,直接用默认的 solr_setup\server\solr 才靠谱。
可以把每个solr指定到每一个zookeeper上,
solr -cloud -z localhost:2182 -p 8984
solr -cloud -z localhost:2183 -p 8985
 
然后就是创建collection,这真是烦死大爷了,solrcloud的配置文件包括 schema.xml 和 solrconfig.xml 都是上传到 zookeeper进行管理的,不像单机版那样直接配置在本地,所以需要使用如下命令创建collection
 
solr create -c test -d myconf -shards 1 -replicationFactor 1
 
其中 myconf 指的是 solr_sepup\server\solr\configsets\ 下面的一个目录,比如 solr_sepup\server\solr\configsets\myconf,可以参考目录下的其他文件比如 basic_configs 来建立
同时zookeeper上还需要制定一个 configname,这个name默认跟collection name相同,所以上面的命令其实会调用接口

http://localhost:8983/solr/admin/collections?action=CREATE&name=test&numShards=1&replicationFactor=1&maxShardsPerNode=1&collection.configName=test

根据文章说的 http://distinctplace.com/howto/2014/06/30/dealing-with-multiple-config-sets-in-solrcloud/

用命令可以创建单独的configset

zkcli.sh -zkhost localhost:9983 -cmd upconfig -confdir /opt/solr/collection2/conf -confname myconf1

创建collection的时候可以单独指定 collection.configName,假如 configName 已经存在的话,注意这个zkcli必须用solr自带的

 

下面解决一些问题:

1. 恶心的事情,发布solr cloud,遇到问题,解析localhost变成ip 169.254.X.X,

万能的谷歌告诉我们:http://comments.gmane.org/gmane.comp.jakarta.lucene.solr.user/107193

关键看这个网址:http://wiki.apache.org/solr/SolrCloud#SolrCloud_Instance_Params

把 solr.xml 中的host值直接指定

2.zookeeper自带的zkcli是没有solr命令的,solr的zkcli有自己的script。我总是用原始的zkcli一直无法上传configset害死我了,具体看如下网址:

https://cwiki.apache.org/confluence/display/solr/Command+Line+Utilities

The zkcli.sh provided by Solr is not the same as the zkCli.sh included in ZooKeeper distributions !

发表评论

电子邮件地址不会被公开。 必填项已用*标注


*