由于这次在处理umcsyslog的时候用到solr, 而集团目前还没有solr线上和线下集群,于时自己动搭建了
一套solr集群;在搭建的时候查看了网上不少资料,也碰到过很多问题,最终经过一路的波折,终于把线下第
一个solr集群给搭建好了,网上介绍的这方面资料比较多,但都不太全面,并且绝大部分都没有讲清楚;下面
就来分享一下自己在搭建solr集群的经验与步骤, 希望以后对大家有搭建solr集群需求的同学有所帮助;
1. 下载Solr集群相关的软件:
solr集群是依赖于zookeeper, 在线上环境下最后学是部署在tomcat重量级的容器下, 因此也需要下载
tomcat, 当然还要下载solr本身
1.1 zookeeper : 由于集团线下有不少现存的zookeeper集群, 安装zookeeper集群很比较简单, 在此
就不介绍如何安装zoopkeeper集群了,本次是直接用杭州这边现存的zookeeper集群;
zookeeper地址是:10.9.0.130:2181,10.9.0.131:2181,10.9.0.132:2181
1.2 tomcat: apache-tomcat-7.0.63 http://tomcat.apache.org/download-70.cgi
1.3 solr: solr-5.2.1 下载地址: http://www.apache.org/dyn/closer.lua/lucene/solr/5.2.1
2. 安装solr集群:
下载下来的solr安装解压后进入根目录,如下图所示:
bin目录:solr在自带jetty容器上的一些启动脚本,由于我们是把solr放在tomcat容器下运行,故这几目录没
什么用;
contrib目录:solr特定需求所需要的外部jar包,没有相关的需求,也没什么用;
dist目录:solr运行时所需要的jar,在运行时,需要把dist目录和dist的子目录solrj-lib所有jar包 所复制到solr
应用的WEB-INF/lib目录下;
docs目录:solr的的开发文档;
example目录:solr示例;
licenses目录:solr官方的licenses相关的文件,不用管;
server目录: server的子目录webapps有一个solr的war包,这个war非常重要,我们运行的时候,就是要把
这个war包放在tomcat容器下;server的子目录solr是一个关于solr集群多核的配置示例,这个
配置示例是基于内置zookeeper的,我们用的都是外部公共的 zookeeper,也没什么用;
下面进入正式安装过程:
solr集群两台机器:
10.9.0.137
10.9.0.134
我们统一把tomcat安装在/export/servers/目录下
window上的操作
1. 首先把server/webapps目录下的war包复制到tomcat的webapps目录 下, 然后启动tomcat,
tomcat成功启动之后,webapps目录 下多了一个solr文件夹, 停止tomcat删除solr.war文件
2. 把\example\example-DIH目录下的 solr文件夹分别打包上传到10.9.0.137,10.9.0.134两台机
器的/export/servers 目录下,然后解压,再删除原来的solr压缩文件;
3. 上传tomcat分别到10.9.0.137,10.9.0.134两台机器 的/export/servers目录下,解压后删除原
来压缩tomcat文件; 上传以后,执行 ls -l/export/servers ,显示的结果如下:
4. 进入/export/servers/apache-tomcat-7.0.63/webapps/solr/WEB-INF目录, 编辑
web.xml文件,把下面这段内容的外面的 注释去掉
<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-value的内容修改为solr上传的目录,在本次安装中,
solr的home路径是/export/servers/solr,于是修改如下:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/export/servers/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
5. 进入/export/servers/apache-tomcat-7.0.63/bin目录下,编辑catalina.sh文件在234行的下面添加上下
面tomcat启动参加:
JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx2048M -Xmn512M
-XX:PermSize=256M -XX:MaxPermSize=256M
-Dbootstrap_confdir=/home/solr/umc_syslog/conf
-Dcollection.configName=myconf
-DzkHost=10.9.0.130 :2181,10.9.0.131:2181,10.9.0.132:2181
-DnumShards=8
-Drouter.name=compositeId"
上面配置参数的具体含义如下:
-Dbootstrap_confdir: solr启动的配置目录路径,在集群的情况下,所有转发都是通过这个目录来进行的;
-Dcollection.configName:告诉zookeeper集群容器的配置名称;
-DzkHost:zookeeper集群的地址列表;
-DnumShards:solr容器切片的最大个数
-Drouter.name:插入索引时候的路由名称,一般是compositeId,否则可能所有索引都会写到一个切片中
注意,在一个solr集群中,只需要其中的一台的solr服务器的tomcat启动参数需要这么配置,集群中其它机器
只需要如下这么配置即可:
JAVA_OPTS="$JAVA_OPTS -Xms2048M -Xmx2048M -Xmn512M-XX:PermSize=256M
-XX:MaxPermSize=256M
-DzkHost=10.9.0.130:2181,10.9.0.131:2181,10.9.0.132:2181"
即只需要配置zookeeper集群的地址列表;
6. 进入到/export/servers/solr目录 下, 编辑solr.xml文件,在solr标签之前添加如下的内容:
<solrcloud>
<strname="host">${host:}</str> <!---host名称,默认-->
<intname="hostPort">${jetty.port:8888}</int> <!--tomcat的http访问端口--->
<strname="hostContext">${hostContext:solr}</str> <!---访问solr服务器的相对路径---->
<boolname="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
<intname="zkClientTimeout">${zkClientTimeout:30000}</int>
<intname="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
<intname="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
<strname="zkHost">10.9.0.130:2181,10.9.0.131:2181,10.9.0.132:2181</str><!--zk地址列表-->
</solrcloud>
<shardHandlerFactoryname="shardHandlerFactory"class="HttpShardHandlerFactory"> <!--切片处理器类->
<intname="socketTimeout">${socketTimeout:600000}</int>
<intname="connTimeout">${connTimeout:60000}</int>
</shardHandlerFactory>
到此,整个solr集群差不多都配置完毕了, 下篇继续!