Solr 11 - Solr集群模式的部署(基于Solr 4.10.4搭建SolrCloud)
1 SolrCloud结构说明
- ZooKeeper集群:
a) ZooKeeper需要保证高可用, 需要搭建集群;
b) ZooKeeper需要进行投票和选举机制, 最少需要三个节点;
c) ZooKeeper的三个节点, 注意修改端口号不一样
- Solr集群:
a) 需要四个节点(Solr应用服务器);
b) 四台Tomcat部署4个 solr应用服务器;
c) 整个Collection分为两个分片: 每个分片均由两个副本组成.
2 环境的安装
2.1 环境说明
- OS: CentOS 7.0
- JDK: HotSpot(TM) 1.8.0_162
- Tomcat: 8.0.53
- ZooKeeper: 3.4.10
- Solr: 4.10.4
2.2 部署并启动ZooKeeper集群
ZooKeeper集群的安装部署, 详细文档参见 ZooKeeper 01 - 什么是ZooKeeper + 部署ZooKeeper集群.
2.3 部署Solr单机服务
参考Solr04 - 在Jetty和Tomcat上部署Solr单机服务, 这里通过Tomcat的虚拟环境发布Solr项目.
(1) 创建SolrCloud的发布路径:
创建 /data/solr-cloud作为项目发布路径, 并赋予读写权限:
mkdir -p /data/solr-cloud && cd /data
chmod 644 solr-cloud
(2) 将apache-tomcat-8.0.53.tar.gz拷贝到/data/solr-cloud/tomcat下并解压:
mkdir -p /data/solr-cloud/tomcat && cd /data/solr-cloud/tomcat
tar -zxf apache-tomcat-8.0.53.tar.gz
(3) 解压solr.4.10.4.tgz:
将solr.4.10.4.tgz拷贝到任意一台服务器的/data/solr-cloud下, 解压:
tar -zxf solr-4.10.4.tgz
(4) 找到Solr安装包example/webapps下的solr.war包, 解压缩:
cd /data/solr-cloud/solr-4.10.4/example/webapps
# 使用jar命令解压缩
jar -xvf solr.war solr
# 解压缩之后, 删除solr.war包, 防止Tomcat自动解压缩此包, 导致配置被覆盖
rm -rf solr.war
(5) 部署Solr项目: 创建存放Solr应用的目录, 并将解压后的solr.war拷贝至此目录下:
cd /data/solr-cloud
mkdir -p tomcat/display/solr
# 将所有文件拷贝至solr目录下
cp -r solr-4.10.4/example/webapps tomcat/display/solr
(6) 使用Tomcat的虚拟目录安装: 这里没有将Solr服务添加到Tomcat的webapps目录下, 所以需要修改Tomcat的 $TOMCAT_HOME/conf/server.xml文件, 添加Solr的服务路径:
说明: 这里将Solr服务部署在 /data/solr-cloud/tomcat/display/solr路径下.
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 配置访问路径, 效果为: http://ip:port/solr -->
<Context path="/solr" privileged="true"
docBase="/data/solr-cloud/tomcat/display/solr">
<Environment name="solr/home" type="java.lang.String" override="true"
value="/data/solr-cloud/tomcat/solrhome"/>
</Context>
<!-- ... ... -->
</Host>
参数说明:
①
path: 指定访问该Web应用的名称, 即 http://ip:8080/solr 中端口号之后的部分;
②docBase: 指定Web应用的文件路径, 如果是war包, 必须加上后缀;
③<Environment>节点就是设置solr/home的目录, 用来存放各个Collection的索引文件.
(7) 配置其他文件:
a. 拷贝Solr解压包下的log4j.properties文件至Solr服务的WEB-INF/classes下:
cd /data/solr-cloud
mkdir -p tomcat/display/solr/WEB-INF/classes
cp solr-4.10.4/example/resources/log4j.properties tomcat/display/solr/WEB-INF/classes
b. 拷贝Solr解压包下example/lib/ext中的所有jar包拷贝到Solr服务的WEB-INF/lib下:
cd /data/solr-cloud
cp -r solr-4.10.4/example/lib/ext/* tomcat/display/solr/WEB-INF/lib
c. 拷贝Solr解压包下example/solr下的solr.xml至solrhome下(必须存在, 否则Solr服务将不能正常启动):
cd /data/solr-cloud && mkdir -p tomcat/solrhome
cp -r solr-4.10.4/example/solr/solr.xml tomcat/solrhome
d. 拷贝Solr解压包下的example/solr/collection1至tomcat目录下的solrhome中, 用作SolrCore的配置文件:
cd /data/solr-cloud
cp -r solr-4.10.4/examplesolr/collection1 tomcat/solrhome
启动Tomcat后, 访问 http://ip:port/solr, 如果出现Solr Web管理页面, 说明单机版Solr部署完成.
2.4 添加Solr的索引库
(1) 在Solr的管理界面点击[Core Admin], 再点击[Add Core]这项, 系统提示instanceDir和dataDir必须存在, 否则将抛出如下错误:
new_core: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Could not load conf for core new_core: Error loading solr config from /data/solr-cloud/tomcat/solrhome/new_core/conf/solrconfig.xml

(2) 映射solrhome的位置:
vim /data/solr-cloud/tomcat/display/solr/WEB-INF/web.xml
# 删除40行和46行的注释, 如下:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/data/solr-cloud/tomcat/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
(3) 重新启动Tomcat, 发现名为collection1的SolrCore已经加载上了:

其他注意事项:
a) 如果删除
rm –rf /data/solr-cloud/tomcat/solrhome/collection1/core.properties文件, 集群启动后就没有collection;
b) 以后再次创建SolrCore时, 可以直接复制collection1目录, 修改core.properties文件中的name即可.
3 部署Solr集群服务(SolrCloud)
3.1 启动ZooKeeper
SolrCloud的部署需要依赖ZooKeeper, 需要先启动所有ZooKeeper服务器.
3.2 ZooKeeper管理配置文件
在分布式服务中, 多采用ZooKeeper统一管理配置文件, 这里Solr使用到的配置文件主要有schema.xml、solrconfig.xml等, SolrCloud各个节点使用ZooKeeper统一管理的文件即可.
(1) 将Solr单机服务的配置文件交由ZooKeeper管理:
执行下述命令将Solr单机conf下的配置文件上传到ZooKeeper(此命令为一条命令):
cd /data/solr-cloud/solr-4.10.4/example/scripts/cloud-scripts
# 注意: 下面一长串只是一条命令, 不要太早回车哦~
sh zkcli.sh -zkhost 10.0.20.50:2181,10.0.20.51:2181,10.0.20.52:2181 -cmd upconfig -confdir /data/solr-cloud/tomcat/solrhome/collection1/conf -confname myconf
命令说明:
①
zkhost: 指定ZooKeeper集群的ip及端口号, 多个之间以半角逗号隔开;
②cmd: 表示使用某个内部命令, 这里使用upconfig, 即更新配置信息;
③confdir: 需要上传的配置文件所在的位置;
④confname: 自定义上传后ZooKeeper管理的配置文件的名称.
(2) 使用ZooKeeper的服务器查询配置文件:
cd /data/zookeeper/zookeeper-3.4.10/bin/
sh zkCli.sh
# 信息如下:
......
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[configs, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /configs
[myconf]
[zk: localhost:2181(CONNECTED) 2] ls /configs/myconf
[currency.xml, mapping-FoldToASCII.txt, protwords.txt, scripts.conf, synonyms.txt, stopwords.txt, _schema_analysis_synonyms_english.json, velocity, admin-extra.html, update-script.js, _schema_analysis_stopwords_english.json, solrconfig.xml, admin-extra.menu-top.html, elevate.xml, schema.xml, clustering, mapping-ISOLatin1Accent.txt, _rest_managed.json, xslt, spellings.txt, lang, admin-extra.menu-bottom.html]
[zk: localhost:2181(CONNECTED) 3] quit
Quitting...
2018-10-25 21:27:08,122 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x166a788acfd0001 closed
2018-10-25 21:27:08,126 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x166a788acfd0001

3.3 修改SolrCloud监听端口
修改每个Solr服务的/usr/local/solr-cloud/solr.xml文件中的hostPort(此端口默认为Jetty容器的访问端口8983). 如果在catalina.sh中指定, 此处的设置将被覆盖.
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${jetty.port:8080}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
3.4 关联Solr与ZooKeeper
即关联Tomcat与ZooKeeper, 修改每一台Solr服务所属的tomcat/bin/catalina.sh, 指定ZooKeeper服务的地址:
vim /data/solr-cloud/tomcat/apache-tomcat-8.0.53/bin/catalina.sh
# 在cygwin=false(大约109行)之前, 通过-DzkHost参数指定ZooKeeper的IP和端口号:
JAVA_OPTS="$JAVA_OPTS -DzkHost=zoo1:2181,zoo2:2181,zoo3:2181"
可以使用vim的查找功能查找JAVA_OPTS的定义的位置: 按[Esc], 在命令模式下输入
:/cygwin, 然后回车, 按字母[n]查找下一个.
3.5 分发SolrCloud服务
cd /data
scp -r solr-cloud/ 10.0.20.51:/data
scp –r solr-cloud/ 10.0.21.52:/data
3.6 启动所有Solr服务
在启动ZooKeeper集群后, 依次启动所有Solr服务 --- 即Tomcat.
3.7 访问SolrCloud
访问任意一台Solr, 左侧菜单将出现[Cloud]功能按钮, 点击查看, 出现下图中的信息, 说明SolrCloud部署成功.

参考资料
版权声明
作者: 马瘦风
出处: 博客园 马瘦风的博客
您的支持是对博主的极大鼓励, 感谢您的阅读.
本文版权归博主所有, 欢迎转载, 但请保留此段声明, 并在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.
Solr 11 - Solr集群模式的部署(基于Solr 4.10.4搭建SolrCloud)的更多相关文章
- K8S从入门到放弃系列-(11)kubernetes集群网络Calico部署
摘要: 前面几个篇幅,已经介绍master与node节点集群组件部署,由于K8S本身不支持网络,当 node 全部启动后,由于网络组件(CNI)未安装会显示为 NotReady 状态,需要借助第三方网 ...
- 10. ZooKeeper之搭建伪集群模式。
转自:https://blog.csdn.net/en_joker/article/details/78673456 在集群和单机两种模式下,我们基本完成了分别针对生产环境和开发环境ZooKeeper ...
- Solr系列二:solr-部署详解(solr两种部署模式介绍、独立服务器模式详解、SolrCloud分布式集群模式详解)
一.solr两种部署模式介绍 Standalone Server 独立服务器模式:适用于数据规模不大的场景 SolrCloud 分布式集群模式:适用于数据规模大,高可靠.高可用.高并发的场景 二.独 ...
- 来了,老弟!__二进制部署kubernetes1.11.7集群
Kubernetes容器集群管理 Kubernetes介绍 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S.K8S是Go ...
- Redis集群模式部署
以下以Linux(CentOS)系统为例 1.1 下载和编译 $ wget http://download.redis.io/releases/redis-4.0.7.tar.gz $ tar xzf ...
- redis解决方案之三种集群模式的概念与部署
上篇文章为大家总结了redis命令并讲述了持久化,今天我们来看一下redis的三种集群模式:主从复制,哨兵集群,Cluster集群 本篇文章先介绍redis-cluster集群模式,然后再依次介绍它的 ...
- Docker 部署 RocketMQ Dledger 集群模式( 版本v4.7.0)
文章转载自:http://www.mydlq.club/article/97/ 系统环境: 系统版本:CentOS 7.8 RocketMQ 版本:4.7.0 Docker 版本:19.03.13 一 ...
- 【待补充】Spark 集群模式 && Spark Job 部署模式
0. 说明 Spark 集群模式 && Spark Job 部署模式 1. Spark 集群模式 [ Local ] 使用一个 JVM 模拟 Spark 集群 [ Standalone ...
- Spark Tachyon编译部署(含单机和集群模式安装)
Tachyon编译部署 编译Tachyon 单机部署Tachyon 集群模式部署Tachyon 1.Tachyon编译部署 Tachyon目前的最新发布版为0.7.1,其官方网址为http://tac ...
随机推荐
- 精读《Function VS Class 组件》
1. 引言 为什么要了解 Function 写法的组件呢?因为它正在变得越来越重要. 那么 React 中 Function Component 与 Class Component 有何不同? how ...
- Linux突然无法使用,是内存不足的问题
昨晚发现这个问题是网站请求连不到Linux服务器了,后来发现是内存不足导致docker进程被杀掉了,docker的Status为Exit(137),是被内核杀掉的意思, 具体解释看这里,https:/ ...
- BZOJ.4144.[AMPPZ2014]Petrol(Kruskal重构树)
BZOJ 看别人代码的时候发现哪一步都很眼熟,突然想起来,就在四个月前我好像看过还给别人讲过?mmp=v= 果然不写写就是容易忘.写了好歹忘了的时候还能复习呢(虽然和看别人的好像也没多少差别?). 首 ...
- 勾勾街——一个专注于免越狱免签名的苹果ios APP打包生成的网站
自涛舅舅研发的“苹果ios APP自助生成系统”上线以来,每天都有大量的用户注册和生成免越狱app,为什么? 因为我们有明显的技术优势,APP不需要上架appstore, 生成APP又不需要企业签名证 ...
- Luogu 3758 [TJOI2017]可乐(有向图邻接矩阵幂的意义 矩阵快速幂)
题目描述 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且放在了加里敦星球的1号城市上.这个可乐机器人有三种行为: 停在原地,去下一个相邻的城市,自爆.它每一秒都会随机 ...
- mac效率工具
前言:在命令行中切换目录是最常用的操作,我相信一遍又一遍重复“cd ls cd ls cd ls ……”绝对会让你抓狂. 记录一下,方便下次系统重装,哈哈 一. oh-my-zsh mac 预装了 z ...
- worknote
一.变更注意事项 1.部署平台: a.重启服务时,通过部署平台跳到各服务器操作时,注意修改字符编码为en_US.utf-8 b.服务器之间通过部署平台的dscp命令传输文件到目标服务器:如果连接目标服 ...
- softmax in pytorch
背景 在分类中,最常见的设置是一个输入,输出是类数目大小的向量.预测的输入类将是在最后一个网络层中具有最大条目的相应类.在分类任务中,交叉熵损失(交叉熵)是训练这类网络最常见的损失函数.交叉熵损失可以 ...
- EF的简单认识
EF的简单认识 EF简介 EntityFramwork是微软提供的一款ORM框架(Object Relational Mapping),实体映射模型,它的底层是ADO.NET的机制,使用EF将省去 ...
- 教你 Debug 的正确姿势——记一次 CoreMotion 的 Crash
作者:林蓝东 最近的一个手机 QQ 版本发出去后收到比较多关于 CoreMotion 的 crash 上报,案发现场如下: 但是看看这个堆栈发现它完全不按照套路出牌啊! 乍一看是挂在 CoreMoti ...