SolrCloud阶段总结

2019-03-27 01:11|来源: 网路

SolrCloud阶段总结

开发类型

全文检索相关开发

Solr版本

4.2

文件内容

本文介绍SolrCloud的功能使用及相关注意事项

在代码文本框中如有显示不全的,请在文本框中按Ctrl+A再复制.

版本

作者/修改人

日期

V1.0

gzk

2013-06-04

 

         SolrCloud是基于Solr和Zookeeper的分布式搜索方案,是Solr4.X的核心组件之一,它的主要思想是使用Zookeeper作为集群的配置信息中心。

                       

       基本可以用上面这幅图来概述,这是一个拥有4个Solr节点的集群,索引分布在两个Shard里面,每个Shard包含两个Solr节点,一个是Leader节点,一个是Replica节点,此外集群中有一个负责维护集群状态信息的Overseer节点,它是一个总控制器。集群的所有状态信息都放在Zookeeper集群中统一维护。从图中还可以看到,任何一个节点都可以接收索引更新的请求,然后再将这个请求转发到文档所应该属于的那个Shard的Leader节点,Leader节点更新同时把文档转发给同属于一个Shard的所有replicas节点。

SolrCloud有几个特色功能:

1)集中配置

2)自动容错

3)负载均衡 。

SolrCloud的配置过程

这里为了方便建了4个bat文件并分别命名为对应的角色,先说一下配置的参数:

参数名

说明

-Dbootstrap_confdir

是上传本地的配置文件上传到zookeeper中去,作为整个集群共用的配置文件

-Dcollection.configName

是上传的Solr配置在集群中的名了,如不指定默认为collection1

-DzkRun

启动一个嵌入式的Zookeeper服务器,它会作为solr服务器的一部分

-DnumShards

指定了集群的逻辑分组数目

-DzkHost

是指明了Zookeeper集群所在位置

  1. SolrCloudServer-Master-Zookeeper-Host.bat    
         
   
   

java     -Dbootstrap_confdir=./solr/skyCore/conf -Dcollection.configName=myconf     -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -DnumShards=2     -jar start.jar

   
   

 

       上面的意思是启动一个主SolrCloud服务同时启动内嵌的Zookeeper服务,并上传本地的Solr配置文件到Zookeeper集群中,其中还配置了3个Zookeeper服务器组成一个集群,确保Solr集群信息的高可用性和容错性。当Zookeeper服务为3个以上时,能够更好的实现容灾问题,当为3个Zookeeper服务时挂掉其中一个Zookeeper集群服务还会正常运行,当为5个Zookeeper服务时挂掉两个还是可以正常运行,就像盘阵的Raid机制一样.只有当所有配置的Zookeeper服务都启动后整个服务才会继续运行下去.

  1. SolrCloudServer-Slave-Zookeeper-Host-7574.bat

   

         
   
   

java -Djetty.port=7574 -DzkRun     -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar

   
   

 

         上面的意思是启动一个主SolrCloud服务同时启动内嵌的Zookeeper服务,其中还配置了3个Zookeeper服务器地址.

  1. SolrCloudServer-Slave-Zookeeper-Host-8900.bat

   

         
   
   

java -Djetty.port=8900 -DzkRun     -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar

   
   

 

           上面的意思是启动一个主SolrCloud服务同时启动内嵌的Zookeeper服务,其中还配置了3个Zookeeper服务器地址.

  1. SolrCloudServer.bat

   

         
   
   

java -Djetty.port=7500     -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar

   
   

 

         上面的意思是启动一个主SolrCloud服务.并配置了Zookeeper服务器所在.       当服务启动成功后可以在管理界面中SolrCloud情况,通过Cloud->Tree可以查看当前详细的服务情况,如图:

 

       通过上面的图我们可以看到当前有两个shard,每个shard下面有两个节点,还可以看到刚才配置中指定的myconf名称,点开后就可以看到上传的配置文件了,点击下面第一个节点都可以看到

 

集群状态json:

   

         
   
   

{"skyCore":{

   

        "shards":{

   

          "shard1":{

   

            "range":"80000000-ffffffff",

   

            "state":"active",

   

            "replicas":{

   

              "10.0.4.84:8983_solr_skyCore":{

   

                "shard":"shard1",

   

                "state":"active",

   

                "core":"skyCore",

   

                "collection":"skyCore",

   

                "node_name":"10.0.4.84:8983_solr",

   

                "base_url":"http://10.0.4.84:8983/solr"},

   

              "10.0.4.84:7500_solr_skyCore":{

   

            "shard":"shard1",

   

                "state":"active",

   

                "core":"skyCore",

   

                "collection":"skyCore",

   

                "node_name":"10.0.4.84:7500_solr",

   

                "base_url":"http://10.0.4.84:7500/solr",

   

                "leader":"true"}}},

   

          "shard2":{

   

            "range":"0-7fffffff",

   

            "state":"active",

   

            "replicas":{

   

              "10.0.4.84:7574_solr_skyCore":{

   

                "shard":"shard2",

   

                "state":"active",

   

                "core":"skyCore",

   

                "collection":"skyCore",

   

            "node_name":"10.0.4.84:7574_solr",

   

                "base_url":"http://10.0.4.84:7574/solr"},

   

              "10.0.4.84:8900_solr_skyCore":{

   

                "shard":"shard2",

   

                "state":"active",

   

                "core":"skyCore",

   

                "collection":"skyCore",

   

                "node_name":"10.0.4.84:8900_solr",

   

                "base_url":"http://10.0.4.84:8900/solr",

   

                "leader":"true"}}}},

   

        "router":"compositeId"}}

   
   

 

SolrCloud集中式的配置信息

         SolrCloud集群的所有的配置存储在ZooKeeper. 一旦SolrCloud节点启动时配置了Dbootstrap_confdir参数, 该节点的配置信息将发送到ZooKeeper上存储. 基它节点启动时会应用ZooKeeper上的配置信息,这样当我们改动配置时就不用一个个机子去更改了.

SolrCloud容灾备份

       Shard Replica除了作为容灾备份存在, 另外一个作用就是分散查询请求, 提高整个集群对查询的负载能力.

SolrCloud索引处理

       索引文档的更新在Shard和Replica之间是自动和实时的.把一个doc可以发送到任何一个SolrCloud, 然后由SolrCloud完成剩下的事情. SolrCloud会自动选择一个Shard进行分发任务,当一个Shard的leader收到文档后同时也会把doc分发给当前Shard所有的副本.

SolrCloud检索方式

有三种不同的检索方式:

  1. 在所有Shared上进行检索一个Core的数据

   

         
   
   

http://localhost:8983/solr/skyCore/select?q=*%3A*

   
   

 

  1. 在指定的Shared上进行检索一个Core的数据

   

         
   
   

http://localhost:8983/solr/skyCore/select?q=*%3A*&shards=shard1,shard2

   
   

 

  1. 也可以使用shard的地址作为参数

   

         
   
   

http://localhost:8983/solr/skyCore/select?q=*%3A*&shards=     localhost:8983/solr,localhost:7574/solr

   
   

 

  1. 在指定地址的Shared上进行检索,并支持负载一个Core的数据

   

         
   
   

http://localhost:8983/solr/skyCore/select?q=*%3A*&shards=localhost:8983/solr|localhost:8900/solr,localhost:7574/solr|localhost:7500/solr

   
   

 

  1. 在所有Shared上进行检索指定的Core,并合并结果

   

         
   
   

http://localhost:8983/solr/skyCore/select?q=*%3A*&collection=TestCore,skyCore

   
   

 

  1. 当有shard没有启动时查询是会报错的.为了让查询能正常进行,在查询时加入参数shards.tolerant=true就可以正常查询了.

   

         
   
   

http://localhost:8983/solr/skyCore/select?q=*%3A*&shards.tolerant=true

   
   

 

SolrCloud的集合(SolrCores)管理API

  1. 添加集合

   

         
   
   

http://localhost:8983/solr/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=4

   
   

 

参数名

说明

Name

要创建的集合名称

numShards

指定集合Shard的数量

replicationFactor

指定每个Shard副本数量

maxShardsPerNode

每个Solr服务器节点上最大Shard数量

createNodeSet

还不明白什么用

collection.configName

配置的名称(必须已存储在ZooKeeper)使用这个新的集合。如果没有提供创建操作将默认配置名称的集合名称。

 

  1. 删除集合

   

         
   
   

http://localhost:8983/solr/admin/collections?action=DELETE&name=mycollection

   
   

 

  1. 重新加载

   

         
   
   

http://localhost:8983/solr/admin/collections?action=RELOAD&name=mycollection

   
   

动态添加SolrCore示例

 

在服务运行时新添加的MyCore分布在3个Shared上面每个两个节点

   

         
   
   

http://localhost:8983/solr/admin/collections?action=CREATE&name=MyCore&numShards=3&replicationFactor=2

   
   

转自:http://www.cnblogs.com/guozk/p/3498844

相关问答

更多
  • 现在我们来剖析下这样一个简单的集群构建的基本流程: 先从第一台solr服务器说起: 1) 它首先启动一个嵌入式的Zookeeper服务器,作为集群状态信息的管理者, 2) 将自己这个节点注册到/node_states/目录下 3) 同时将自己注册到/live_nodes/目录下 4)创建/overseer_elect/leader,为后续Overseer节点的选举做准备,新建一个Overseer, 5) 更新/clusterstate.json目录下json格式的集群状态信息 6) 本机从Zookeeper ...
  • 1.搭建tomcat单机版solr 见我的上一篇博文solr安装-tomcat单机版 2.安装配置zookeeper 具体下载,安装,配置不详细说了,很简单。只列出我的关键配置项,如下: clientPort=4181 server.2=hadoop.datanode5.com:2888:9888 server.3=hadoop.datanode2.com:2888:9888 server.1=hadoop.datanode3.com:2888:9888 3. 配置solrCloud (1)先配置主服务器t ...
  • 在SolrCloud中,您的每个Core都将成为Collection 。 每个Collection都有自己的一组配置文件和数据。 您可能会发现这个有用的移动多核SOLR实例到云 Solr 5.0(以后)对如何使用分片创建SolrCloud设置以及如何添加集合等进行了一些更改。 下面列出的所有内容都是我对Solr参考指南的理解。 我强烈建议彻底完成它。 https://cwiki.apache.org/confluence/display/solr/Apache+Solr+Reference+Guide 我在 ...
  • Solr(主要)用于存储和搜索,Hadoop(主要)用于分布式处理。 他们解决不同的问题。 最常见的是使用Solr和HDFS来存储/加载其索引文件 ,以便使用HDFS集群中的现有功能,或者允许通过Solr搜索已处理的Hadoop结果 。 如果您在Google上进行一些搜索,您会发现很多用例,演示文稿和库,例如LucidWorks的Hadoop集成 , Solr + Hadoop或Hortonworks的索引以及在Apache Solr中搜索数据 。 Solr is (mainly) for storage ...
  • 我用过: CloudSolrServer solrServer; ... solrServer.getZkStateReader().getClusterState(); ... I used that: CloudSolrServer solrServer; ... solrServer.getZkStateReader().getClusterState(); ...
  • 任何负载平衡器都可以。 我们使用nginx没有麻烦。 如果你需要类似于SolrJ的东西,没有什么能阻止你写一些.Net代码来查询zookeeper关于不同集合/分片的状态等。你把它放在一个库中,并且可以透明地从你的.Net代码中使用它。 作为奖励,您可以减少Solr节点之间的往返次数,因为您可以找出哪些是文档需要的分片,并始终将更新发送给分片领导。 Any load balancer would do. We are using nginx without trouble. If you need some ...
  • 最好的方法应该是将solr云升级到版本6.2.1。 如果节点是32位拱,它还取决于节点架构。 那么如果节点是64位arch,那么堆大小超过2gb就不会工作,你可以分配更多的堆大小但是会产生gc开销错误。 所以最好更新solr并添加更多分片和副本以避免错误。 The best approach should be to upgrade the solr cloud to version 6.2.1. it also depends on the node architecture if the node is ...
  • 我怀疑你可以在没有自定义代码库部分的情况下使用它。 你已经提到了tlog的问题,我怀疑你也会发现索引锁定的问题(看这里 ,显然你需要使用单一设置进行只读)。 恕我直言,如果你真的需要在只读文件系统上运行solrlcoud,你应该重新考虑。 如果仍然如此: 首先查看文档并调整所有可以更好地适合只读的内容(如上面的锁定)。 然后,开始使用适用于只读文件系统的自己的版本自定义仍然失败的部分(如tlog)。 这甚至可能是不可能的,或者只能通过制作一些功能来实现,例如tlog,NOOP(可能适用于您的用例)。 I d ...
  • 我将尝试回答您的部分问题:SolrCloud确实在所有节点上编制索引,因此它会对副本产生性能影响。 这是由于“热复制”模型而不是您习惯的“冷复制”而完成的。 它解决了数据完整性问题以及群集上的实时搜索。 作为性能影响的代价,您可以获得一致的数据和更快的数据可用性。 实际上,您始终可以将数据拆分为分片(以额外硬件的价格),并具有相当的性能。 在任何一种情况下,由您决定SolrCloud是否适合您的需求。 您可以在没有云模型的情况下使用Solr 4,并像以前一样自行管理。 I'll try to answer ...
  • 云功能是Solr的一部分。 对于生产,您需要将ZooKeeper作为单独的应用程序(它也可以作为Solr的一部分运行,但不建议在生产中执行此操作) https://cwiki.apache.org/confluence/display/solr/SolrCloud Cloud features are a part of Solr. For production you would need to have ZooKeeper as separate application (it's can be run ...