solr学习(6.1)solrcloud集群的搭建
来源:互联网 发布:网络打印机 编辑:程序博客网 时间:2024/05/29 18:35
Solrcloud介绍:
SolrCloud(solr集群)是Solr提供的分布式搜索方案。
当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud。
当索引量很大,搜索请求并发很高时,同样需要使用SolrCloud来满足这些需求。
不过当一个系统的索引数据量少的时候是没有必要使用SolrCloud的。
SolrCloud是基于Solr和Zookeeper的分布式搜索方案。它的主要思想是使用Zookeeper作为SolrCloud集群的配置信息中心,统一管理solrcloud的配置,比如solrconfig.xml和schema.xml。
Solrcloud特点功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡
2. Solr集群的系统架构
2.1. 物理结构
三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud。
2.2. 逻辑结构
索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。
用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。
2.2.1. collection
Collection在SolrCloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个Shard(分片),它们使用相同的配置信息。
比如:针对商品信息搜索可以创建一个collection。
collection=shard1+shard2+....+shardX
2.2.2. Core
每个Core是Solr中一个独立运行单位,提供 索引和搜索服务。一个shard需要由一个Core或多个Core组成。由于collection由多个shard组成所以collection一般由多个core组成。
2.2.3. Master或Slave
Master是master-slave结构中的主结点(通常说主服务器),Slave是master-slave结构中的从结点(通常说从服务器或备服务器)。同一个Shard下master和slave存储的数据是一致的,这是为了达到高可用目的。
2.2.4. Shard
Collection的逻辑分片。每个Shard被化成一个或者多个replication,通过选举确定哪个是Leader。
2.3. 需要实现的solr集群架构
Zookeeper作为集群的管理工具。
1、集群管理:容错、负载均衡。
2、配置文件的集中管理
3、集群的入口
需要实现zookeeper 高可用。需要搭建集群。建议是奇数节点。需要三个zookeeper服务器。
搭建solr集群需要7台服务器。
搭建伪分布式:
需要三个zookeeper节点
需要四个tomcat节点。
建议虚拟机的内容1G以上。
3. 环境准备
CentOS-6.5-i386-bin-DVD1.iso
jdk-7u72-Linux-i586.tar.gz
apache-tomcat-7.0.47.tar.gz
zookeeper-3.4.6.tar.gz
solr-4.10.3.tgz
Solrcloud的结构:
solrcloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard分片,每个分片由多台服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引。solrcloud是基于solr和zookeeper部署,zookeeper是一个集群管理软件,solrcloud需要由多台solr服务器组成,然后由zookeeper来进行协调管理。
由于solrcloud一般都是解决大数据量、大并发的搜索服务,所以搭建solrcloud之前,首先需要搭建zookeeper注册中心集群。
1)、搭建zookeeper集群步骤:需要三台zookeeper、分别是zk1、zk2、zk3,对应的端口分别为2281、2282、2283。
第一步:安装jdk环境,因为zookeeper是使用Java语言编写的;
第二步:准备zookeeper-3.4.6.tar.gz压缩包,解压并修改目录名称为zk1
第三步:进入zk1/conf目录,将zoo_sample.cfg文件名称改为zoo.cfg
第四步:修改zoo.cfg文件,配置集群信息(俩个截图信息都是配置在zoo.cfg文件中)
server.1=192.168.25.128:2881:3881
server.2=192.168.25.128:2882:3882
server.3=192.168.25.128:2883:3883
第五步:在dataDir(对应zoo.cfg配置文件中的目录结构)目录下创建myid文件,文件内容为1,对应server.1中的1。
第六步:拷贝zk1,复制两个目录zk2、zk3。并修改zoo.cfg和myid两个文件。
第七步:编写俩个脚本文件,分别启动zookeeper集群和查看集群中各个服务的状态。
start-all-zk.sh内容如下:
/home/work/solrcloud/zookeeper1/bin/zkServer.sh start
/home/work/solrcloud/zookeeper2/bin/zkServer.sh start
/home/work/solrcloud/zookeeper3/bin/zkServer.sh start
show-zk-status.sh内容如下:
/home/work/solrcloud/zookeeper1/bin/zkServer.sh status
/home/work/solrcloud/zookeeper2/bin/zkServer.sh status
/home/work/solrcloud/zookeeper3/bin/zkServer.sh status
第八步:启动每个zookeeper实例。
启动bin/zkServer.sh start
查看zookeeper的状态:
bin/zkServer.sh status
启动zookeeper
我启动了第一台服务出了如下异常,于是我想应该是防火墙的哪个配置未生效
异常信息:
Cannot open channel to 2 at election address h2/192.168.2.102:3882 java.NET.NoRouteToHostException: 没有到主机的路由
应该是防火墙配置改了未生效,于是重新启动了3台机器防火墙 service iptables restart,
下面是我重新启动后抛出的异常
异常信息:
Cannot open channel to 1 at election address h1/192.168.2.101:3881 java.net.ConnectException: 拒绝连接
解决异常
一开始认为是等待其他机器开启,但启动其他两台后一直出现该问题,所以花了半个小时查原因,后来检查没发现配置问题,但3台机器的hosts文件中有如下内容,决定尝试删掉后重启,果然正常启动
127.0.0.1 localhost h1 localhost4 localhost4.localdomain4
::1 localhost h1 localhost6 localhost6.localdomain6
再次重启成功
下图这里开始启动出错的原因是集群环境正等待着另外几台机器,否则一台也没办法进行选举等操作,第二台机器起来后就恢复正常了。
查看状态
2)、搭建solrcloud集群步骤:
第一步:复制4个单机版solr服务对应的tomcat,并分别修改端口为:8280、8380、8480、8580。
第二步:复制4个solrhome,分别为solrhome8280、solrhome8380、solrhome8480、solrhome8580。一个solr实例对应一个solrhome。
第三步:修改每个solr服务对应的Tomcat容器中solr项目的web.xml文件中的内容(目录结构为/usr/local/solrcloud/tomcat8280/webapps/solr/WEB-INF)
第四步:修改每个solrhome下的solr.xml,指定对应solr服务的tomcat的ip和端口。
第五步:设置tomcat的启动参数,在每个tomcat目录下的bin/catalina.sh,添加以下内容:
JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"
第六步:将solr配置文件上传到zookeeper中,进行统一管理,进入到/root/soft/solr-4.10.3/example/scripts/cloud-scripts目录中执行zkcli.sh命令:
./zkcli.sh -zkhost 192.168.136.135:2281,192.168.136.135:2282,192.168.136.135:2283 -cmd upconfig -confdir /usr/local/solrcloud/solrhome8280/collection1/conf -confname myconf(每个ip地址之间用逗号分隔)
搭建SolrCloud集群
把solrhome中的配置文件上传到zookeeper集群。使用zookeeper的客户端上传。
客户端命令位置:/root/solr-4.10.3/example/scripts/cloud-scripts
执行命令./zkcli.sh -zkhost 192.168.40.138:2181,192.168.40.138:2182,192.168.40.138:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf
时报错。
解决办法:
Easy fix: cd solr-4.8.0/example, Java -jar start.jar, (let it start up), Control-C. You'll now have files under solr-4.8.0-bin/example/solr-webapp/webapp including the missing jars in solr-4.8.0-bin/example/solr-webapp/webapp/WEB-INF/lib – Mark Bennett
上述解决办法来自http://stackoverflow.com/questions/15830090/reloading-zookeeper-solr-conf-schema-xml
即:在/root/solr-4.10.3/example目录下执行 java -jar start.jar 命令。
然后ctrl c 结束。或者是打开另一个窗口。
在
/root/solr-4.10.3/example/scripts/cloud-scripts
执行命令./zkcli.sh -zkhost 192.168.40.138:2181,192.168.40.138:2182,192.168.40.138:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf
即可完成配置文件上传。
第七步:编写脚本文件启动所有的solr服务
第八步:访问部署的solr集群中任意的端口服务
第八步:启动每个tomcat实例。要包装zookeeper集群是启动状态。
第九步:访问集群
第十步:创建新的Collection进行分片处理。
http://192.168.25.154:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
第十一步:删除不用的Collection。
http://192.168.25.154:8180/solr/admin/collections?action=DELETE&name=collection1
5. 使用solrJ管理集群
5.1. 添加文档
使用步骤:
第一步:把solrJ相关的jar包添加到工程中。
第二步:创建一个SolrServer对象,需要使用CloudSolrServer子类。构造方法的参数是zookeeper的地址列表。
第三步:需要设置DefaultCollection属性。
第四步:创建一SolrInputDocument对象。
第五步:向文档对象中添加域
第六步:把文档对象写入索引库。
第七步:提交。
5.2. 查询文档
创建一个CloudSolrServer对象,其他处理和单机版一致。
四、spring集成
6. 把搜索功能切换到集群版
java代码使用方法不变,因为SolrServer是CloudSolrServer的父类
- solr学习(6.1)solrcloud集群的搭建
- Solr之SolrCloud集群搭建
- SolrCloud集群的搭建
- 分布式搜索之搭建Solrcloud(Solr集群)
- 分布式搜索之搭建Solrcloud(Solr集群)
- 分布式搜索之搭建Solrcloud(Solr集群)
- 分布式搜索之搭建Solrcloud(Solr集群)
- 初识Solr(二):Solr集群(SolrCloud)搭建
- solr全文检索技术学习(三)-搭建SolrCloud集群问题总结
- solr入门之搭建具有安全控制和权限管理功能的SolrCloud集群
- SolrCloud的介绍以及SolrCloud的集群搭建
- Solr集群的搭建
- solr集群的搭建
- Solr的集群搭建
- solr集群的搭建
- solr学习第九课程----SolrCloud的安装
- Solr之SolrCloud集群测试
- 基于zookeeper的solrCloud集群搭建
- 设计模式-12-策略模式
- Struts2 Action
- vue-cli脚手架 webpack中引入jquery
- 机器学习之感知机与SVM详细推导
- UVA11799 Horror Dash【求极值+水题】
- solr学习(6.1)solrcloud集群的搭建
- 开发技能-shell面试整理
- 【剑指offer】面试题34:二叉树中和为某一值的路径
- Regular polygon
- DC -16 :链式栈
- 链栈的主要操作
- 二叉树的一些操作的代码实现
- 桐桐的组合
- UVALive5402 UVA579 Clock Hands【水题】