Solr入门

目录

SolrCloud配置... 2

简介... 2

Solr 是什么?... 2

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

1:下载Solr 2

2:部署Tomcat 2

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

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

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

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和索引对照图

08a2dd497c883cf82a12d4f6816a4ba94a3.jpg

创建索引过程

eda0b72d0f0653f68b732c5456c7a258400.jpg

分布式查询

3e63e55da2d2bfcec18b03655525d0f815b.jpg

Shard Splitting

ba2be84cf90d1a0b85025eb1677b372580f.jpg

 

转载于:https://my.oschina.net/u/147708/blog/1923931

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值