SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,是 Solr 的集群版,用于在多个服务器之间分发索引内容和查询请求,具有容错性和高可用性。它的主要思想是使用Zookeeper 作为集群的配置信息中心,使用 ZooKeeper 来管理集合、分配、主节点和副本,指定哪些服务器需要处理请求。本文使用的软件版本:Solr 8.9.0、jdk1.8.0_181。
- Solr单机版安装教程:Linux环境下solr 8.9的下载及安装配置
1、SolrCloud 简介
SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud 的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud 来满足这些需求。SolrCloud 有如下特点:
- 1)集中式的配置信息
- 2)自动容错
- 3)近实时搜索
- 4)查询时自动负载均衡
SolrCloud 架构图
物理结构:三个 Solr 实例(每个实例包括两个 Core)组成一个 SolrCloud。
逻辑结构:索引集合包括两个 Shard(shard1和shard2),shard1 和 shard2 分别由三个 Core 组成,其中一个 Leader 两个 Replication,Leader 是由 Zookeeper 选举产生。每个 shard 上三个 Core 的索引数据一致,解决高可用问题;用户发起索引请求负载到 shard1 和 shard2 上,解决高并发问题。
- collection:Collection 在 SolrCloud 集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个 Shard(分片),它们使用相同的配置信息。
- Core:每个 Core 是 Solr 中一个独立运行单位,提供索引和搜索服务。一个 shard 需要由一个 Core 或多个 Core 组成。
- Master 或 Slave:Master 是 master-slave 结构中的主节点,Slave 是 master-slave 结构中的从节点。同一个 Shard 下 master 和 slave 存储的数据是一致的。
- Shard:Collection 的逻辑分片。每个 Shard 被化成一个或者多个 replication,通过选举确定哪个是 Leader。
2、SolrCloud 的下载及安装
2.1 环境准备
准备4台主机,1台用于安装Zookeeper,另外3台用于安装solr实例。
主机 | 用途 |
---|---|
10.40.96.10 | 安装 Zookeeper |
10.40.96.11 | 安装 Solr 实例 |
10.40.96.12 | 安装 Solr 实例 |
10.40.96.13 | 安装 Solr 实例 |
另外Solr是java开发的,所以我们的环境需要安装jdk(JDK1.8及以上)。
2.2 安装 Zookeeper
Zookeeper的下载及安装教程:linux环境下zookeeper3.8.0的安装教程,安装后 Zookeeper 地址为:10.40.96.10:2181 。
2.3 单机安装 Solr
先在一台机器(10.40.96.11)上安装 Solr,配置完成后再分发 Solr 到其他主机。
2.3.1 下载solr
下载solr,windows和linux都可以下载 .tgz(.tgz本质是.tar.gz),和.zip解压出来都一样的。solr下载地址:
2.3.2 解压solr
把solr 的压缩包上传到Linux系统,然后解压。
tar zxvf solr-8.9.0.tgz
2.3.3 配置 IK 分词器
1)下载 IK 分词器
下载 IK 分词器的 jar 包放入 server/solr-webapp/webapp/WEB-INF/lib 目录下;可到 Maven 中央仓库(https://search.maven.org/)下载 jar 包:
<dependency>
<groupId>com.github.magese</groupId>
<artifactId>ik-analyzer</artifactId>
<version>8.4.0</version>
</dependency>
也可以使用自带的中文分词器 lucene-analyzers-smartcn,将lucene-analyzers-smartcn.jar 复制到 solr-8.9.0/server/solr-webapp/webapp/WEB_INF/lib下。
2)配置 IK 分词器
将 resources 目录下的 IKAnalyzer.cfg.xml、ext.dic、stopword.dic 放入 server/resources 目录下;可以在 github (https://github.com/magese/ik-analyzer-solr) 上下载这些配置文件。
复制默认配置用于 IK 配置
cd ${SOLR_HOME}/server/solr/configsets
cp -r _default/ ik_default
将 resources 目录下的 ik.conf 及 dynamicdic.txt 放入 ${SOLR_HOME}/server/solr/configsets/ik_default/conf 目录下;可以在 github (https://github.com/magese/ik-analyzer-solr) 上下载这些配置文件。
修改 ${SOLR_HOME}/server/solr/configsets/ik_default/conf/managed-schema,添加 IK 分词器:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
3)将配置文件上传至 Zookeeper
cd ${SOLR_HOME}/server/scripts/cloud-scripts
./zkcli.sh -zkhost 10.40.96.10:2181 -cmd upconfig -confname my-config -confdir ${SOLR_HOME}/server/solr/configsets/ik_default/conf/
IK 分词器详细的使用可参考官网:https://github.com/magese/ik-analyzer-solr/blob/master/README-CLOUD.md
2.4 其他机器安装 Solr
将 10.40.96.11 安装的 Solr 分发到其他主机(10.40.96.12、10.40.96.13)。
scp -r ${SOLR_HOME} hadoop@10.40.96.12:/home/hadoop
scp -r ${SOLR_HOME} hadoop@10.40.96.13:/home/hadoop
2.5 启动/停止 SolrCloud
启动命令
分别在各 Solr 主机上运行如下命令启动SolrCloud:
bin/solr start -c -z 10.40.96.10:2181 [-p port]
停止命令
bin/solr stop [-p port]
3、SolrCloud 控制台使用
访问 SolrCloud 控制台:http://ip:8983/solr
3.1 添加 Collection 对应的配置
通过命令行来添加配置到 Zookeeper,先使用带 IK 分词器的默认配置(第一台 Solr 主机 10.40.96.11 上有)添加一个新的配置,再在该配置上进行调整修改。
cd ${SOLR_HOME}/server/scripts/cloud-scripts
./zkcli.sh -zkhost 10.40.96.10:2181 -cmd upconfig -confname new_config_1 -confdir ${SOLR_HOME}/server/solr/configsets/ik_default/conf/
3.2 添加 Collection
使用上一步新加的配置 new_config_1:
3.3 在 Collection 中添加 schema 信息
3.4 查看添加的字段信息
在 managed-schema 中查看添加的字段信息:
3.5 添加/更新文档
在Documents中可以添加/更新文档。
{"id": "123456","age": 40,"name": "李白","poems": "望庐山瀑布","about": "字太白","success": "创造了古代浪漫主义文学高峰、歌行体和七绝达到后人难及的高度"},
{"id": "123457","age": 31,"name": "杜甫","poems": "望岳","about": "字子美","success": "唐代伟大的现实主义文学作家,唐诗思想艺术的集大成者"}
3.6 查询文档
在Query中可以查询文档。
评论区