SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。
当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,
这时需要使用SolrCloud来满足这些需求。

SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。
它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡


1.搭建solrCloud的先搭建solr单机版(可参考上一篇文章)
2.这里就模拟先搭建3个solr单机版,3个zookeeper服务
3.solrCloud依赖于zookeeper,所以我们先按照zookeeper集群(可参考上一篇文章)
4.由于solr版本的不同,有一些文件的存放目录改了,这里使用的是solr5.5.4版本
    一.先把3个solr单机版中随便一个solr上传solrhome下的solrcore的conf目录到zookeeper中 (其中一个solr做)
    
        #cd 到这个目录下 这里存放了上传文件到zookeeper的客户端
        cd /opt/solr/solrcloud/solr-5.5.4/server/scripts/cloud-scripts
        
        #运行此命令, 会在zookeeper中生成/configs/mysolrconf
        /zkcli.sh -zkhost www.hadoop1.org:2181,www.hadoop2.org:2181,www.hadoop3.org:2181
        -cmd upconfig -confdir /opt/solr/solrcloud/solrhome/solrcore1/conf/ -confname mysolrconf
        
    二.修改solrhome下的solr.xml文件,指定当前实例运行的ip地址及端口号。(三台solr都要修改)
        cd /opt/solr/solrcloud/solrhome
        vim solr.xml
              <str name="host">${host:www.hadoop1.org}</str> #IP www.hadoop1.org  www.hadoop2.org   www.hadoop3.org
              <int name="hostPort">${jetty.port:8080}</int>  #端口 8080                    8080            8080
    
    三.修改每一台solr的tomcat 的 bin目录下catalina.sh文件中加入DzkHost指定zookeeper服务器地址(三台solr都要修改)
        #JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"
        JAVA_OPTS="-DzkHost=www.hadoop1.org:2181,www.hadoop2.org:2181,www.hadoop3.org:2181" #增加这一行
        
    四.重新启动每个tomcat。
    
    五.发现集群只有一个主,其他都是备份  是一主双备
    
    六.创建一个的solrcore2,都是主,没有备份的
    使用以下命令创建:
    http://www.hadoop1.org:8080/solr/admin/collections?action=CREATE&name=solrcore2&numShards=3&replicationFactor=1
    
    七.删除solrcore2.
    使用以下命令删除:
    http://www.hadoop1.org:8080/solr/admin/collections?action=DELETE&name=solrcore2
    
    八.java使用solrj  Api访问
        注意是使用CloudSolrClient 而不是httpSolrClient了
        
  效果图

wKiom1labNTjqtEjAABzTI1gv04867.png-wh_50