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

ApacheSolrCloud介绍及安装

SolrCloud介绍在我们应用还很渺小的时候,一台Solr服务器能完全胜任这份工作,随着我们应用慢慢长大,访问也越来越多,一台Solr服
SolrCloud介绍
在我们应用还很渺小的时候,一台Solr服务器能完全胜任这份工作,随着我们应用慢慢长大,访问也越来越多,一台Solr服务器的弊病也逐渐显现如查询变慢了,机器宕机就无法继续提供服务,于是乎我们引入了Solr集群,通过前端负载均衡和索引Replication来分担一台机器的压力,这样既能提高查询速度,也能避免单机故障问题而且是可伸缩的解决方案,一切看起来很OK,问题也暂时解决了,但是好景不长,随着应用的发展,数据也在与日俱增,需要索引的数据也越来越多,索引文件变得越来越庞大,Replication索引变得越来越低效高成本,每个Solr实例都保存全量大索引数据的方式显然又成了系统性能和可伸缩性的瓶颈,如果能将大索引文件切分,分布在集群中不同机器中且查询的准确性和可用性又不会受到影响该是件多么美好的事情啊,于是SolrCloud出现了...
SolrCloud是基于ZooKeeper和Solr的分布式解决方案,为Solr添加分布式功能,用于建立高可用,高伸缩,自动容错,分布式索引,分布式查询的Solr服务器集群;SolrCloud并非一个新的软件发布包,而是Solr4.0版本新增组件用于跟ZooKeeper配合提供分布式功能,部署时只是修改启动配置;
SolrCloud安装
SolrCloud是一个分布式解决方案,安装之前需要我们评估自己应用的数据规模,规划SolrCloud集群如划分多少个Shard,每个Shard需要几分冗余即Replication等;通过下面的例子详细讲解下安装SolrCloud的过程;
0,准备条件: Apache Solr-4.2.0Apache Tomcat 7.0.xApache ZooKeeper 3.4.5
1,规划SolrCloud
单一SolrCloud数据集合(Collection):mycollection
ZooKeeper集群(ensemble):5台ZooKeeper服务器
3个SolrCloud实例节点,复制因子为3(即索引冗余数)
3个索引分片(Shard)分布在3个SolrCloud节点(node)上
手动将3个索引分片(Shard)的复本(Replica)分布在3个SolrCloud节点上
2,Solr安装
分别在192.168.1.1-3上搭建3个Solr服务器节点,如何在Tomcat容器下安装Solr可参照笔者的 另外一篇文章,在此不再赘述;
3,ZooKeeper集群(ensemble)安装
3.1,下载 Apache ZooKeeper 3.4.5
3.2,解压zookeeper-3.4.5.tar.gz, tar -xvf zookeeper-3.4.5.tar.gz
3.3,创建ZooKeeper配置文件:将zookeeper_home/conf/zoo_sample.cfg重命名为zoo.cfg
3.4,修改ZooKeeper配置文件zoo.cfg如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial synchronization phase can take
initLimit=10
# The number of ticks that can pass between sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored. Choose appropriately for your environment
dataDir=/home/myuser/zookeeper/data/
# the port at which the clients will connect
clientPort=2181
# the directory where transaction log is stored. this parameter provides dedicated log device for ZooKeeper dataLogDir=/home/myuser/zookeeper/log/
# ZooKeeper server and its port no. ZooKeeper ensemble should know about every other machine in the ensemble specify server id by creating 'myid' file in the dataDir
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888
server.4=192.168.1.4:2888:3888
server.5=192.168.1.5:2888:3888
为每个ZooKeeper服务器分配合适的id(用于标识ZooKeeper服务器)写入myid文件并将其放入dataDir文件夹中
3.5,启动ZooKeeper服务器
# cd /zookeeper_home/bin/
# ./zkServer.sh start
在192.168.1.2-5机器上重复以上步骤;完成ZooKeeper集群(ensemble)的搭建;
4,SolrCloud搭建
4.1,在192.168.1.1(可任选一台机器)上创建SolrCloud配置文件目录:/usr/local/solrcloud/config-files
4.2,在192.168.1.1(可任选一台机器)上创建Solr Zk CLI库文件目录:/usr/local/solrcloud/solr-lib
4.3,将solr example中的配置文件Copy到SolrCloud配置文件目录中:cp solr-4.2.0/example/solr/collection1/conf/* /usr/local/solrcloud/config-files
4.4,将solr.war WEB-INF/lib中的jar文件Copy到Solr Zk CLI库文件目录中:cp solr_home/WEB/lib/* /usr/local/solrcloud/solr-cli-lib
4.5,之所以能分布式是因为引入ZooKeeper来统一保存配置文件,故而需要将SolrCloud的配置文件上传到ZooKeeper中:
将配置文件上传到ZooKeeper中
java -classpath .:/usr/local/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181,192.168.1.5:2181 -confdir /usr/local/solrcloud/config-files/ -confname myconf
将上传到ZooKeeper中配置文件与Collection相关联
java -classpath .:/usr/local/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection mycollection -confname myconf -zkhost 192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181,192.168.1.5:2181
可连上ZooKeeper查看上传的配置信息,5台ZooKeeper服务器可任选一台
cd zookeeper_home/bin
./zkCli.sh -server localhost:2181
执行查询命令: ls /configs/myconf,即可看到上传到ZooKeeper的所有配置信息
4.6,在3个Solr服务器节点(端口都为8080)上进行如下操作:
4.6.1,在solr.home中创建solr.xml文件内容如下:
4.6.2,在Tomcat启动时加上如下JVM参数:
"-Dsolr.solr.home=/usr/local/solr -DzkHost=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181,192.168.1.4:2181,192.168.1.5:2181"
4.6.3,启动Tomcat: /usr/local/tomcat/bin/startup.sh
4.6.4,访问solr管理页: http://192.168.1.1:8080/solr,即可见如下界面(因为当前还未创建Collection及Core)
到此SolrCloud已经搭建好啦,不过里面啥也没有,需要配置好才能用;
4.7,在SolrCloud中创建数据集(Collection),分片(Shard(s)),复本(Replicas(s))
4.7.1,创建数据集(Collection)
curl 'http://192.168.1.1:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=3&replicatiOnFactor=3&maxShardsPerNode=3'
name:数据集名称
numShards:分片数
replicationFactor:每个分片的复本数
maxShardsPerNode:每个Solr服务器节点上最大分片数(Solr 4.2新增)
4.7.2,将分片(Shards)复本(Replicas)分布在3个Solr服务器节点上
分片(Shard) 1 Replica's(Shard 1 Replica_1 at 192.168.1.2)
curl 'http://192.168.1.1:8080/solr/admin/cores?action=CREATE&name=mycollection_shard1_replica_2&collection=mycollection&shard=shard1'
curl 'http://192.168.1.3:8080/solr/admin/cores?action=CREATE&name= mycollection_shard1_replica_3&collection= mycollection&shard=shard1'
分片(Shard) 2 Replica's(Shard 2 Repkica_1 at 192.168.1.3)
curl 'http://192.168.1.1:8080/solr/admin/cores?action=CREATE&name=mycollection_shard2_replica_2&collection=mycollection&shard=shard2'
curl 'http://192.168.1.2:8080/solr/admin/cores?action=CREATE&name=mycollection_shard2_replica_3&collection=mycollection&shard=shard2'
分片(Shard) 3 Replica's(Shard 3 Repkica_1 at 192.168.1.1)
curl 'http://192.168.1.2:8080/solr/admin/cores?action=CREATE&name=mycollection_shard3_replica_2&collection=mycollection&shard=shard3'
curl 'http://192.168.1.3:8080/solr/admin/cores?action=CREATE&name=mycollection_shard3_replica_3&collection=mycollection&shard=shard3'
5,为SolrCloud创建索引,在SolrCloud上创建索引跟在单个Solr上创建索引方法一样,只不过SolrCloud会自动进行索引分片(Shard)和复制(Replica);
上篇文章中将MySQL中的数据导入到SolrCloud中
建全量索引,在浏览器中输入:http://i192.168.1.1:8080/solr/dataimport?command=full-import&commit=true
上述创建的全量索引会自动分片(Shard),复制(Replica)到集群中的三个Solr服务器节点上;
6,在SolrCloud上进行查询
http://192.168.1.1:8080/solr/mycollection/select?q=*:*
q为查询关键字,修改q参数即可对SolrCloud中的所有索引数据进行查询(可通过监控每台Solr服务器节点的日子看到查询会在各个节点上进行,由此可知SolrCloud会将查询分配到各个节点上进行后将各个节点的查询结果汇总);
总结,本文讲述了SolrCloud及其应用场景并通过搭建一个具有3个Solr服务器节点的SolrCloud来讲述如何搭建分布式搜索解决方案;通过参照本文的基本方法相信各位可以搭建任意规模的SolrCloud集群;
 
 
转载自 http://warm-breeze.iteye.com/blog/1887636
作者:warm_breeze

推荐阅读
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • ZooKeeper 是一个高性能的分布式数据管理和协调框架,通过实现 Paxos 算法确保了分布式环境中的数据强一致性。本文深入探讨了 ZooKeeper 的数据模型及其在复杂分布式系统中的高级应用场景,包括配置管理、命名服务和分布式锁等关键功能。通过实际案例分析,展示了如何利用 ZooKeeper 提高系统的可靠性和可扩展性。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • Kafka 是由 Apache 软件基金会开发的高性能分布式消息系统,支持高吞吐量的发布和订阅功能,主要使用 Scala 和 Java 编写。本文将深入解析 Kafka 的安装与配置过程,为程序员提供详尽的操作指南,涵盖从环境准备到集群搭建的每一个关键步骤。 ... [详细]
  • 在CentOS系统中部署与配置ZooKeeper详解 ... [详细]
  • Zookeeper作为Apache Hadoop生态系统中的一个重要组件,主要致力于解决分布式应用中的常见数据管理难题。它提供了统一的命名服务、状态同步服务以及集群管理功能,有效提升了分布式系统的可靠性和可维护性。此外,Zookeeper还支持配置管理和临时节点管理,进一步增强了其在复杂分布式环境中的应用价值。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
author-avatar
mobiledu2502928403
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有