简介
Solr是一个基于Apache lucene高可用、可扩展、容错性强的企业级别的应用搜索服务,它提供分布式索引、副本、平衡查询负载、自动故障转移和恢复、中心化配置等特性。
它对外提供类似于Web-service的API接口,可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
官方地址
solr集群搭建
版本说明
本文根据业务场景,并没有使用最新的版本,相关版本:solr-4.6.1、zookeeper-3.4.6。
zk搭建
zookeeper集群搭建(3个实例)
- 下载zookeeper-3.4.5.tar.gz,并解压缩放在/home/server/sorlcloud/目录中,如果没有这个目录则创建。
- cp -r zookeeper-3.4.5 zookeeper-3.4.5-2181 #最后一个数为端口号
- cp -r zookeeper-3.4.5 zookeeper-3.4.5-2182
- cp -r zookeeper-3.4.5 zookeeper-3.4.5-2183
- 在每个对应的zookeeper目录中,创建data目录,并在data目录生成myid,写入值分别为1、2、3作为ID
- cp conf/zoo_sample.cfg conf/zoo.cfg,并修改配置文件,三个zookeeper除了data和clientPort不一样外,集群节点信息配置相同。
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
# 修改对应的data路径
dataDir=/home/server/zookeeper-3.4.5-2181/data
# the port at which the clients will connect
clientPort=2181
#集群中节点信息,包括ID, IP, 投票和选取端口
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
- 启动zookeeper,分别进入相应的目录中,运行bin/zkServer.sh start
- 分别检查每个zookeeper的状态,运行bin/zkServer.sh status,如果需要停止bin/zkServer.sh stop
二、solrcloud搭建
- 下载solr-4.6.1.tgz,并解压到sorlcloud,同样复制2个节点。
- cp -r solr-4.6.1 solr-4.6.1-8983
- cp -r solr-4.6.1 solr-4.6.1-8984
- 进入solr-4.6.1-8983/example/cloud-scripts/中,上传solr配置文件到zookeeper,使用如下命令
#zkhost指定zookeeper的集群的地址,多个用逗号分隔,同时可以指定子路径,只需要在其中一个上指定即可。
#solrhome必须指定,它是solr.xml文件所在目录,当然用户可以自行配置
#configname指定上传的配置文件名
./zkcli.sh -zkhost 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183<span style="color:#ff0000;">/solr</span> -cmd upconfig -confdir /home/server/solrcloud/solr-4.6.1-8983/example/solr -confname collection1
这条命令最终会在zookeeper集群的/solr/configs目录中生成collection1配置文件,如果不指定zookeeper的子路径,默认在zookeeper的/configs目录中生成,这样很容易跟其它使用该zookeeper集群的配置冲突,建议带子路径上传。
- 在zookeeper中,使用bin/zkCli.sh连接上zookeeper,并使用zk的命令查看配置文件是否成功上传。
ls /solr/configs 正常可以看到上传的configname, 配置文件尽量不从其它地方导入zk,这样很容易出问题,后面会谈到。
- 启动solr,根据solr的官方文档,solr有几种启动方式:1.solr默认支持使用jetty容器启动(配置最简单);2. 使用tomcat等其它容器启动;3.其它
建议使用jetty启动,网上其它博客都是使用tomcat启动,配置繁琐,而且种jar包来回拷贝,很容易出错。建议一个脚本:
#!/bin/bash
LOGHOME="/home/server/solr/"
BASE_DIR=/home/server/solrcloud/solr-4.6.1-8983/example/solr
JVM_ARGS="-Xmx2g -Xms2g -XX:MaxDirectMemorySize=5g -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="$2" -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -verbose:gc -Xloggc:"$LOGHOME"/gc.log -XX:CMSInitiatingOccupancyFraction=65 -XX:+UseCMSCompactAtFullCollection -XX:MaxTenuringThreshold=10 -XX:MaxPermSize=156M -XX:SurvivorRatio=3 -XX:NewRatio=2 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseParNewGC -XX:+UseConcMarkSweepGC"
ZK_SERVERS="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183/solr"
ZK_TIMEOUT=10000
SHARDS=1 #指定分片数目
JETTY_PORT=$1 #从命令行获取端口号
exec java $JVM_ARGS -Djetty.port=$1 -Dbootstrap_conf=true -DnumShards=$SHARDS -DzkHost=$ZK_SERVERS -DzkClientTimeout=$ZK_TIMEOUT -Dsolr.solr.home=$BASE_DIR -jar $BASE_DIR/start.jar
执行./start.sh 8700 8701
- 接下来就可以访问http://localhost:8700/solr