一:Solr简介
SolrCloud是Slor提供的分布式搜索方案,当需要大规模、容错、分布式索引和检索能力的时候使用SolrCloud,当索引量很大,搜索请求并发高使用SolrCloud。
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,主要思想是使用Zookeeper作为集群的配置信息中心。
功能:
1、集中式的配置信息
2、自动容错
3、近实时搜索
4、查询时自动负载均衡
Solr集群的系统架构:
物理结构:
三个solr实例,每个实例包括两个core,组成一个SolrCloud。
逻辑结构:
索引集合包括两个Shard(Shard1和Shard2),shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由Zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决该可用的问题。
用户发起索引请求分别从shard1和shard2上获取,解决高并发的问题。
Collection:
Collection在SolrCloud集群上是一个逻辑意义完整的索引结构,常常被划分为一个或者多个shard,它们使用相同的配置信息。
比如:针对商品信息搜索可以创建一个collection。
collection=shard1+shard2+....+shardX
Core:
每个Core是Solr中一个独立运行单位,提供 索引和搜索服务。一个shard需要由一个Core或多个Core组成。由于collection由多个shard组成所以collection一般由多个core组成。
Master或Slave:
Shard:
Collection的逻辑分片。每个Shard被化成一个或者多个replication,通过选举确定哪个是Leader。
二:安装
将要搭建Solr集群的架构:
Zookeeper作为集群的管理工具。
1、集群管理:容错、负载均衡。
2、配置文件的集中管理
3、集群的入口
需要实现zookeeper 高可用。需要搭建集群。建议是奇数节点。需要三个zookeeper服务器。
搭建solr集群需要7台服务器。
搭建伪分布式:
需要三个zookeeper节点
需要四个tomcat节点。
1、准备文件
jdk-7u72-linux-i586.tar.gz
apache-tomcat-7.0.47.tar.gz
zookeeper-3.4.6.tar.gz
solr-4.10.3.tgz
三:开始安装
1、Zookeeper集群的搭建
1) 将Zookeeper压缩包上传到服务器上,解压缩,并复制三份
tar -zxvf zookeeper-3.4.6.tar.gz
cp -r zookeeper-3.4.6 zookeeper01
cp -r zookeeper-3.4.6 zookeeper02
cp -r zookeeper-3.4.6 zookeeper03
2)在每个zookeeper目录下创建data目录
mkdir zookeeper01/data
mkdir zookeeper02/data
mkdir zookeeper03/data
3)在data目录下创建myid文件,内容是每个实例的id,其他两个实例的id分别为2、3。
echo 1 >> myid
4)修改配置文件,把conf目录下的zoo_sample.cfg文件改名为zoo.cfg。
cp zoo_sample.cfg zoo.cfg
5)修改zoo.cfg文件
dataDir:数据保存的目录
clientPort:客户端连接Zookeeper的端口号,需要保证每个端口号不冲突。
第三部分:集群中的节点列表1、2、3代表节点的id
ip后的端口是zookeeper内部通讯的端口和投票选举的端口,每个端口都不能重复。
6)创建统一启动的批处理文件。
vim start-all.sh
给文件赋可执行权限:
chmod u+x start-all.sh
7)执行检查
8)创建统一关闭执行文件
vim shutdown-all.sh
chmod u+x shutdown-all.sh
至此Zookeeper集群搭建成功。
2、Solr集群的搭建
1)创建4个tomcat实例,修改tomcat的端口号,每个tomcat运行在不同的端口上8180、8181、8182、8183。一共三处端口,全部修改避免冲突。
vim tomcat01/conf/server.xml
2)部署solr的war包到tomcat/webapps目录下。将solr-4.10.3/dist目录下的solr-4.10.3.war复制到tomcat/webapps目录下。
3)为每个solr实例创建一个solrHome。
cp -r /usr/local/app/application/solr-4.10.3/example/solr /usr/local/app/application/solrhome01
cp -r /usr/local/app/application/solr-4.10.3/example/solr /usr/local/app/application/solrhome02
cp -r /usr/local/app/application/solr-4.10.3/example/solr /usr/local/app/application/solrhome03
cp -r /usr/local/app/application/solr-4.10.3/example/solr /usr/local/app/application/solrhome04
4)将solr需要的jar包复制到项目中。(复制前需要启动将四个tomcat启动一次,为了解压缩solr的war包)
cd /usr/local/app/application/solr-4.10.3/example/lib/ext/
cp * /usr/local/app/application/tomcat01/webapps/solr-4.10.3/WEB-INF/lib/
cp * /usr/local/app/application/tomcat02/webapps/solr-4.10.3/WEB-INF/lib/
cp * /usr/local/app/application/tomcat03/webapps/solr-4.10.3/WEB-INF/lib/
cp * /usr/local/app/application/tomcat04/webapps/solr-4.10.3/WEB-INF/lib/
5)修改solr的web.xml文件,把solrhome关联起来。 (四个全部都要修改,不同的solrhome对应不同的端口)
cd /usr/local/app/application/solrhome01/
vim solr.xml
6)建立solr与solrhome的关联,修改tomcat中solr的solrhome的路径。(四个solr都需要修改)
vim tomcat01/webapps/solr-4.10.3/WEB-INF/web.xml
7)建立solr与zookeeper的关联关系。修改tomcat/bin目录下的catalina.sh 文件,关联solr和zookeeper。
vim /usr/local/app/application/tomcat01/bin/catalina.sh
JAVA_OPTS="-DzkHost=192.168.25.137:2181,192.168.25.137:2182,192.168.25.137:2183"
8)让Zookeeper统一管理配置文件,需要把solrhome/collection1/conf目录上传到zookeeper,上传任意solrhome中的配置文件即可。
使用工具上传配置文件:
cd /usr/local/app/application/solr-4.10.3/example/scripts/cloud-scripts/
./zkcli.sh -zkhost 192.168.25.137:2181,192.168.25.137:2182,192.168.25.137:2183 -cmd upconfig -confdir /usr/local/app/application/solrhome01/collection1/conf/ -confname myconf
9)查看是否上传成功。
查看zookeeper上的配置文件,使用zookeeper目录下的bin/zkCli.sh命令查看zookeeper上的配置文件:
cd /usr/local/app/application/zookeeper01/bin/
./zkCli.sh
10)启动每个tomcat实例,写一个启动tomcat的批处理文件
chmod +x start-tomcat.sh
三:window下访问
错误:
解决方案:
将tomcat关闭,将webapps下所有的solr-1.10.3改名为solr,重新启动tomcat。
四:操作Solr
1、创建新的Collection进行分片处理。
http://192.168.25.137:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
2、删除不用的Collection。
http://192.168.25.137:8180/solr/admin/collections?action=DELETE&name=collection1