SolrCloud部署和使用手册

 

SolrCloud部署和使用手册

 

 

 

 

 

 

 

 

 

 

 

 

 


文档修订摘要

 

日期

版本

描述

著者

审阅者

2013-12-23

0.1

将txt简易模板的文档提取到word模板。

张乐雷

 

2013-12-23

0.2

创建collection的url中制定了createNodeSet

张乐雷

 

2013-12-29

0.3

1、  solr.war直接使用solr发布的文件,不在进行修改。

2、  日志jar和配置放置到tomcat/lib目录

3、  新增维护document的命令,提供了不同方式来删除或新增索引的方法

4、  新增直接查询solr日志的输出文件

张乐雷

 

2014-2-22

0.4

1、  对文档格式大幅改造。

2、  新增监控

3、  增加了zookeeper的维护和监控命令

4、  细化了tomcat/zookeeper操作命令和脚本

5、  新增查看zookeeper日志的方法

6、  增加章节:日常运维

7、  增加章节:系统环境说明,包括:平台环境、软件环境

张乐雷

 

2014-3-3

0.5

1、  新增章节:文件管理。

2、  调整的zk 的upconfig命令。

3、  细化solr collection的命令说明。

4、  常见问题,新增scheme.xml变化、新增collection如何操作的步骤。

张乐雷

 

2014-3-28

0.6

1、常见问题目录,新增如何删除索引数据

张乐雷

 

2014-3-31

0.7

1、丰富日志查看方式

2、增加汇总日志目录

张乐雷

 

2014-4-6

0.8

1、  针对solr升级到4.7.1版本,增加常用部署脚本章节

2、  常见问题新增:如何在日志中定位关键字并输出到文件?

张乐雷

 

2014-4-20

0.9

1、常见问题新增:6.2 生产环境发布需要检查或配置内容有那些?

张乐雷

 

2014-4-28

1.0

1、常见问题新增:新增sheme.xml如何部署

张乐雷

 

2014-4-29

1.0.1

针对新增sheme.xml如何部署问题,进行详细说明,并给出具体实例。

张乐雷

 

2014-7-23

1.1

1、针对zk地址变化后,需要配置cs_cfg_solr对应的租户表

2、AICS.CS_CFG_SOLR变更为按租户分表,对其进行了详细描述。

张乐雷

 

2014-8-15

1.2

1、为解决无法update问题,新增加章节:软件异常处理

2、问题解答章节,新增:如何原子更新文件指定字段。

张乐雷

 

2014-10-23

1.3

1、细化部署方案

张乐雷

 

2014-11-11

1.4

1、细化zk日志配置

张乐雷

 

2014-12-18

1.5

1、验证环境是否搭建成功,界面是否正常打开、能否正常查询数据。

张乐雷

 

2015-1-12

1.6

1、常见问题,删除solr的使用方法

张乐雷

 

2015-1-28

1.7

1、新增快速重新搭建环境步骤,针对两个ip的环境的第一次探索部署成功。

张乐雷

 

2015-2-10

1.8

1、如果配置zookeeper日志输出目录

张乐雷

 

2015-3-6

1.9

1、修改zookeeper输出日志配置方式

2、删除环境重置命令章节

张乐雷

 

2015-3-9

2.0

1、修改了创建collection和replica的方式

2、修改章节“如果配置zookeeper日志输出目录”调整zk日志输出方式,屏蔽zookeeper.out输出内容。

张乐雷

 

2015-3-28

2.1

1、增加优化章节

2、将异常处理迁移到常见问题章节

3、增加zookeeper的详细使用说明

张乐雷

 

2015-3-29

2.2

1、丰富应用章节。新增:应用概述、简单例子、规划设计、搜索配置、如何进行索引操作、如何进行搜索、接口封装

张乐雷

 

 


目录

 

第1章        引言... 2

1.1       文档用途... 2

1.2       阅读对象... 2

1.3       名词术语... 2

1.4       参考资料... 3

第2章        介绍... 4

2.1       简介... 4

2.2       功能... 5

2.3       概念... 6

2.4       架构... 7

2.4.1        索引(collection)的逻辑图... 7

2.4.2        Solr和索引对照图... 8

2.4.3        创建索引过程... 9

2.4.4        分布式查询... 10

2.4.5        ShardSplitting. 11

2.4.6        近实时搜索和实时获取... 11

第3章        部署... 12

3.1       系统环境... 12

3.1.1        平台环境... 12

3.1.2        软件环境... 12

3.2       部署方案设计... 12

3.2.1        部署方式... 13

3.2.2        部署图... 13

3.2.3        主机和软件... 14

3.2.4        存储空间评估... 14

3.2.5        内存要求... 15

3.3       文件管理... 16

3.4       Zookeeper安装... 16

3.4.1        介绍... 16

3.4.2        软件... 16

3.4.3        单机安装... 17

3.4.4        集群安装... 17

3.4.5        配置基于zookeeper的分布式的solr服务... 29

3.4.6        SolrCloud使用Zookeeper管理集群的基本流程... 29

3.5       简单搭建步骤... 30

3.5.1        准备文件... 30

3.5.2        修改配置... 30

3.5.3        日志配置... 31

3.5.4        启动zookeeper31

3.5.5        上传zookeeper文件和链接collection. 31

3.5.6        启动tomcat31

3.5.7        创建collection和replica. 32

3.5.8        关闭tomcat32

3.5.9        关闭zookeeper32

3.6       详细搭建步骤... 33

3.6.1        准备solrcloud文件包... 33

3.6.2        准备solr.war33

3.6.3        准备管理脚本... 33

3.6.4        修改tomcat配置... 33

3.6.5        修改zookeeper配置... 34

3.6.6        日志配置... 34

3.6.7        启动zookeeper35

3.6.8        上传zookeeper文件和链接collection. 35

3.6.9        启动tomcat35

3.6.10      创建collection和replica. 36

3.6.11      关闭tomcat37

3.6.12      关闭zookeeper37

第4章        应用... 38

4.1       应用概述... 38

4.1.1        应用模式... 38

4.1.2        使用过程说明... 39

4.2       简单例子... 39

1.1.1        Solr Schema设计... 39

1.1.2        构建索引... 39

1.1.3        搜索测试... 40

4.3       规划设计... 41

4.3.1        定义业务模型... 42

4.3.2        定制索引服务... 43

4.4       搜索配置... 43

4.4.1        Solr Schema设计(如何定制索引的结构?)43

4.5       如何进行索引操作?... 46

4.5.1        操作方式... 46

4.5.2        基本索引操作... 49

4.5.3        批量索引操作... 50

4.6       如何进行搜索(一)... 54

4.6.1        搜索语法... 54

4.6.2        字段增加权重... 57

4.6.3        Solr分析器... 58

4.6.4        Solr高亮使用... 62

4.7       如何进行搜索(二)... 62

4.7.1        Query参数... 62

4.7.2        查询语法... 63

4.7.3        函数查询(FunctionQuery)... 65

4.8       接口封装... 67

第5章        优化... 69

第6章        运维... 73

6.1       ZK日常运维... 73

6.1.1        ZK清理数据目录... 73

6.1.2        ZK程序日志... 75

6.2       ZKServer的自检恢复... 75

6.3       ZK监控... 75

6.4       日志管理... 76

6.4.1        Solr日志... 76

6.4.2        ZK日志... 76

6.4.3        汇总日志... 77

6.5       ZK加载数据出错... 77

6.6       ZK配置参数详解... 78

6.7       常用脚本... 81

6.7.1        Zookeeper脚本... 81

6.7.2        Tomcat脚本... 81

6.7.3        日志脚本... 82

6.7.4        部署脚本... 82

6.8       常用命令... 83

6.8.1        ZK文件命令... 83

6.8.2        ZK监控命令... 85

6.8.3        Tomcat命令... 87

6.8.4        Solr新增数据... 88

6.8.5        Solr删除数据命令... 89

6.8.6        SolrCollection命令... 90

6.8.7        Solr原子操作命令... 91

6.9       文件管理... 92

6.9.1        Solr配置文件... 93

6.9.2        ZK数据目录... 93

6.9.3        ZK事务日志目录... 93

6.9.4        ZK文件管理... 93

6.10         注意事项... 94

6.10.1      保持Server地址列表一致... 94

6.10.2      独立的事务日志输出... 94

6.10.3      配置合理的JVM堆大小... 94

第7章        问题和解答... 95

7.1       开发和测试环境... 95

7.2       如何验证是否软件安装正确?... 95

7.2.1        验证Zookeeper95

7.2.2        验证Solr95

7.3       生产环境部署关键检查项?. 96

7.3.1        Solr96

7.3.2        Zookeeper97

7.4       如何配置zookeeper日志输出目录?... 97

7.5       如何查看日志?... 97

7.6       需要定时清理那些日志?... 98

7.7       如何在日志中定位关键字并输出到文件?... 99

7.8       新增scheme.xml,如何部署?... 99

7.9       修改scheme.xml,如何升级?... 100

7.10         新增租户(即创建collection),如何操作?... 101

7.11     在用zkCli.sh启动客户端时,Willnot attempt to authenticate using SASL (无法定位登录配置)103

7.12     Zookeeper的ip或port变更涉及到的调整?... 103

7.13         如何删除索引数据?(一)... 103

7.14         如何删除索引命令?(二)... 103

7.15         如何原子更新文档指定字段值?... 106

7.16         常用linux打包命令?... 106

7.17         快速重新搭建环境步骤?... 106

7.18         异常... 109

7.18.1      异常java.io.IOException:Packet len4883899 is out of range!109

7.18.2      然后solr数据、zk数据后,仍无法创建collection,报错。... 110

 

                                 



第1章      引言

1.1  文档用途

该文档是对SolrCloud的介绍、部署、开发、维护等方面的说明性文档。

1.2  阅读对象

部署人员、运维人员、开发人员。

1.3  名词术语

  • Node : A JVM instance running Solr; a server.
  • Cluster : A cluster is a set of Solr nodes managed as a single unit. 
  • Core : An individual Solr instance (represents a logical index). Multiple cores can run on a single node.
  • Shard : In Solr, a logical section of a single collection. This may be spread across multiple nodes of the cluster. Each shard can have as many replicas as needed.
  • Leader : Each shard has one node identified as its leader. All the writes for documents belonging to a shard are routed through the leader.
  • Collection (Solr) : Multiple documents that make up one logical index. A collection must have a single schema, but can be spread over multiple cores. A cluster can have multiple collections. When you create a collection, you specify its number of shards. You may have many collections in the same set of servers, each with a different number of shards.
  • ZooKeeper : Apache ZooKeeper keeps track of configuration and naming, among other things, for a cluster of Solr nodes. A ZooKeeper cluster is used as (1) the central configuration store for the cluster, (2) a coordinator for operations requiring distributed synchronization, and (3) the system of record for cluster topology.
  • Ensemble : Multiple ZooKeeper instances running simultaneously.(同时的)
  • Collection (ZooKeeper) : A group of cores managed together as part of a SolrCloud installation.
  • Overseer : The Overseer coordinates the clusters. It keeps track of the existing nodes and shards and assigns shards to nodes.
  • Transaction Log : An append-only log of write operations maintained by each node.
  • Document : A group of fields and their values. Documents are the basic unit of storage, and their specific locations are found using an index. Documents are assigned to shards using standard hashing, or by specifically assigning a shard within the document ID. Documents are versioned after each write operation.

1.4  参考资料

1.      http://wiki.apache.org/solr/SolrCloud

2.      http://www.solrcn.com/books

3.      https://cwiki.apache.org/confluence/display/solr

4.      http://wiki.apache.org/solr/Solrj

5.      http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html官网zookeeper维护。

第2章      介绍

2.1  简介

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-serviceAPI接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。

SOLR逻辑运行图如下:

                           图一

                           图二

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

2.2  功能

集中式的配置信息使用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功能。

2.3  概念

Collection:在SolrCloud集群中逻辑意义上的完整的索引。它常常被划分为一个或多个Shard,它们使用相同的ConfigSet。如果Shard数超过一个,它就是分布式索引,SolrCloud让你通过Collection名称引用它,而不需要关心分布式检索时需要使用的和Shard相关参数。

Config Set: Solr Core提供服务必须的一组配置文件。每个config set有一个名字。最小需要包括solrconfig.xml(SolrConfigXml)和schema.xml(SchemaXml),除此之外,依据这两个文件的配置内容,可能还需要包含其它文件。它存储在Zookeeper中。Config sets可以重新上传或者使用upconfig命令更新,使用Solr的启动参数bootstrap_confdir指定可以初始化或更新它。

Core: 也就是Solr Core,一个Solr中包含一个或者多个SolrCore,每个Solr Core可以独立提供索引和查询功能,每个Solr Core对应一个索引或者Collection的Shard,Solr Core的提出是为了增加管理灵活性和共用资源。在SolrCloud中有个不同点是它使用的配置是在Zookeeper中的,传统的Solr core的配置文件是在磁盘上的配置目录中。

Leader: 赢得选举的Shard replicas。每个Shard有多个Replicas,这几个Replicas需要选举来确定一个Leader。选举可以发生在任何时间,但是通常他们仅在某个Solr实例发生故障时才会触发。当索引documents时,SolrCloud会传递它们到此Shard对应的leader,leader再分发它们到全部Shard的replicas。

Replica: Shard的一个拷贝。每个Replica存在于Solr的一个Core中。一个命名为“test”的collection以numShards=1创建,并且指定replicationFactor设置为2,这会产生2个replicas,也就是对应会有2个Core,每个在不同的机器或者Solr实例。一个会被命名为test_shard1_replica1,另一个命名为test_shard1_replica2。它们中的一个会被选举为Leader。

Shard: Collection的逻辑分片。每个Shard被化成一个或者多个replicas,通过选举确定哪个是Leader。

Zookeeper: Zookeeper提供分布式锁功能,对SolrCloud是必须的。它处理Leader选举。Solr可以以内嵌的Zookeeper运行,但是建议用独立的,并且最好有3个以上的主机。

2.4  架构

2.4.1索引(collection)的逻辑图

2.4.2Solr和索引对照图

2.4.3创建索引过程

2.4.4分布式查询

2.4.5Shard Splitting

2.4.6近实时搜索和实时获取

NRT 近实时搜索Solr的建索引数据是要在提交时写入磁盘的,这是硬提交,确保即便是停电也不会丢失数据;为了提供更实时的检索能力,Solr设定了一种软提交方式。软提交(soft commit):仅把数据提交到内存,index可见,此时没有写入到磁盘索引文件中。

一个通常的用法是:每1-10分钟自动触发硬提交,每秒钟自动触发软提交。

RealTime Get 实时获取允许通过唯一键查找任何文档的最新版本数据,并且不需要重新打开searcher。这个主要用于把Solr作为NoSQL数据存储服务,而不仅仅是搜索引擎。Realtime Get当前依赖事务日志,默认是开启的。另外,即便是Soft Commit或者commitwithin,get也能得到真实数据。注:commitwithin是一种数据提交特性,不是立刻,而是要求在一定时间内提交数据.

 

第3章      部署

3.1  系统环境

3.1.1平台环境

平 台

运行client

运行server

开发环境

生产环境

GNU/Linux

Sun Solaris

FreeBSD

ⅹ,对nio的支持不好

Win32

MacOSX

注:运行client是指作为客户端,与server进行数据通信,而运行server是指将ZK作为服务器部署运行。

3.1.2软件环境

ZooKeeper Server是一个Java语言实现的分布式协调服务框架,因此需要6或更高版本的JDK支持。集群的机器数量方面,宽泛的讲,其实是任意台机器都可以部署运行的,注意,这里并没有说一定要奇数台机器哦!通常情况下,建议使用3台独立的Linux