热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SolrCloud的搭建、使用

日萌社人工智能AI:KerasPyTorchMXNetTensorFlowPaddlePaddle深度学习实战(不定时更新)搜索引擎&#
日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)



搜索引擎:Elasticsearch、Solr、Lucene


  • ELK中的ES:Elasticsearch
  • SolrCloud 的搭建、使用
  • Solr 高亮显示
  • Spring Data Solr 使用
  • Solr的安装与配置
  • Solr 原理、API 使用
  • Lucene 原理、API使用
  • Lucene 得分算法

1.SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模、容错、分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些需求。SolrCloud 是基于 Solr 和Zookeeper的分布式搜索方案,它的主要思想是使用 Zookeeper作为集群的配置信息中心。它有几个特色功能:1.集中式的配置信息2.自动容错3.近实时搜索4.查询时自动负载均衡2.SolrCloud系统架构

1.物理结构:三个 Solr 实例( 每个实例包括两个 Core),组成一个 SolrCloud。2.逻辑结构索引集合包括两个 Shard(shard1 和 shard2),shard1 和 shard2 分别由三个 Core 组成,其中一个 Leader 两个 Replication,Leader 是由 zookeeper 选举产生,zookeeper 控制每个shard上三个 Core 的索引数据一致,解决高可用问题。用户发起索引请求分别从 shard1 和 shard2 上获取,解决高并发问题。1.Collection Collection 在 SolrCloud 集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个 Shard(分片),它们使用相同的配置信息。比如:针对商品信息搜索可以创建一个 collection。collection=shard1+shard2+....+shardX2.Core 每个 Core 是 Solr 中一个独立运行单位,提供 索引和搜索服务。一个 shard 需要由一个Core 或多个 Core 组成。由于 collection 由多个 shard 组成所以 collection 一般由多个 core 组成。3.Master 或 SlaveMaster 是 master-slave 结构中的主结点(通常说主服务器),Slave 是 master-slave 结构中的从结点(通常说从服务器或备服务器)。同一个 Shard 下 master 和 slave 存储的数据是一致的,这是为了达到高可用目的。4.ShardCollection 的逻辑分片。每个 Shard 被化成一个或者多个 replication,通过选举确定哪个是 Leader。

1.分片的目的:可以进行拓容。比如一个分片对应一个2个G的core,那么增加一个分片,可以对应多的一个2个G的core
2.core:一个core代表Solr中的一个数据库“collection1”
3.Master 是 master-slave 结构中的主节点(主服务器),Slave 是 master-slave 结构中的从节点(从服务器)。在同一个 分片(Shard) 下 master主节点 和 slave从节点 存储的数据是相同的,这是为了达到高可用性。

 


搭建SolrCloud

1.搭建要求:Zookeeper 作为集群的管理工具1.集群管理:容错、负载均衡。2.配置文件的集中管理3.集群的入口:需要实现 zookeeper 高可用,需要搭建zookeeper集群。建议是奇数节点。需要三个 zookeeper 服务器。搭建 solr 集群需要 7 台服务器(搭建伪分布式,建议虚拟机的内存 1G 以上):需要三个 zookeeper 节点需要四个 tomcat 节点 2.环境准备CentOS-6.5-i386-bin-DVD1.isojdk-7u72-linux-i586.tar.gzapache-tomcat-7.0.47.tar.gzzookeeper-3.4.6.tar.gzsolr-4.10.3.tgz3.步骤:1.搭建Zookeeper集群(我们在上一小节已经完成)2.将已经部署完solr 的tomcat的上传到linux3.在linux中创建文件夹 /usr/local/solr-cloud 创建4个tomcat实例


启动集群

1.启动每个 tomcat 实例。要保证 zookeeper 集群是启动状态。如果你想让某个文件夹下都可以执行,使用以下命令实现:chmod -R 777 solr-cloud
2.访问集群:地址栏输入 192.168.25.140:8180/solr 或 192.168.25.140:8280/solr都可以看到Solr集群版的界面,下图表示的是,一个主节点 ,三个从节点。


 SpringDataSolr连接SolrCloud

在SolrJ中提供一个叫做CloudSolrServer的类,它是SolrServer的子类,用于连接solrCloud。
它的构造参数就是zookeeper的地址列表,另外它要求要指定defaultCollection属性(默认的 collection名称)。
我们现在修改springDataSolrDemo工程的配置文件 ,把原来的solr-server注销,替换为CloudSolrServer。
指定构造参数为地址列表,设置默认 collection名称。


 集群分片设置

创建新的 Collection 进行分片处理。
在浏览器输入以下地址,可以按照我们的要求 创建新的Collection: http://192.168.25.140:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2参数:action=CREATE:表示创建新的 Collection集合name=collection2:表示创建新的 Collection集合的名字是collection2numShards=2:代表的是SolrCloud的逻辑结构。表示创建的shard逻辑分片数为2。 replicationFactor=2:代表的是SolrCloud的物理结构。表示创建的shard逻辑分片数的备份数为2,那么其中一个为主,另外一个为备。


搭建Solr集群:SolrCloud

1.搭建 zookeeper 集群:建议是奇数节点,则至少需要三个 zookeeper 服务器。
2.搭建 solr 集群:此处搭建伪集群,都在同一台虚拟机上,首先开启四个 tomcat。环境准备:apache-tomcat-7.0.47.tar.gz 和 solr-4.10.3.tgz3.mkdir /usr/local/solr-cloud
4./root/apache-tomcat-7.0.52/webapps/ 目录下 已部署好 solr-4.10.3工程,那么把tomcat拷贝4份:cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat-1cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat-2cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat-3cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat-45.mkdir /usr/local/solrhomes
6./root 目录下 配置好 solrhome,然后把 solrhome文件夹 拷贝4份:cp -r solrhome /usr/local/solrhomes/solrhome-1cp -r solrhome /usr/local/solrhomes/solrhome-2cp -r solrhome /usr/local/solrhomes/solrhome-3cp -r solrhome /usr/local/solrhomes/solrhome-47.修改solrhome的绝对路径:1./usr/local/solr-cloud/tomcat-1/webapps/solr-4.10.3/WEB-INF/web.xml:修改 /usr/local/solrhomes/solrhome-12./usr/local/solr-cloud/tomcat-2/webapps/solr-4.10.3/WEB-INF/web.xml:修改 /usr/local/solrhomes/solrhome-23./usr/local/solr-cloud/tomcat-3/webapps/solr-4.10.3/WEB-INF/web.xml:修改 /usr/local/solrhomes/solrhome-34./usr/local/solr-cloud/tomcat-4/webapps/solr-4.10.3/WEB-INF/web.xml:修改 /usr/local/solrhomes/solrhome-48.修改每个tomcat/conf/server.xml下的三个端口:1.:用来关闭TOMCAT服务的端口。  2.:负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。3.:负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。4./usr/local/solr-cloud/tomcat-1/conf/server.xml: 5./usr/local/solr-cloud/tomcat-2/conf/server.xml: 6./usr/local/solr-cloud/tomcat-3/conf/server.xml: 7./usr/local/solr-cloud/tomcat-4/conf/server.xml: 9.修改每个tomcat/bin/catalina.sh:1.目的:让每个Tomcat找到zookeeper集群中的每个zookeeper2.catalina.sh中配置位置:把此配置修改到第234行3.catalina.sh中修改的配置内容的格式:JAVA_OPTS="-DzkHost=zookeeperIP:端口"4.catalina.sh中修改的配置内容:JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"5.JAVA_OPTS:用来设置JVM相关运行参数的变量,此配置用于在tomcat启动时找到 zookeeper集群中的任意一个zookeeper6.此处zookeeper集群所在的虚拟机:192.168.25.1287.此处每个Tomcat所在的虚拟机:192.168.25.1338./usr/local/solr-cloud/tomcat-1/bin/catalina.sh:JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"9./usr/local/solr-cloud/tomcat-2/bin/catalina.sh:JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"10./usr/local/solr-cloud/tomcat-3/bin/catalina.sh:JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183" 44./usr/local/solr-cloud/tomcat-4/bin/catalina.sh:JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"10.每个solrhome目录下的solr.xml文件中配置tomcat的IP和端口,用于solr和tomcat连接:目的:solr集群中的每个solr关联一个tomcat。1./usr/local/solrhomes/solrhome-1/solr.xml192.168.25.13381802./usr/local/solrhomes/solrhome-2/solr.xml192.168.25.13382803./usr/local/solrhomes/solrhome-3/solr.xml192.168.25.13383804./usr/local/solrhomes/solrhome-4/solr.xml192.168.25.1338480注意:每个solrhome目录下的solr.xml文件中还配置有${hostContext:solr},表示访问的主机上下文的名称是solr,那么便要求tomcat/webapps目录下的solr项目名(文件夹名)必须是solr。 那么项目访问的solr服务器的地址便实际是192.168.25.133:8180/solr/collection1,默认访问的是collection1数据库。11.使用 solr 中的 zkcli.sh工具 把 solrhome/collection1/conf配置目录 上传到 zookeeper集群中的每个zookeeper:目的:让 zookeeper 统一管理配置文件。 1.tar -zxvf solr-4.10.3.tgz.tgz2.cd solr-4.10.3/example/scripts/cloud-scripts 3.所执行命令的格式:./zkcli.sh -zkhost zookeeper的IP:端口 -cmd upconfig -confdir 任意某个solrhome下的collection1/conf配置目录 -confname myconf参数解释:-zkhost:指定zookeeper地址列表(IP:端口)-cmd:指定命令。upconfig 为上传配置的命令-confdir:solrhome下的collection1/conf配置目录-confname:配置名称4.执行命令之前保证zookeeper启动了5.所执行的命令:./zkcli.sh -zkhost 192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183 -cmd upconfig -confdir /usr/local/solrhomes/solrhome-1/collection1/conf -confname myconf12.启动solr集群:1.首先启动每个 tomcat,要保证 zookeeper 集群是启动状态。2.启动每个tomcat,每个tomcat下的webapps都带有solr工程。3.cd /usr/local/solr-cloud/tomcat-1/bin./startup.sh4.cd /usr/local/solr-cloud/tomcat-2/bin./startup.sh5.cd /usr/local/solr-cloud/tomcat-3/bin./startup.sh6.cd /usr/local/solr-cloud/tomcat-4/bin./startup.sh7.必须重启zookeeper集群中的每个zookeeper 13.输入格式 192.168.25.133:8180/solr工程名测试是否搭建成功:1.成功访问4个solr:192.168.25.133:8180/solr、192.168.25.133:8280/solr、192.168.25.133:8380/solr、192.168.25.133:8480/solr 查看是否打开成功2.查看4个solr中的“Cloud”,注意全部solr显示绿色:

3.对4个solr中的 collection1数据库进行查询solr数据


 Spring Data Solr 连接 SolrCloud

在SolrJ中提供一个叫做CloudSolrServer的类,它是SolrServer的子类,用于连接solrCloud。
它的构造参数就是zookeeper的地址列表,另外它要求要指定defaultCollection属性(默认的 collection名称)。
我们现在修改springDataSolrDemo工程的配置文件 ,把原来的solr-server注销,替换为CloudSolrServer。
指定构造参数为地址列表,设置默认 collection名称。

1.只有当前war工程自身的pom.xml中配置有的话,那么针对war工程不仅需要install -P“id标签值”,同样也需要使用tomcat7:run -P“id标签值”。
2.如果当前war工程自身的pom.xml中没有配置的话,而war工程所依赖的jar工程中的pom.xml中配置有的话,那么针对war工程只需要install 和 tomcat7:run 即可,无需加上 -P“id标签值”。


solr集群分片设置

1.创建新的 Collection 进行 新的分片处理:在浏览器输入以下地址,可以按照我们的要求创建新的Collection: 执行语句:http://192.168.25.133:8180/solr/admin/collections?action=CREATE&name=collection1&numShards=2&replicationFactor=2参数:action=CREATE:表示创建新的 Collection集合name=collection1:表示创建新的 Collection集合的名字是collection1numShards=2:代表的是SolrCloud的逻辑结构。表示创建的shard逻辑分片数为2。 replicationFactor=2:代表的是SolrCloud的物理结构。表示创建的shard逻辑分片数的备份数为2,那么其中一个为主,另外一个为备。

2.删除不用的 Collection:浏览器执行语句:http://192.168.25.133:8180/solr/admin/collections?action=DELETE&name=collection1参数:action=CREATE:表示删除 Collection集合name=collection2:表示删除的 Collection集合的名字是collection1

3.此处我们先删除原来的collection1数据库,然后重新创建一个新的collection1数据库,并且同时进行新的分片设置。1.删除原来的collection1数据库:浏览器执行http://192.168.25.133:8180/solr/admin/collections?action=DELETE&name=collection1

2.重新创建一个新的collection1数据库,并且同时进行新的分片设置:浏览器执行http://192.168.25.133:8180/solr/admin/collections?action=CREATE&name=collection1&numShards=2&replicationFactor=2

3.给新的collection数据库重新存入solr数据,需要执行pinyougou-solr-util项目中的SolrUtil.java才能把mysql数据存入到solr中,同时还需要修改applicationContext-solr.xml中的连接solr服务器的配置:1.给第一个solr的collection数据库重新存入solr数据:applicationContext-solr.xml:url="http://192.168.25.133:8180/solr/collection1_shard1_replica1"2.给第二个solr的collection数据库重新存入solr数据:applicationContext-solr.xml:url="http://192.168.25.133:8180/solr/collection1_shard1_replica2"3.给第三个solr的collection数据库重新存入solr数据:applicationContext-solr.xml:url="http://192.168.25.133:8180/solr/collection1_shard2_replica1"4.给第四个solr的collection数据库重新存入solr数据:applicationContext-solr.xml:url="http://192.168.25.133:8180/solr/collection1_shard2_replica2"

 

 

 

 


推荐阅读
author-avatar
三八依依2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有