SolrCloud安装(5.2.1) 2015-07-28 19:00

介绍

Lucene是一个基于Java语言的、开源的搜索引擎开发库。Solr是一个基于Lucene的搜索引擎应用。作为开发库,Lucene无法独立运行,需要基于此库开发出应用。而Solr可以独立运行。

Solr的基本作用是文档的索引和检索。通过将大量文档提交到Solr进行索引,然后就可以通过Solr进行关键字检索,快速搜索出满足条件的文档。这有助于免去重复开发搜索引擎应用的工作。

当应用还很渺小的时候,基于单机的Solr已经足以胜任这份工作。但随着应用慢慢变大,单机Solr性能无法支撑。于是,引入的Solr集群。Solr集群与常规集群本质上没有什么不同。也是前端是负载均衡器,后端是一台台Solr服务器。此时各个Solr服务器上的数据是完全相同的。当有数据更新时(比如Client端提交了一个新的文档),需要将数据复制到其他各个节点.

这种方式显示效率不高.所以,后来又出来了SolrCloud. SolrCloud是基于ZooKeeper和Solr的分布式解决方案,为Solr添加分布式功能,用于建立高可用、高伸缩、自动容错、分布式索引、分布式查询的Solr服务器集群。

SolrCloud并非一个新的软件发布包,而是Solr4.0版本新增组件用于跟ZooKeeper配合提供分布式功能,部署时只是修改启动配置。

概念

  • Collection:在SolrCloud中逻辑意义上的完整的索引。它常常被划分为一个或多个Shard(分区),它们使用相同的Config Set。
  • Shard:Collection的逻辑分片(索引区分)。每个Shard被划分成一个或者多个replicas,通过选举确定哪个是Leader。超过1个时就是分布式索引。
  • Config Set: Solr Core提供服务必须的一组配置文件。每个config set有一个名字。最小需要包括solrconfig.xml和schema.xml。存储在ZK中。

环境规划

将SolrCloud安装在四个节点上,即共有四个Solr Core。各主机名分别是:

  • ctrl
  • data01
  • data02
  • data03

collection: cheyo_collection
Shard: 2
Replica: 2

即该collection共有2个Shard,每个Shard有2个副本。这样刚好将数据分散到四个节点上。

安装

安装依赖

SolrCloud依赖于:

  1. JDK
  2. Zookeeper(本文档假定Zookeeper已经安装在data01、data02、data03三个节点上)

安装Tomcat

cd /opt
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.63/bin/apache-tomcat-7.0.63.tar.gz
tar -zxvf apache-tomcat-7.0.63.tar.gz
ln -s apache-tomcat-7.0.63 tomcat

安装Solr

cd /opt
wget http://mirrors.cnnic.cn/apache/lucene/solr/5.2.1/solr-5.2.1.tgz
tar -zxvf solr-5.2.1.tgz
ln -s solr-5.2.1 solr

复制solr安装包到tomcat下

cp /opt/solr/server/webapps/solr.war /opt/tomcat/webapps/

启动tomcat,会自动解压solr.war到tomcat/webapps/solr下。

  • 启动Tomcat的命令: /opt/tomcat/bin/startup.sh
  • 停止Tomcat的命令: /opt/tomcat/bin/shutdown.sh

准备相关库:

cp -rf /opt/solr/server/lib/ext/* /opt/tomcat/webapps/solr/WEB-INF/lib/
mkdir -p /opt/tomcat/webapps/solr/WEB-INF/classes
cp /opt/solr/example/resources/log4j.properties /opt/tomcat/webapps/solr/WEB-INF/classes/

配置SolrCores

mkdir /opt/solr/SolrCores
cp -rp /opt/solr/server/solr/solr.xml /opt/solr/SolrCores/

修改/opt/solr/SolrCores/solr.xml中的监听端口为10080。

1
2
3
4
5
6
7
8
9
<solrcloud>
    <str name="host">${host:}</str>
    <int name="hostPort">${jetty.port:10080}</int>
    <str name="hostContext">${hostContext:solr}</str>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
    <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
</solrcloud>

修改tomcat/webapps/solr/WEB-INF/web.xml,取消注释,配置"env-entry-value"的值为

1
2
3
4
5
<env-entry>
   <env-entry-name>solr/home</env-entry-name>
   <env-entry-value>/opt/solr/SolrCores</env-entry-value>
   <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

配置SolrCloud

mkdir /opt/SolrCloud/
mkdir /opt/SolrCloud/config-files
cp -rf /opt/solr/server/solr/configsets/basic_configs/conf/* /opt/SolrCloud/config-files
mkdir /opt/SolrCloud/solr-lib
cp -rf /opt/tomcat/webapps/solr/WEB-INF/lib/* /opt/SolrCloud/solr-lib/

上传配置到Zookeeper:

java -classpath .:/opt/SolrCloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost data01:2181 -confdir /opt/SolrCloud/config-files -confname myconf
java -classpath .:/opt/SolrCloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection mycollection -confname myconf -zkhost data01:2181

上传完成后,可以登录Zookeeper查看:

/opt/zookeeper/bin/zkCli.sh  -server data01:2181
ls /configs/myconf
[currency.xml, protwords.txt, synonyms.txt, _rest_managed.json, solrconfig.xml, lang, stopwords.txt, schema.xml]

配置Tomcat

修改tomcat的bin目录下的catalina.sh,加入以下命令:

export JAVA_OPTS="-DzkHost=data01:2181,data02:2181,data03:2181"

修改Tomcat的监听端口为10080,与SolrCore一致:

1
2
3
<Connector port="10080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

其他节点配置

以上是在其中一个节点的配置。将/opt/solr,/opt/Solr,/opt/tomcat/目录拷贝到其他三个节点。

scp -r /opt/solr* data01:/opt/
scp -r /opt/solr* data02:/opt/
scp -r /opt/solr* data03:/opt/
scp -r /opt/SolrCloud data01:/opt/
scp -r /opt/SolrCloud data02:/opt/
scp -r /opt/SolrCloud data03:/opt/
scp -r /opt/tomcat data01:/opt/
scp -r /opt/tomcat data02:/opt/
scp -r /opt/tomcat data03:/opt/

启动

在各个节点上启动Tomcat:

/opt/tomcat/bin/startup.sh

停止:

/opt/tomcat/bin/shutdown.sh

使用

访问Web

http://ctrl:10080/solr/
http://data01:10080/solr/
http://data02:10080/solr/
http://data03:10080/solr/

创建Collection

创建一个Collection,指定3个Shard, 1个副本。

curl 'http://ctrl:10080/solr/admin/collections?action=CREATE&name=cheyo_collection&numShards=2&replicationFactor=2'

响应:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version="1.0" encoding="utf-8"?>
<response>
    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">4724</int>
    </lst>
    <lst name="success">
        <lst>
            <lst name="responseHeader">
                <int name="status">0</int>
                <int name="QTime">2221</int>
            </lst>
            <str name="core">cheyo_collection2_shard2_replica2</str>
        </lst>
        <lst>
            <lst name="responseHeader">
                <int name="status">0</int>
                <int name="QTime">2898</int>
            </lst>
            <str name="core">cheyo_collection2_shard2_replica1</str>
        </lst>
        <lst>
            <lst name="responseHeader">
                <int name="status">0</int>
                <int name="QTime">3683</int>
            </lst>
            <str name="core">cheyo_collection2_shard1_replica2</str>
        </lst>
        <lst>
            <lst name="responseHeader">
                <int name="status">0</int>
                <int name="QTime">4304</int>
            </lst>
            <str name="core">cheyo_collection2_shard1_replica1</str>
        </lst>
    </lst>
</response>

参考文档

  1. Solr之SolrCloud集群搭建
  2. SolrCloud分布式集群部署步骤
  3. Apache SolrCloud安装
Tags: #Solr    Post on Hadoop