在做网站内搜索的时候,我们往往不会直接调用数据库进行搜索,这样数据库的负担很大而且性能低下。我们可以选择solr作为搜索工具,其中solr支持数据库数据导入,中文分词,以及分布式集群。
当搜索并发不是很高,我们直接使用solr单机版就可以了,如学校和企业的门户网站等。
但是当需要大规模,容错和分布式索引时候,我们就需要使用solrCloud来满足需求。它有几个特点
- 集中式的配置信息(借助zookeeper)
- 自动容错
- 近实时搜索
- 查询时自动负载均衡
这里介绍一下伪集群solrCloud的搭建过程。
首先看一下真实环境下的搭建架构图
真实环境中需要7台服务器做分布式集群,这里由于条件限制,先在一台虚拟机上安装伪集群,在搭建集群solr的时候一般有一下三个步骤
- 安装zookeeper集群
- 创建4个tomcat实例,端口为6060、7070、8080、9090
- 使用单机版的solr作为集群的节点使用
具体操作步骤如下
1.首先创建solrcloud,然后拷贝四个tomcat,注意tomcat里面已经部署好了solr的war包
2.修改tomcat的server.xml配置文件,注意有三个端口都需要修改,比如8005,8080,8009,可以依次加减1000左右,如7005、7070、7009
3.复制solrCore文件夹,修改core.properties文件,将名字改为core(你当前项目的名字即可),然后复制4个solrHome,分别为solrHome1...
这样创建的solr集群就有两个实例,为solrCore和core,也可以省略该步骤。
cd /usr/local/solrHome
cp solrCore core -rf
cd core
vim core.properties
4.修改solr服务中指向solr索引的路径,在tomcat下的solr下的web.xml文件修改,四个tomcat都需要修改
<env-entry-value>/usr/local/solrcloud/solrHome1</env-entry-value>
5.配置 Tomcat 的 catalina.sh
Tomcat1:放入 catalina.sh 的第一行即可
JAVA_OPTS="$JAVA_OPTS -DzkHost=192.168.30.20:2181,192.168.30.20:2182,192.168.30.20:2183 -Dbootstrap_confdir=/usr/local/solrcloud/solrHome1/core/conf -Dcollection.configName=solr -DnumShards=2 -DreplicationFactor=2"
Tomcat2、Tomcat3、Tomcat4
JAVA_OPTS="$JAVA_OPTS -DzkHost=192.168.30.20:2181,192.168.30.20:2182,192.168.30.20:2183 -DnumShards=2 -DreplicationFactor=2"
6.在solrHome1下配置solr.xml文件
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${jetty.port:8080}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
同理,编辑solrHome2,solrHome3和solrHome4的solr.xml文件
7.启动tomcat,开启防火墙,每次启动都要确定端口没有被占用,如果已经启动了tomcat先运行shutdown.sh然后再启动。