#solrcloud 与多实例部署
1.参照之前的文章搭建出单个solr环境
- 可以在windows下搭建一个独立的solr环境。直接将tomcat压缩通过ftp工具上传到linux环境中。修改webapps下solr的web.xml的solr_home配置,可以直接linux系统上完成solr启动。通过之前的文章搭建solr。会对solr有一个大概的印象,方便以后的环境维护。
- 本文将配置好solr的tomcat拷贝到/opt/ase/下,重命名为aslortomcat 将原来tomcat根目录下的solr文件移动到/data/ase/目录下,并重命名为asolr。 即solr_home=/data/ase/asolrdata,目录在本人的系统中作为日志及数据存放目录,空间比较大。
2.zookeeper集群
Solrcloud环境部署,需要使用zookeeper做集群。所以我们先进行zookeeper的集群配置,以下操作都是在linux环境下的操作。下面做一个zookeeper伪集群搭建
- 下载zookeeper-3.4.6.tar.gz。 解压到/opt/ase/zookeeper
- 解压包,并且将解压出的zookeeper文件包重新命名为azookeeper。
- 同级目录下创建出1zoo,在1zoo 下面创建出 data ,log 文件夹,在data文件夹下创建出文件myid,内容为1,内容的作用是一个zookeeper在集群中的标志。这边先不要管为什么,先将文件与文件夹创建出来,下面步骤就会了解为何这么创建目录及文件。
- 拷贝azookeeper,同级目录下复制出bzookeeper,czookeeper, 拷贝1zoo,同级别目录下复制出2zoo,3zoo. 修改2zoo的myid内容为2,3zoo的myid内容为3。
- 这样在zookeeper 文件目录下存在6个文件。分别为1zoo,2zoo,3zoo 与 azookeeper,bzookeeper,czookeeper
分别修改azookeeper,bzookeeper,czookeeper 下的 /conf/zoo.cfg 文件
内容如下: (注:172.172.177.47 是本机服务器的地址)
azookeeper
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/ase/zookeeper/1zoo/data
clientPort=2181
server.1=172.172.177.47:2888:3888
server.2=172.172.177.47:2988:3988
server.3=172.172.177.47:2088:3088
dataLogDir=/opt/ase/zookeeper/1zoo/log
bzookeeper
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/ase/zookeeper/2zoo/data
clientPort=2281
server.1=172.172.177.47:2888:3888
server.2=172.172.177.47:2988:3988
server.3=172.172.177.47:2088:3088
dataLogDir=/opt/ase/zookeeper/2zoo/log
czookeeper
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/ase/zookeeper/3zoo/data
clientPort=2381
server.1=172.172.177.47:2888:3888
server.2=172.172.177.47:2988:3988
server.3=172.172.177.47:2088:3088
dataLogDir=/opt/ase/zookeeper/3zoo/log
- 上面的clientPort 是zookeeper 的端口号, dataDir是后面zookeeper统一管理文件的目录地址。里面的myid等于zookeeper在集群中的位置
- 依次启动3个zookeeper,就可以完成zookeeper搭建
- zookeeper启动命令: ./azookeeper/bin/zkServer.sh start
- zookeeper停止命令 ./azookeeper/bin/zkServer.sh stop
- zookeeper查看状态 ./azookeeper/bin/zkServer.sh status 可以看到一个leader,两个follower。
- zookeeper 集群是推选机制,所以官方建议搭建是奇数个。个人理解是举手表决,偶数个容易出现相等的情况,导致此次推举主失败
- zookeeper 日志文件非常有必要优化,参见【博客】(http://www.tuicool.com/articles/MbUb63n)
3.SolrCloud配置与多实例配置
- solrcloud配置是将solr服务器与zookeeper集群关联起来,让solr集群的信息由zookeeper来管理。实现solr服务器效率运作。配置步骤如下:
1.修改asolrtomcat/bin/catalina.sh 在文件中加入如下jvm参数:
export JAVA_OPTS=”$JAVA_OPTS -DnumShards=1 -DzkHost=172.172.177.47:2181,172.172.177.47:2281,172.172.177.47:2381 -Djetty.port=8081” 这边端口号保持和asolrtomcat端口保持一致。2.参数说明:
jetty.port属性会最后被作为solr对外提供的对外服务接口,配置为和相应的tomcat实例一样的访问端口号即可。
numShards:默认为1. 集群中shard的个数,shard才是真正分布式搜索的服务,否则该集群中启动多少台服务器,都是replica, replica只是在该shard挂掉后才起作用。
-DzkHost:配置zookeeper集群地址3.修改solr_home中solr.xml.本人配置内容示例如下:这边本人配置了3个core,shard=”shard1” 表示都配置在第一个分片下。
示例中本人只搭建了一个asolrtomcat,如果有bsolrtomcat…需要修改shard=”shard1” 同事修改tomcat的catalina.sh的分片个数<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <solr persistent="false"> <cores adminPath="/admin/cores" hostPort="8180" hostContext="${hostContext:solr}"> <core default="true" instanceDir="product" name="product" shard="shard1" collection="product" /> <core default="true" instanceDir="ams" name="ams" shard="shard1" collection="ams" /> <core default="true" instanceDir="comment" name="comment" shard="shard1" collection="comment" /> </cores> </solr>
- 4.现在问题出现了。我们修改了asolrtomcat的catalina.sh,使asolrtomcat关联上了zookeeper的集群,但是,我这边并没有想其他文章一样在catalina.sh中配置 -Dsolr.solr.home,-Dbootstrap_confdir,-Dcollection.configName.那么我们怎么样将solr_home中的配置文件交给zookeeper集群统一管理呢? solr提供了一个工具,可以将solr_home中的配置文件直接传给zookeeper。步骤如下:
- 1)本人使用的是solr-4.10.3.zip,将该包上传至linux服务器,unzip solr-4.10.3.zip ==> cd /opt/ase/solr-4.10.3/example ==> java -jar start.jar ==> 打开新的操作窗口,cd /opt/ase/solr-4.10.3/example/scripts/cloud-scripts ==> 执行脚本 ./zkcli.sh -zkhost 172.172.177.47:2181,172.172.177.47:2281,172.172.177.47:2381 -cmd bootstrap -solrhome /data/ase/asolr
- 2)看清楚上面的最后执行脚本,该脚本作用就是将本人solr_home上传至zookeeper集群。 根据实际情况修改脚本中的地址及路径。
4.总结及其他注意点
- 至此我们的SolrCloud环境已经搭建好,而且实现了多个solr实例,根据实际情况,复制上面步骤可以方便的扩展solrtomcat容器。提高SolrCloud威力
- 注意点就是,1.修改solrtomcat 的catalina.sh。 2.修改solr_homed的solr.xml文件,注意分片的个数以及solr_home所在的分片。
- zookeeper如果不仅仅只修改zoo.cfg文件。也需要对zookeeper的日志做调整,不然会在zookeeper同级目录下生成zookeeper.out日志文件,并且无线写入,最终撑爆内存。