tomcat7.0+zookeeper+solr5.0.0搭建solr集群

时间:2021-01-20 10:01:27

solrCloud的搭建可以有两种方式:使用solr内嵌的jetty来搭建;使用外部web容器tomcat来搭建。对于使用jett来搭建参考solr官方的手册照着做就ok了,非常简单,下面我主要讲的是如何使用tomcat来搭建solrCloud。 因最新版本solr5.0.0较4.x版本文件结构上有一些变化,网上大多是以前版本的安装,特在此记录一下。

准备工作

solr5.0.0

apache-tomcat-7.0.42

zookeeper3.4.6

1.搭建tomcat单机版solr

    可参照http://www.cnblogs.com/iiot/p/4408846.html

a. 将solr-5.0.0/server/webapps/solr.war目录下的solr.war拷贝到/usr/apache-tomcat-7.0.42/webapps/下,启动tomcat解压“solr.war”

b. 在/usr/apache-tomcat-7.0.42/webapps/solr/下新建文件夹solr_home(此处solr_home目录可以根据实际情况建立)

c. 把solr解压目录中的"solr-5.0.0/server/solr"目录下的所有内容复制到solr_home中。(此处solr_home为  /usr/local/solr5.0.0/solr_cloud)

d. 在solr_home中新建自己的conf。可以从configsets中复制一个出来,修改文件夹名称

e. apache-tomcat-7.0.42-solr/webapps/solr/WEB-INF/classes目录下加入log4j.properties,打印日志记录

2.安装配置zookeeper集群

具体下载,安装,配置不详细说了,比较简单,网上一搜一大堆。只列出我的关键配置项,如下:

clientPort=2181

server.1=slave-01:12888:13888 #server.2=slave-02:12888:13888

一般来讲zookeeper集群为奇数个,最少3个,来维持其稳定性,保证一个节点宕机不影响使用,因服务器资源问题,此处暂时只用1个

3.安装配置solrcloud

我们选择/usr/local/solr5.0.0/solr_cloud目录存放Solr的库文件和配置文件,该目录下有lib和device_values两个子目录。 lib下为jar文件,包括/server/lib/ext中的和war包里的jar,device_values里为conf文件 存储索引的目录,设置为/data/solr/dev_values(可以根据实际情况修改)

将配置文件上传到ZooKeeper集群中

tomcat7.0+zookeeper+solr5.0.0搭建solr集群tomcat7.0+zookeeper+solr5.0.0搭建solr集群
java -classpath .:/usr/local/solr5.0.0/solr_cloud/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.0.177:2181 -confdir /usr/local/solr5.0.0/solr_cloud/device_values/conf -confname dev_values

java -classpath .:/usr/local/solr5.0.0/solr_cloud/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection dev_values -confname dev_values -zkhost 192.168.0.177:2181
View Code


修改solr.xml  新增zkHost节点,修改hostPort为tomcat的启动端口

tomcat7.0+zookeeper+solr5.0.0搭建solr集群tomcat7.0+zookeeper+solr5.0.0搭建solr集群
<?xml version="1.0" encoding="UTF-8" ?>

<solr>

  <solrcloud>

    <str name="host">${host:}</str>
    <!-- <int name="hostPort">${jetty.port:8983}</int>-->
    <int name="hostPort">8983</int>
    <str name="zkHost">192.168.0.177:2181</str>
    <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>

  </solrcloud>

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

</solr>
View Code


在schema.xml中增加要索引的字段  uniqueKey根据实际情况修改  默认为id

   <field name="rowkey" type="string" indexed="true" stored="true" required="true" multiValued="false" />
   <field name="did" type="string" indexed="true" stored="true" multiValued="false"/>
   <field name="dvid" type="string" indexed="true" stored="true" multiValued="false"/>
   <field name="timestamp" type="string" indexed="true" stored="true" multiValued="false"/>
   <field name="value" type="string" indexed="true" stored="true" multiValued="false"/>
   <field name="model" type="string" indexed="true" stored="true" multiValued="false"/>


 <uniqueKey>rowkey</uniqueKey>

 

修改日志路径及格式(如不想要日志,此步骤可以省略)

默认情况下,solr的日志是瞬时的,tomcat重启后,就消失了。可以通过图形化界面http://ip:port/solr/#/~logging查看,在linux命令行下可以通过命令curl 'http://ip:port/solr/admin/info/logging?wt=json&since=0'获取。 生成持久日志的方法: apache-tomcat-7.0.42-solr/webapps/solr/WEB-INF/classes目录下加入log4j.properties,打印日志记录

 

tomcat7.0+zookeeper+solr5.0.0搭建solr集群tomcat7.0+zookeeper+solr5.0.0搭建solr集群
#  Logging level
solr.log=/var/logs/solr
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=999

#log4j.appender.file=org.apache.log4j.DailyRollingFileAppender 
#log4j.appender.file.DatePattern = '.'yyyy-MM-dd


#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n
log4j.appender.file.layout.ConversionPattern = \n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} %n%m%n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF
View Code

 

官网参考链接:http://wiki.apache.org/solr/SolrLogging

 

修改启动脚本

在Tomcat的启动脚本bin/catalina.sh中,增加如下配置:

JAVA_OPTS="$JAVA_OPTS -server -Xmx1024m -Xms256m -verbose:gc -Xloggc:solr_gc.log -Dbootstrap_confdir=/usr/local/solr5.0.0/solr_cloud/device_values/conf -DzkHost=192.168.0.177:2181"

 

将solo5.0.0文件夹scp到其他服务器

启动Tomcat服务器:

cd servers/apache-tomcat-7.0.42 bin/catalina.sh start

访问 http://192.168.0.177:8983/solr/#/  查看是否出现页面

启动其它服务器的tomcate

 

5、创建Collection、Shard和Replication

两种方式

a. 通过api接口创建

http://192.168.0.177:8983/solr/admin/cores?action=CREATE&name=dev_values-shard1-replica1&instanceDir=/usr/local/solr5.0.0/solr_cloud/dev_values-shard1-replica1&dataDir=/data/solr/dev_values/dev_values-shard1-replica1&collection=dev_values&shard=shard1

b. 通过管理页面创建

tomcat7.0+zookeeper+solr5.0.0搭建solr集群

 

此处注意:instancedir 一定要在solr_home目录中,否则重启时,会找不到core实例,导致cores启动失败

创建3个分片,每个分片两个副本集,创建成功之后,查看如下

 

tomcat7.0+zookeeper+solr5.0.0搭建solr集群

c. 通过api接口删除

http://192.168.0.177:8983/solr/admin/cores?action=UNLOAD&core=dev_values-shard1-replica1&deleteIndex=true&deleteDataDir=true&deleteInstanceDir=true