欢迎投稿

今日深度:

Solr集群,

Solr集群,


搜索功能

搜索:站内搜索。使用 solr 技术。
1) solr 封装 Lucene,用来做站内搜索
2) solr 是一个 web 项目。
3) 只需要向 solr 项目发送一些特定符号语句,实现索引库增加,删除,修改 ,查询。类似 mysql 服务。

安装solr

1) 导入 solr 安装包
a) 使用命令:rz 命令

    [root@bogon mysolr]# ll
    total 155272
    -rw-r--r--. 1 root root 8816567 May 5 2015 apache-tomcat-7.0.61.tar.gz
    -rw-r--r--. 1 root root 150010621 Jun 9 2015 solr-4.10.3.tgz.tgz

Solr 是一个 web 项目,需要部署到 tomcat 服务器,所以需要 tomcat。
2) 解压 solr 和 tomcat
a) tar -zxvf solr-4.10.3.tgz.tgz
3) 拷贝 solr 项目到 tomcat 服务器
a) 拷贝 solr 解压包下面 example/webapps/solr.war 拷贝到 tomcat 服务器 webapps 下面
i. cp solr-4.10.3/example/webapps/solr.war tomcat-solr/webapps/
4) 解压 solr.war
a) 使用命令解压:unzip –oq solr.war –d solr
b) 直接运行 tomcat 自动解压。

    [root@bogon webapps]# ll
    total 24
    drwxr-xr-x. 14 root root 4096 May 18 18:42 docs
    drwxr-xr-x. 7 root root 4096 May 18 18:42 examples
    drwxr-xr-x. 5 root root 4096 May 18 18:42 host-manager
    drwxr-xr-x. 5 root root 4096 May 18 18:42 manager
    drwxr-xr-x. 3 root root 4096 May 18 18:42 ROOT
    drwxr-xr-x. 8 root root 4096 May 18 18:48 solr

5) 拷贝 solr 服务运行所需要依赖包
a) 拷贝 solr 解压目录 example/lib/ext/* 所有 jar 文件,拷贝到 tomcat 下面 solr 项目
WEB-INF/lib
b) 拷贝命令:cp solr-4.10.3/example/lib/ext/* tomcat-solr/webapps/solr/WEB-INF/lib/
6) 导入日志配置文件 log4j
a) 把日志文件 log4j.properties 拷贝 tomcat/webapps/solr/WEB-INF/classes
b) 没有 classes 目录:需要手动创建:mkdir classes

    [root@bogon classes]# ll
    total 4
    -rw-r--r--. 1 root root 428 Oct 6 2013 log4j.properties

7) 创建索引仓库
a) 在 mysolr 文件夹创 solrhome,把仓库放入 solrhome

    [root@bogon mysolr]# ll
    total 155284
    -rw-r--r--. 1 root root 8816567 May 5 2015 apache-tomcat-7.0.61.tar.gz
    drwxr-xr-x. 8 root root 4096 May 18 18:44 solr-4.10.3
    -rw-r--r--. 1 root root 150010621 Jun 9 2015 solr-4.10.3.tgz.tgz
    drwxr-xr-x. 2 root root 4096 May 18 18:56 solrhome
    drwxr-xr-x. 9 root root 4096 May 18 18:42 tomcat-solr
    [root@bogon mysolr]#

b) 拷贝 solr 解压目录 example/solr 到 solrhome
i. Example/solr 就是仓库。
ii. cp -r solr-4.10.3/example/solr solrhome/
8) 指定 solr 服务运行仓库地址
a) 配置 tomcat/bin catalina.sh 文件,指定仓库地址
b) export JAVA_OPTS=”-Dsolr.solr.home=/usr/local/hadoop/mysolr/solrhome/solr”
9) 拷贝 solr 解压目录下面 contrib,dist 目录到和 collection1 同一级目录
a) cp -r solr-4.10.3/contrib/ solrhome/solr/
b) cp -r solr-4.10.3/dist/ solrhome/solr/
10) 修改配置文件加载 contrib,dist 类库
a) 修改仓库中 collection1/conf/solrConfig 配置文件

    <lib dir="${solr.install.dir:..}/contrib/extraction/lib" regex=".*\.jar" />
     <lib dir="${solr.install.dir:..}/dist/" regex="solr-cell-\d.*\.jar" />
     <lib dir="${solr.install.dir:..}/contrib/clustering/lib/" regex=".*\.jar" />
     <lib dir="${solr.install.dir:..}/dist/" regex="solr-clustering-\d.*\.jar" />
     <lib dir="${solr.install.dir:..}/contrib/langid/lib/" regex=".*\.jar" />
     <lib dir="${solr.install.dir:..}/dist/" regex="solr-langid-\d.*\.jar" />
     <lib dir="${solr.install.dir:..}/contrib/velocity/lib" regex=".*\.jar" />
     <lib dir="${solr.install.dir:..}/dist/" regex="solr-velocity-\d.*\.jar" />

安装IK分词器

定义使用 IK 分词器类型

在配置文件:scheme.xml 配置文件定义:域类型:FieldType,域类型定义使用何种分词器。

        <fieldType name="text_ik" class="solr.TextField">
            <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
        </fieldType>

定义业务域

定义业务域,业务域使用 Ik 分词器。
导入查询数据库数据,把数据库数据导入索引库。

    <field name="item_title" type="text_ik" indexed="true" stored="true"/>
    <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
    <field name="item_price" type="long" indexed="true" stored="true"/>
    <field name="item_image" type="string" indexed="false" stored="true" />
    <field name="item_category_name" type="string" indexed="true" stored="true" />
    <field name="item_desc" type="text_ik" indexed="true" stored="false" />
    <field name="item_keywords" type="text_ik" indexed="true" stored="false" 
    multiValued="true"/>
    <copyField source="item_title" dest="item_keywords"/>
    <copyField source="item_sell_point" dest="item_keywords"/>
    <copyField source="item_category_name" dest="item_keywords"/>
    <copyField source="item_desc" dest="item_keywords"/>

导入IK分词器Jar

IK 分词器需要使用 Ik 分词器 jar 文件:
拷贝 Ik 分词器 jar 包到 tomcat-solr/webapps/solr/WEB-INF/lib
进入 solr 项目 lib 目录,使用 rz 命令直接导入:IKAnalyzer2012FF-u1.jar

导入配置文件

需要 Ik 分词器配置文件:核心配置文件:ikAnalyzer.cfg.xml,ext.dic,stopword.dic
ikAnalyzer.cfg.xml 加载 ext.dic,stopword.dic
ext.dic,stopword.dic 无 BOM 的 UTF-8 格式
注意:把上面 3 个文件导入 tomcat-solr/webapps/solr/WEB-INF/classes进入 classes 目录:使用 rz 命令直接导入

Solr集群

SolrCloud

SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些需求。
SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,它的主要思想是使用 Zookeeper作为集群的配置信息中心。
它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡

SolrCloud 结构

SolrCloud 为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行 Shard(分片)拆分,每个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不同的 Shard 的服务器中操作索引。
SolrCloud需要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成,由 zookeeper 来进行协调管理。

1 物理结构
三个 Solr 实例( 每个实例包括两个 Core),组成一个 SolrCloud。
2 逻辑结构
索引集合包括两个 Shard(shard1 和 shard2),shard1 和 shard2 分别由三个 Core 组成,
其中一个 Leader 两个 Replication,Leader 是由 zookeeper 选举产生,zookeeper 控制每个 shard
上三个 Core 的索引数据一致,解决高可用问题。
用户发起索引请求分别从 shard1 和 shard2 上获取,解决高并发问题。
2.1 collection
Collection 在 SolrCloud 集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一
个或多个 Shard(分片),它们使用相同的配置信息。
比如:针对商品信息搜索可以创建一个 collection。
collection=shard1+shard2+….+shardX
2.2 Core
每个 Core 是 Solr 中一个独立运行单位,提供 索引和搜索服务。一个 shard 需要由一个
Core 或多个 Core 组成。由于 collection 由多个 shard 组成所以 collection 一般由多个 core 组
成。
2.3 Master 或 Slave
Master 是 master-slave 结构中的主结点(通常说主服务器),Slave 是 master-slave 结构
中的从结点(通常说从服务器或备服务器)。同一个 Shard 下 master 和 slave 存储的数据是

一致的,这是为了达到高可用目的。
2.4 Shard
Collection 的逻辑分片。每个 Shard 被化成一个或者多个 replication,通过选举确定哪个
是 Leader。

SolrCloud 架构图

搭建 solrCloud 集群

集群架构

1) Zookeeper 是一个服务注册中心,服务协调者。(集群配置文件)
2) solrCloud 集群:
a) 多个 solr 服务:多个部署了 solr 程序的 tomcat。
b) 每一个 tomcat 的 solr 服务都需要自己仓库。

SolrCloud 集群

1) 第一步:拷贝单机版部署 solr 服务的 tomcat
a) 拷贝单机版 solr 到 solrCloud 目录
2) 第二步:复制 4 台 tomcat 服务
a) 修改 tomcat-solr 为 tomcat1
b) 依次类推:tomcat2,tomcat3,tomcat4
3) 拷贝 solr 服务所需要仓库
a) 拷贝 solrhome 仓库到 solrCloud 目录
b) 命令:cp -r mysolr/solrhome solrCloud/
c) 仓库重命名,复制4份仓库
4)指定每一台 tomcat 的仓库地址及 Zookeeper 注册中心
a) 配置每一台 tomcat 的 catalina.sh 配置文件
配置内容如下:
Tomcat1:
export JAVA_OPTS=”-Dsolr.solr.home=/usr/local/hadoop/solrCloud/solrhome1/solr -DzkHost=192.168.66.66:2182,192.168.66.66:2183,192.168.66.66:2184”
4) 修改每一台 tomcat 端口(vim tomcat1/conf/server.xml)
5) 修改集群监控端口
a) 修改仓库下面 solr.xml
b) Solr.xml 在仓库:solrhome1/solr/solr.xml
c) Tomcat1 运行端口:8081,监控端口也是:8081,其它tomcat也要修改
c)此端口每一台 tomcat 对应仓库都需要修改
6) 把 solr 集群配置文件交给 Zookeeper 注册中心管理
把仓库核心配置文件放入 Zookeeper 注册中心,当 solr 集群需要加载配置文件,只需要从 Zookeeper 中获取配置文件。
/usr/local/hadoop/mysolr/solr-4.10.3/example/scripts/cloud-scripts/zkCli.sh 把 solr 核心配置上传Zookeeper 注册中心。
上传命令如下:

    /zkcli.sh -zkhost 192.168.66.66:2182, 192.168.66.66:2183, 192.168.66.66:2184 -cmd upconfig -confdir /usr/local/hadoop/solrCloud/solrhome1/solr/collection1/conf -confname myconf

7) 登录 Zookeeper
a) ./zkCli.sh –server 192.168.66.66:2182
8) 启动 4 台 tomcat 服务
a) Sh tomcat1/bin/startup.sh
b) Sh tomcat2/bin/startup.sh
c) Sh tomcat3/bin/startup.sh
d) Sh tomcat4/bin/startup.sh

集群整合项目

配置文件

    <!-- 配置cloudServer集群 -->
    <bean id="cloudServer"
    class="org.apache.solr.client.solrj.impl.CloudSolrServer">
    <constructor-arg name="zkHost"
    value="192.168.66.66:2182,192.168.66.66:2183,192.168.66.66:
    2184"></constructor-arg>
    <property name="defaultCollection"
    value="collection1"></property>
    </bean>

同步索引库

方案 1:远程调用(不推荐)
远程调用模式:
1) 服务器同时同步多个服务
2) 系统直接和多个服务进行交互
方案 2:消息中间件
消息中间件:
1) 商城不直接和服务进行交互,解耦合
2) 商城只需要把数据发送给 JMS
3) 服务再从 JMS 中获取消息即可。

www.htsjk.Com true http://www.htsjk.com/solr/37845.html NewsArticle Solr集群, 搜索功能 搜索:站内搜索。使用 solr 技术。 1) solr 封装 Lucene,用来做站内搜索 2) solr 是一个 web 项目。 3) 只需要向 solr 项目发送一些特定符号语句,实现索引库增加,删...
相关文章
    暂无相关文章
评论暂时关闭