zoukankan      html  css  js  c++  java
  • Solrcloud

    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的过程;
    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.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文件内容如下:
    <?xml version="1.0" encoding="UTF-8" ?>
    <solr persistent="true" sharedLib="lib">
    <cores adminPath="/admin/cores" zkClientTimeout="20000" hostPort="8080" hostContext="solr"></cores>
    </solr>
    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集群;
  • 相关阅读:
    sql server 表变量和临时表
    c# 操作excel 总结
    ifttt.com:让你的网络行为能引发连锁反应
    jQuery.tmpl.js
    [置顶]IFTTT与Google+是什么?ifttt怎么玩?
    使用 TRY/CATCH 语句解决 SQL Server 2005 死锁
    TFS2010 取消锁定
    Android 开发简介
    Cocos2d开发系列(七)
    针对中小型网站(3000人左右/15分钟)的服务器架构
  • 原文地址:https://www.cnblogs.com/rxingyue/p/4146878.html
Copyright © 2011-2022 走看看