SolrCloud介绍
SolrCloud简介
SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心与协调服务中心。
它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)实时搜索
4)查询时自动负载均衡
Zookeeper简介
Zookeeper直译是 动物园管理员,他是用来管hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员, ApacheHbase和 Apache Solr 的分布式集群都用到了zookeeper;zookeeper是一个分布式的、开源的程序协调服务,是hadoop项目下的一个子项目。
SolrCloud结构
SolrCloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引。SolrCloud需要Solr基于Zookeeper部署,由于SolrCloud需要由多台服务器组成,由zookeeper来进行协调管理。
SolrCloud搭建
两大组成部分
1、 zookeeper集群
a) zookeeper需要保证高可用,需要搭建集群
b) zookeeper需要进行投票和选举机制,最少需要三个节点
c) zookeeper的三个节点,注意修改端口号不一样
2、 Solr集群
a) 需要四个节点(solr应用服务器);
b) 四台tomcat部署4个 solr应用服务器
c) 整个collection分成两个分片,每个分片都由两个服务器组成,master和slave
zookeeper集群搭建
复制
#复制三份zookeeper
cd /usr/local/
mkdir ./solr/solr-cloud/
cp zookeeper-3.4.8.tar.gz solr/solr-cloud/
cd solr/solr-cloud/
#解压
tar -xzvf zookeeper-3.4.8.tar.gz
#重命名为zookeeper01,后续再复制02,03
mv zookeeper-3.4.8 zookeeper01
cp -r zookeeper01/ zookeeper02 && cp -r zookeeper01/ zookeeper03
配置
给每个zookeeper创建data文件夹
#对/usr/local/solr/solr-cloud目录下的3个zookeeper创建data文件夹
mkdir zookeeper01/data && mkdir zookeeper02/data && mkdir zookeeper03/data
#对/usr/local/solr/solr-cloud目录下的3个zookeeper创建 myid 文件,并分别写入1,2,3
vim zookeeper01/data/myid
#对上述文件写入数字 1
![](https://i-blog.csdnimg.cn/blog_migrate/2dbf573195f0805437fb3115ab5cf8f3.png)
vim zookeeper02/data/myid
#对上述文件写入数字 2
vim zookeeper03/data/myid
#对上述文件写入数字 3
重命名每个zookeeper配置文件
mv zookeeper01/conf/zoo_sample.cfg zookeeper01/conf/zoo.cfg
mv zookeeper02/conf/zoo_sample.cfg zookeeper02/conf/zoo.cfg
mv zookeeper03/conf/zoo_sample.cfg zookeeper03/conf/zoo.cfg
修改每个zookeeper配置文件
修改dataDir工作目录(每个zookeeper对应路径;
如/usr/local/solr/solr-cloud/zookeeper01/data)
修改clientPort客户端连接端口(每个不同三台对应3181,3182,3183)
在三个配置文件底部都加上zookeeper集群的server编号、地址、端口:端口
server.1=192.168.12.128:2881:3881
server.2=192.168.12.128:2882:3882
server.3=192.168.12.128:2883:3883
格式说明:server.myid文件中的编号=ip:启动监听端口:选举端口
vim zookeeper01/conf/zoo.cfg
修改后效果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/220f05a00e4a04e6c86ddfc50e9c763d.png)
vim zookeeper02/conf/zoo.cfg
修改后效果如下: 同时修改dataDir clientPort
vim zookeeper03/conf/zoo.cfg
修改后效果如下:
启动
zookeeper01/bin/zkServer.sh start
zookeeper02/bin/zkServer.sh start
zookeeper03/bin/zkServer.sh start
![](https://i-blog.csdnimg.cn/blog_migrate/560681d4b778f002ee5072527e306884.png)
如果启动失败,可以在启动命令之后添加start-foreground;查看启动失败日志。
查看状态
./zookeeper01/bin/zkServer.sh status
./zookeeper02/bin/zkServer.sh status
./zookeeper03/bin/zkServer.sh status
![](https://i-blog.csdnimg.cn/blog_migrate/e6b7c27cddb1b8b10a6bb1051943b3cb.png)
搭建solr集群
需要4个单机solr应用服务器。安装一个黏贴复制。
把solrhome复制到solr-cloud目录下,复制4份
cd /usr/local/solr/
cp -r solrhome/ solr-cloud/solrhome01
cp -r solrhome/ solr-cloud/solrhome02
cp -r solrhome/ solr-cloud/solrhome03
cp -r solrhome/ solr-cloud/solrhome04
安装(复制)4个tomcat
#复制4个之前安装的单机版的solr
cp -r tomcat/ solr-cloud/tomcat-solr01
cp -r tomcat/ solr-cloud/tomcat-solr02
cp -r tomcat/ solr-cloud/tomcat-solr03
cp -r tomcat/ solr-cloud/tomcat-solr04
修改tomcat端口号8081~8084
d solr-cloud
server.xml需要修改3个地方的端口号(server port(第22行)、http port(第71行)、connector port(第93行));与其它tomcat的不冲突就好,端口依次可以为(8001,8081,8011;8002,8082,8012;8003,8083,8013;8004,8084,8014)
vim tomcat-solr01/conf/server.xml
如下图第一个Tomcat为例,修改三个端口号8001,8081,8011,其他Tomcat类似(8002,8082,8012;8003,8083,8013;8004,8084,8014)
vim tomcat-solr02/conf/server.xml
vim tomcat-solr03/conf/server.xml
vim tomcat-solr04/conf/server.xml
修改每个solr的web.xml
4个tomcat都要修改为对应的solrhome
vim tomcat-solr01/webapps/solr/WEB-INF/web.xml
vim tomcat-solr02/webapps/solr/WEB-INF/web.xml
vim tomcat-solr03/webapps/solr/WEB-INF/web.xml
vim tomcat-solr04/webapps/solr/WEB-INF/web.xml
修改第43行的solrhome路径
例如 /usr/local/solr/solr-cloud/solrhome01
效果:
![](https://i-blog.csdnimg.cn/blog_migrate/a2ec753124100d83afd583897c1247b7.png)
修改每个solrhome里面的solr.xml
vim solrhome01/solr.xml
vim solrhome02/solr.xml
vim solrhome03/solr.xml
vim solrhome04/solr.xml
第32的host的内容修改为${host:192.168.12.128}【注意】原来的为${host:}
第33行hostPort的内容修改为${jetty.port:8081}【注意】原来的为${jetty.port:8983};另外修改的端口号应该对应每台tomcat的端口号。
如solrhome01需要修改为8081,其他的依次为8082、8083、8084
![](https://i-blog.csdnimg.cn/blog_migrate/1b632cf31039613cb2bf47a8c13b792f.png)
上传配置文件到zookeeper集群
#进入/usr/local/solr/solr-4.10.3/example/scripts/cloud-scripts,执行命令
cd /usr/local/solr/solr-4.10.3/example/scripts/cloud-scripts
#需要运行的以下命令,需要修改IP地址和修改solrcore的路径地址
./zkcli.sh -zkhost 192.168.12.128:3181,192.168.12.128:3182,192.168.12.128:3183 -cmd upconfig -confdir /usr/local/solr/solr-cloud/solrhome01/collection1/conf -confname myconf
zookeeper是对配置文件的集中管理,
以上命令的作用是把配置文件上传给zookeeper,由zookeeper管理配置文件
zookeeper把所有的solr集群的配置文件进行统一管理.
zkcli.sh: 命令名称
参数说明:
-zkhost:指定zookeeper的ip与port
-cmd upconfig: 上传配置文件
-confdir: 配置文件的目录
-confname: 指定配置文件存放的文件夹名称
注意:当solr的配置文件发生改变需用zkcli.sh命令重新上传配置文件到zookeeper
查看zookeeper配置文件(了解)
#进入任意zookeeper,使用客户端进行查看
cd /usr/local/solr/solr-cloud/zookeeper01/bin
./zkCli.sh -server 192.168.12.128:3181
#执行上面命令后,使用ls命令查看zookeeper配置信息,再出来的界面分别输入。。按ctrl+c退出
ls /
ls /configs
ls /configs/myconf
![](https://i-blog.csdnimg.cn/blog_migrate/a944d1bf38c1a3e780bb30e3821aa474.png)
设置zookeeper的地址给tomcat
# 需要修改每个Tomcat的bin/catalina.sh文件
cd /usr/local/solr/solr-cloud/
vim tomcat-solr01/bin/catalina.sh
vim tomcat-solr02/bin/catalina.sh
vim tomcat-solr03/bin/catalina.sh
vim tomcat-solr04/bin/catalina.sh
#如tomcat01,其他Tomcat都一样设置,第251行添加JAVA_OPTS,即如下内容:
JAVA_OPTS="-DzkHost=192.168.12.128:3181,192.168.12.128:3182,192.168.12.128:3183"
![](https://i-blog.csdnimg.cn/blog_migrate/e6e6e3e61bdbec57e0f9204f3c753b27.png)
启动所有tomcat
./tomcat-solr01/bin/startup.sh
./tomcat-solr02/bin/startup.sh
./tomcat-solr03/bin/startup.sh
./tomcat-solr04/bin/startup.sh
访问任意一个solr集群的节点都可以 如http://192.168.12.128:8081/solr
![](https://i-blog.csdnimg.cn/blog_migrate/1d211e0437929f18072259a58c8d3028.png)
集群分片
集群中有四个solr节点创建新集群taotao_collection(名字可以自行取,不要原有的重复即可),将集群分为两片,每片一个副本。
![](https://i-blog.csdnimg.cn/blog_migrate/c755b011438876feabdf2099a55c87a0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/65985b0471b0133a57eb6bd7d2c963b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/44d5de16e1f98fb244fd02e969d014e4.png)
删除原来的solrcore
http://192.168.12.128:8081/solr/admin/collections?action=DELETE&name=collection1
![](https://i-blog.csdnimg.cn/blog_migrate/8f324de2e199cbaadb31e1e56f1c8a77.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0acda47aa8b67699ada222b2f97441a1.png)