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集群中
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
修改solr.xml 新增zkHost节点,修改hostPort为tomcat的启动端口
<?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>
在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,打印日志记录
# 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 log4j.appender.file.layout.ConversionPattern = [%-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
官网参考链接: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. 通过管理页面创建
此处注意:instancedir 一定要在solr_home目录中,否则重启时,会找不到core实例,导致cores启动失败
创建3个分片,每个分片两个副本集,创建成功之后,查看如下
c. 通过api接口删除
http://192.168.0.177:8983/solr/admin/cores?action=UNLOAD&core=dev_values-shard1-replica1&deleteIndex=true&deleteDataDir=true&deleteInstanceDir=true