Solr入门

目录java

SolrCloud配置... 2web

简介... 2apache

Solr 是什么?... 2缓存

配置单机版Solr服务器... 2tomcat

1:下载Solr 2服务器

2:部署Tomcat 2网络

3:将下载的Solr解压,并复制其中example\webapps\solr.war包到指定位置... 2app

4:复制example\solr中的solr.xml和zoo.cfg到一个新建文件夹(solrhome)中。... 2负载均衡

5:在tomcat的conf文件夹下新建Catalina\localhost文件夹,并在其中新建solr.xml,内容以下:... 2webapp

6:启动Tomcat,测试工程。... 2

7:在单机版Solr服务器中添加connection,... 2

配置分布式Solr服务器... 2

1: 参照Solr单机版的配置,配置多台Solr服务器... 2

2:修改主节点... 3

3:修改从节点... 3

5: 在项目中引用... 4

配置Solr服务器集群... 4

1:部署Zookeeper 4

2:部署Solr 5

3:在Zookeeper 中上传Solr的connection配置文件... 6

4:执行命令... 6

5: 建立connection实例... 6

Solr服务器集群的好处... 7

索引(collection)的逻辑图... 8

Solr和索引对照图... 8

建立索引过程... 9

分布式查询... 9

Shard Splitting. 10

 

SolrCloud配置

简介

Solr 是什么?

Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示而且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,并且附带了一个基于HTTP 的管理界面。可使用 Solr 的表现优异的基本搜索功能,也能够对它进行扩展从而知足企业的须要。Solr的特性包括:

高级的全文搜索功能 专为高通量的网络流量进行的优化 基于开放接口(XML和HTTP)的标准 综合的HTML管理界面 可伸缩性-可以有效地复制到另一个Solr搜索服务器 使用XML配置达到灵活性和适配性 可扩展的插件体系

配置单机版Solr服务器

1:下载Solr

http://www.apache.org/dyn/closer.cgi/lucene/solr/

2:部署Tomcat

3:将下载的Solr解压,并复制其中example\webapps\solr.war包到指定位置

4:复制example\solr中的solr.xml和zoo.cfg到一个新建文件夹(solrhome)中。

5:在tomcat的conf文件夹下新建Catalina\localhost文件夹,并在其中新建solr.xml,内容以下:

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\\development\\SolrCloud\\data\\solr\\war\\solr.war" debug="0" crossContext="true">
    <Environment name="solr/home" type="java.lang.String" value="D:\\development\\SolrCloud\\data\\solr\\solrhome" override="false"/>
</Context>

其中docBase指向solr.war文件,Environment/value 配置为solrhome的路径。

6:启动Tomcat,测试工程。

7:在单机版Solr服务器中添加connection,

(1):在Solr解压的路径example\solr\下找到collection1

(2):将collection1复制到以前配置好的solrhome文件夹中。

(3):重启Tomcat服务器。

 

配置分布式Solr服务器

1: 参照Solr单机版的配置,配置多台Solr服务器

假设目前存在多台已经配置好的Solr服务器分别为

http://127.0.0.1:8080/solr/connection1
http://127.0.0.1:8081/solr/connection1
http://127.0.0.1:8082/solr/connection1

目前须要设置8080为主机,8081,8082为从机

2:修改主节点

(1):找到须要设置主库的solrhome,找到其中须要设置的核心connection1,例如路径为\example\solr\collection1

(2):打开\conf\solrconfig.xml

(3):修改节点 替换配置中存在的requestHandler/replication和updateHandler

<requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="master">
       <str name="replicateAfter">startup</str>
       <str name="replicateAfter">commit</str>
       <str name="replicateAfter">optimize</str>
       <str name="confFiles">schema.xml</str>
    </lst>
</requestHandler>
<updateHandler class="solr.DirectUpdateHandler2">
   <autoCommit>
      <maxDocs>1</maxDocs>
      <maxTime>1000</maxTime>
      <openSearcher>false</openSearcher>
   </autoCommit>
</updateHandler>

3:修改从节点

(1):找到须要设置从库的solrhome,找到其中须要设置的核心connection1,例如路径为\example\solr\collection1

(2):打开\conf\solrconfig.xml

(3):修改节点 替换配置中存在的requestHandler/replication和updateHandler

<requestHandler name="/replication" class="solr.ReplicationHandler" >
  <lst name="slave">
        <str name="masterUrl">http://10.28.175.246:8080/solr/waiter</str>
        <str name="pollInterval">00:00:20</str>
   </lst>
</requestHandler>

上述操做完成后,一个Solr分布式就完成了,主库主要负责接收插入的数据,从库主要负责查询数据。

从库会在按期(pollInterval配置)到主库进行数据查询,若主库数据有修改,从库会自动进行差别同步。

5: 在项目中引用

 <bean id="concurrentUpdateSolrServer" class="org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer">
      <constructor-arg value=" http://127.0.0.1:8080/solr/connection1" />
      <constructor-arg value="8" />
      <constructor-arg value="8" />
 </bean>
 <bean id="lbHttpSolrServer" class="org.apache.solr.client.solrj.impl.LBHttpSolrServer" >
      <constructor-arg>
           <array value-type="java.lang.String">
                <value>http://127.0.0.1:8081/solr/connection1</value>
                <value>http://127.0.0.1:8082/solr/connection1</value>
           </array>
      </constructor-arg>
 </bean>

配置Solr服务器集群

本文所讲的Solr集群服务器是基于 Tomcat7 + Zookeeper3.4.6 + Solr4.6

1:部署Zookeeper

(1)下载Zookeeper3.4.6

下载地址为 http://www.apache.org/dyn/closer.cgi/zookeeper/

(2)解压Zookeeper3.4.6 .tar.gz到文件夹中待用

(3)打开conf文件夹,新建文件zoo.cfg(也能够重命名zoo_sample.cfg)

(4)修改zoo.cfg:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:\\tmp\\zookeeper\\server1\\data
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

在此示例文件中,咱们部署了三分Zookeeper服务器,数据文件分别定位到

D:\\tmp\\zookeeper\\server1
D:\\tmp\\zookeeper\\server2
D:\\tmp\\zookeeper\\server3

其中的server.x中的x为服务器myid(myid随后说在哪里定义),后面的127.0.0.1:2888:3888分别对应与2181

例如,服务器A的clientPort为2181,则对应的地址为127.0.0.1:2888:3888

服务器B的clientPort为2182,则对应的地址应该为127.0.0.1:2889:3889

 

服务器配置文件                      dataDir                        clientPort   
server_1/conf/zoo.cfg       D:\\tmp\\zookeeper\\server1        2181
server_2/conf/zoo.cfg       D:\\tmp\\zookeeper\\server2        2182
server_3/conf/zoo.cfg       D:\\tmp\\zookeeper\\server3        2183

(4):接下来咱们该说说myid的问题了

上述文件中咱们定义了一个 dataDir 地址,此地址是程序存放数据用的地址,在此地址中,咱们定义一个myid文件,用记事本打开,写入1,则此项目的Myid为1

分别将三个服务器按照123进行排列写入myid文件

(5):依次启动Zookeeper服务器

(链接第一台时有异常信息,不用管,等都链接起来就没有异常了)

2:部署Solr

按照Solr单机版的部署方式,部署三台Solr单机版服务器,并去掉其中的全部connection

(1): 配置Solr和Zookeeper关联

假设以前部署好的Zookeeper地址为:

127.0.0.1:2181
127.0.0.1:2182
127.0.0.1:2183

2:部署好的三个solr服务器配置分别为

solr服务器         tomcat端口             solrhome
solr1                  8081           SolrCloud\data\solrhome1
solr2                  8082           SolrCloud\data\solrhome2
solr3                  8083           SolrCloud\data\solrhome3

3:打开solrhome1下的solr.xml,并修改内容:

<?xml version="1.0" encoding="UTF-8" ?>
<solr>
  <solrcloud>
      <str name="host">${host:}</str>
      <int name="hostPort">8080</int>
      <str name="hostContext">${hostContext:solr}</str>
      <int name="zkClientTimeout">${zkClientTimeout:15000}</int>
      <bool name="genericCoreNodeNames">
             ${genericCoreNodeNames:true}
      </bool>
      <str name="zkHost">
         127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
       </str>
  </solrcloud>
  <shardHandlerFactory name="shardHandlerFactory"
         class="HttpShardHandlerFactory">
      <int name="socketTimeout">${socketTimeout:0}</int>
      <int name="connTimeout">${connTimeout:0}</int>
  </shardHandlerFactory>
</solr>

其中hostPort为该服务器的tomcat端口

zkHost为Zookeeper的三个服务器地址用逗号链接起来。

依次启动三个solr服务器,并访问任意一个solr,出现下图页面,即说明配置集群服务成功。

3:在Zookeeper 中上传Solr的connection配置文件

(1):复制相应的Solr的配置文件(例如:Solr\example\solr\collection1\conf)到指定地址

(2):复制Solr\example\lib\ext\*.jar 和 war包中的全部lib中的全部jar包到一个文件夹中。

4:执行命令

java -classpath D:\\uploadCloud\\ClientLib\\* org.apache.solr.cloud.ZkCLI -cmd 
upconfig -zkhost 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 -confdir 
D:\\uploadCloud\\conf -confname myconf

该命令是使用了以前复制的jar包中的ZkCLI程序进行一个指定文件夹的 upconfig 工做

4执行命令

java -classpath D:\\uploadCloud\\ClientLib\\* org.apache.solr.cloud.ZkCLI -cmd 
linkconfig -collection collection -confname myconf -zkhost 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

该命令是将刚刚上传的配置文件命名为一个collection对象

5: 建立connection实例

访问刚刚配置的solr服务器

http://127.0.0.1:8081/solr/admin/collections?action=CREATE&name=collection1&numShards=3&replicationFactor=3&maxShardsPerNode=3

name:collection的名称

numShards:指定分片数量(slices)

replicationFactor:副本数量

maxShardsPerNode:默认值为1,注意三个数值:numShards、replicationFactor、liveSolrNode,一个正常的solrCloud集群不允许同一个liveSolrNode上部署同一个shard的多个replic,所以当maxShardsPerNode=1时,numShards*replicationFactor>liveSolrNode时,报错。所以正确时因知足如下条件: numShards*replicationFactor<liveSolrNode*maxShardsPerNode

createNodeSet

collection.configName:指定该collection使用那份config,这份config必须存在于zk中。

 

Solr服务器集群的好处

集中式的配置信息使用ZK进行集中配置

启动时能够指定把Solr的相关配置文件上传Zookeeper,多机器共用。这些ZK中的配置不会再拿到本地缓存,Solr直接读取ZK中的配置信息。配置文件的变更,全部机器均可以感知到。另外,Solr的一些任务也是经过ZK做为媒介发布的。目的是为了容错。接收到任务,但在执行任务时崩溃的机器,在重启后,或者集群选出候选者时,能够再次执行这个未完成的任务。

自动容错SolrCloud对索引分片,并对每一个分片建立多个Replication

每一个Replication均可以对外提供服务

一个Replication挂掉不会影响索引服务。更强大的是,它还能自动的在其它机器上帮你把失败机器上的索引Replication重建并投入使用。

近实时搜索

当即推送式的replication(也支持慢推送)。能够在秒内检索到新加入索引。

均衡查询压力 查询时自动负载均衡SolrCloud索引的多个Replication能够分布在多台机器上 若是查询压力大,能够经过扩展机器,增长Replication来减缓。

自动分发的索引和索引分片发送文档到任何节点,它都会转发到正确节点。

事务日志事务日志确保更新无丢失,即便文档没有索引到磁盘。

索引存储在HDFS上索引的大小一般在G和几十G,上百G的不多,这样的功能或许很难实用。 可是,若是你有上亿数据来建索引的话,也是能够考虑一下的。 我以为这个功能最大的好处或许就是和下面这个“经过MR批量建立索引”联合实用。

经过MR批量建立索引 有了这个功能,你还担忧建立索引慢吗?

强大的RESTful API一般你能想到的管理功能,均可以经过此API方式调用。这样写一些维护和管理脚本就方便多了。

优秀的管理界面主要信息一目了然;能够清晰的以图形化方式看到SolrCloud的部署分布;固然还有不可或缺的Debug功能。

 

 

索引(collection)的逻辑图

Solr和索引对照图

建立索引过程

分布式查询

Shard Splitting

相关文章
相关标签/搜索