共计 9904 个字符,预计需要花费 25 分钟才能阅读完成。
一、Solr 集群的系统架构
SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud 的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些需求。
SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,它的主要思想是使用 Zookeeper 作为集群的配置信息中心。
商业用途请联系本人 dijia478@163.com
它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡
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。
3. 本教程实现的 solr 集群架构
Zookeeper 作为集群的管理工具。
1、集群管理:容错、负载均衡。
2、配置文件的集中管理
3、集群的入口
需要实现 zookeeper 高可用。需要搭建集群。建议是奇数节点。需要三个 zookeeper 服务器。
搭建 solr 集群至少需要 7 台服务器。
这里因环境限制,演示的是搭建伪分布式(在一台虚拟机上,建议内存至少 1G):
需要三个 zookeeper 节点
需要四个 tomcat 节点。
本文使用 tomcat 进行部署,而不使用 solr 自带的 jetty
4. 系统环境
CentOS-6.7-i386-bin-DVD1
jdk-8u151-linux-i586
apache-tomcat-8.5.24
zookeeper-3.4.10
solr-7.1.0
注意:solr6.0 以上版本,官方建议使用 jdk8,tomcat8,搭建步骤和 solr6 以下略微有区别
二、Zookeeper 集群搭建
第一步:需要安装 jdk 环境。
JDK 安装过程省略,不会的去看我的这篇文章:
简单易懂的 CentOS 6.7 上安装 JDK 入门教程 http://www.linuxidc.com/Linux/2017-12/149877.htm
能看集群搭建教程的,应该不可能不会安 JDK 吧,安好之后是这样的
第二步:把 zookeeper 的压缩包上传到服务器。
第三步:解压缩。
解压过程省略,我这里解压到了 /usr/share/
第四步:把 zookeeper 复制三份。
先创建目录 /usr/local/solr-cloud
第五步:在每个 zookeeper 目录下创建一个 data 目录。
第六步:在 data 目录下创建一个 myid 文件,文件名就叫做“myid”。内容就是每个实例的 id。例如 1、2、3
这里我就截一个图啊,其他两个分别照着做,2 和 3
算了,我怕有些人不会。。。看清楚我在 solr-cloud 目录下执行的啊
第七步:把 conf 目录下的 zoo_sample.cfg 文件改名为 zoo.cfg
这次我就真的只演示一个了,其他两个照做,其实第五步和第七步可以在第四步前做,是我疏忽了。
第八步:修改 zoo.cfg 配置文件。
只演示第一个,另外两个自己改。只改前两个红色框框里的(目录和端口号),最后那个红框里的内容三个配置文件一样
server.1 的这个 1,就是上面第六步的内容。在实际工作中每个实例在不同的服务器上,所以后面的 ip 应该是不同的,我这里是在一台虚拟机上演示,所以 ip 相同。
第九步:启动每个 zookeeper 实例
这里一个个进目录里启动实在是好麻烦啊,我替大家写个简单的脚本
1
2
3
4
5
6
|
cd /usr/local/solr-cloud/zookeeper01/bin/ ./zkServer.sh start cd /usr/local/solr-cloud/zookeeper02/bin/ ./zkServer.sh start cd /usr/local/solr-cloud/zookeeper03/bin/ ./zkServer.sh start |
写完后发现没有执行权限,添加权限:
然后运行脚本,就 OK 了
为了验证,去三个 zookeeper 的实例里 bin 目录下分别查看每个实例的状态
(我刚开始是把查看状态的命令写在脚本里的,让一启动就查看,可每次都显示 not running,后来想了想,应该是因为脚本执行太快,启动命令执行了但还没启动起来,就去查看状态,所以会显示没有运行)
如果你显示的是这样子的一个领导两个部下(leader 和 follower 不一定是谁,随机的),那么就代表 zookeeper 集群已经搭建完成
第一步完成了,下来搭建 solr 集群
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-12/149941p2.htm
三、solr 集群搭建
注意,在搭建 solr 集群前,建议最好有一个 solr 服务是已经搭建好的,可以简化大量重复的配置操作。
单机 solr 服务搭建过程参看我的这篇文章:
Solr 服务在 Linux 上的搭建详细教程 http://www.linuxidc.com/Linux/2017-12/149889.htm
这个单机 solr 服务在 solr 集群搭建第二步和第三步里需要,搭建好一个 solr 服务后,就可以进行集群搭建了。
第一步:创建四个 tomcat 实例。每个 tomcat 运行在不同的端口。8180、8280、8380、8480
上传解压步骤省略,这是我解压好的
复制 tomcat 到之前搭建 zookeeper 集群第四步时,创建的 /usr/local/solr-cloud 目录里,复制 4 个
去 solr-cloud 目录,发现已经复制好了 4 个 tomcat 目录
在 tomcat 目录下的 conf 里的 server.xml,修改每个 tomcat 的端口号,这里只演示第一个目录的,另外三个都要改,端口要互不冲突
用 /port 命令搜索 port 字符串,按 n 搜索下一个,有三个地方要改,依次更改为
其他三个 tomcat 目录里的 server.xml 配置的端口按照 234 的顺序全改了啊,具体过程这里我就不截图了。
一共要改四个文件,每个文件里改三个地方,这 12 个端口号要互不冲突
第二步:把单机版的 solr 工程复制到集群中的 tomcat 中
在搭建好的单机 solr 服务里(这里是另一篇教程,上面说过了),复制 solr 工程到第一步的 4 个 tomcat 目录里,一共是复制 4 份
第三步:为每个 solr 实例创建一个对应的 solrhome。使用单机版的 solrhome 复制四份
一样在之前搭建的单机 solr 服务里,把 solrhome 复制 4 份出来到 solr-cloud 目录里
现在 solr-cloud 目录里是有这些目录,检查一下有没有复制错地方的:
第四步:配置 solrCloud 相关的配置。每个 solrhome 下都有一个 solr.xml,把其中的 ip 及端口号配置好
之前搭建单机版 solr 服务的时候没有动过 solrhome 里的这个文件,现在搭建集群了,需要进行修改
需要修改 4 个 solr.xml,我这里还是只演示第一个,另外三个目录里的类比着改,一样的,就是 1234 的顺序
找到这个地方,第一个红框代表当前节点的 ip 地址,就是你部署这个 solrhome01,tomcat01 集群节点的服务器 ip,实际工作中就是会部署 4 个服务器,一个服务器是一个节点,部署一个 solr 服务
第二个红框代表当前 solr 服务实例的端口号,就是所在的 tomcat 的端口号,就是第一步在 tomcat01 的 server.xml 里配置的 8180
我的配置完后是这样的
其他三个照着改啊,由于我是在一台虚拟机搭建的四个实例,所以肯定四个实例的 ip 是一样的,但端口分别是 8180,8280,8380,8480
第五步:需要修改 solr 服务的 web.xml 文件。把 solrhome 关联起来
修改这个文件,和之前单机版的 solr 配置是一样的
要注意的是,tomcat01 这里的 solr 服务,是上面第二步复制过来的对吧,是我之前用 solr7 搭建的单机 solr 服务,里面的配置和 solr4 不太一样,具体还是去文章最上面看我提供的单机 solr 服务搭建教程链接
找到这个,这里是我之前搭建单机 solr 服务时,配置的 solrhome 路径
现在改成集群的 solrhome01 目录,使他们关联起来
其他三个 tomcat 里的 web.xml 都对应着一改,solrhome02,03,04
第六步:让 zookeeper 统一管理配置文件。需要把 /conf 目录上传到 zookeeper
现在我们每一个 solr 都有了自己的 solrhome,现在我们要让每一个 solr 实例的配置文件都一样,这个配置文件需要集中管理,这个时候我们使用 zookeeper 来统一管理配置文件。所以要将配置文件上传到 zookeeper 中。那么上传哪些配置文件呢?
这里注意下 managed-schema 文件,网上有很多低版本 solr,会提到一个 collection1/conf 下的 schema.xml,但是并没有找到。好像是从 5.0 版本开始不使用 schema.xml 的,这俩其实内容都一样,搞不懂为啥要换个名字,而且内容格式是 xml,但是文件名却没有.xml 的后辍,这里直接上传整个 conf 目录就行。
知道了要上传什么,那么怎么上传呢?打开最早 solr 解压出来的原始文件(如果删了那就重新上传解压吧)
在这个目录下有个脚本文件,执行这个脚本就可以将配置文件上传到 zookeeper 了,有点难找,我是用 find 命令给搜出来的。不过我这里给出了 pwd 路径
要注意,在执行脚本上传配置文件前,必须先去启动 zookeeper 集群
然后回来执行脚本
这里脚本的执行命令有点长,主要是参数多,建议复制出来改好后再粘贴上去
./zkcli.sh -zkhost 192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/configsets/sample_techproducts_configs/conf -confname myconf
我解释下各个参数的含义:
红色框代表 zookeeper 集群的 ip 和端口号列表(搭建 zookeeper 集群的时候配置过的)
绿色框代表要执行的是上传配置文件操作
黄色框代表的是要上传的配置文件目录(低版本不太一样,具体以那两个主要的配置文件所在目录为准,不知到在哪就 find 命令搜吧)
紫色框代表的是你给上传的配置起的名字,可以改
现在上传完了,那么我们怎么确定是否上传成功呢?去 zookeeper 集群的一个目录找到 bin 里 zookeeper 的客户端脚本
运行后,里面会出现一大堆内容,如果你不指定参数,他会默认访问 localhost:2181
在最下面执行这个命令,查看在根目录下有什么,发现一个 configs
再看它里面有什么?哈!
这就是我们刚才上传的配置了,名字一样的,代表上传成功了
然后用 quit 命令退出
如果你需要修改配置的话,只用在刚才那个 conf 目录里改好,改好后再上传一次就行了,就会覆盖原来的配置文件
第七步:修改 tomcat/bin 目录下的 catalina.sh 文件,关联 solr 和 zookeeper
现在上传好配置文件了,可是 solr 和 zookeeper 还没有建立任何关系,他们也不知道对方在哪里,这个时候需要修改 4 个 tomcat 的配置文件,这里只演示 tomcat01,其他三个完全相同照着改
打开 catalina.sh 文件,加一个 Java_OPTS 这个参数,初始化这个值完了会传给 solr,注意不是在这个截图这里修改啊
用 /JAVA_OPTS 搜索红色框框里的这句话(因为低版本加的位置长的不太一样,但这句话的例子是不变的),在这句话下面的位置加(注意位置啊,不要弄错了):
加上 JAVA_OPTS 的值(zookeeper 集群的 ip 列表):
JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"
然后把其他三个 tomcat 也一改,改的位置和内容是一样的,不用变
这样每个 solr 实例就通过这个参数和 zookeeper 集群建立了联系,solr 会将自己的状态发送给 zookeeper,比如 ip 地址啊,端口号啊,zookeeper 就可以连接到 solr 了,建立了通信关系
第八步:启动每个 tomcat 实例。要包装 zookeeper 集群是启动状态
现在需要启动每个 tomcat,当然了,这个和启动 zookeeper 集群一样,要一个一个进去启动,太麻烦了,还是写个批处理脚本来运行
/usr/local/solr-cloud/tomcat01/bin/startup.sh
/usr/local/solr-cloud/tomcat02/bin/startup.sh
/usr/local/solr-cloud/tomcat03/bin/startup.sh
/usr/local/solr-cloud/tomcat04/bin/startup.sh
保存,退出
发现没有运行权限,添加权限
然后运行脚本,等等啊,tomcat 集群启动比较慢
如果你想看启动起来没,可以复制一个会话窗口(我用的 xshell5),去看看 tomcat 的日志信息(相当于看控制台打印信息)
用这个命令查看,我这就查看一个,应该已经启动好了
这里说个小知识点,tomcat8 开始,默认启动的是 NIO 模式,7 默认启动的是 BIO 模式���还可以通过配置设置 APR 模式启动,至于 APR,NIO 和 BIO 的区别,是和 tomcat 并发性能有关的,高并发的系统应该将 tomcat 的模式设置成 APR 模式,会大幅度的提高服务器的处理和响应性能。感兴趣的可以自己百度下。当然这个不用在意,跟本文集群搭建没啥关系,就是想到了说一下。
第九步:访问集群
然后用自己的电脑访问下咱们的集群吧,之前单机版是没有红框框出来的两个东西的,出现这个就是 OK 了
我这里还没创建 collections,所以啥都没有:
注意下访问地址的输入,要写全。访问地址写成这样会 404
第十步:创建新的 Collection 进行分片处理
点击页面的 Collections 按钮,然后就能添加了(高版本的 solr 才有,低版本的需要通过地址栏传递参数去设置,比较麻烦)
我这里选择的是名字叫 mycollection1,用自己上传的 myconf 配置文件,有 2 片 shard,每个 shard 有 2 个备份节点一主一备
然后回去看下,这样 solr 集群就搭建 ok 了!
第十一步:删除不用的 Collection 或 core
删除 collection,点这里,然后输入你要删除的 collection 名称就行
删除 core 在右边,完了如果要添加下面有 add replica(如果工作中你的哪个备份机挂了,就这样删掉挂的服务器,再添加一个好的就行,当然了,在这里添加前,肯定是需要在服务器上部署好 solr 服务,然后连接 zookeeper 集群才行的)
更多 Solr 相关教程见以下内容:
Solr3.6.1 在 Tomcat6 下的环境搭建 http://www.linuxidc.com/Linux/2013-01/77664.htm
Apache Solr: 安装和运行 http://www.linuxidc.com/Linux/2016-12/138527.htm
在 Ubuntu 12.04 LTS 上通过 Tomcat 部署 Solr 4 http://www.linuxidc.com/Linux/2012-09/71158.htm
Solr 实现 Low Level 查询解析(QParser)http://www.linuxidc.com/Linux/2012-05/59755.htm
Solr6.0.0 + Tomcat8 配置问题 http://www.linuxidc.com/Linux/2016-05/131845.htm
基于 Solr 3.5 搭建搜索服务器 http://www.linuxidc.com/Linux/2012-05/59743.htm
Solr 3.5 开发应用教程 PDF 高清版 http://www.linuxidc.com/Linux/2013-10/91048.htm
Solr 4.0 部署实例教程 http://www.linuxidc.com/Linux/2013-10/91041.htm
Solr 的详细介绍:请点这里
Solr 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149941.htm
一、Solr 集群的系统架构
SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud 的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些需求。
SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,它的主要思想是使用 Zookeeper 作为集群的配置信息中心。
商业用途请联系本人 dijia478@163.com
它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡
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。
3. 本教程实现的 solr 集群架构
Zookeeper 作为集群的管理工具。
1、集群管理:容错、负载均衡。
2、配置文件的集中管理
3、集群的入口
需要实现 zookeeper 高可用。需要搭建集群。建议是奇数节点。需要三个 zookeeper 服务器。
搭建 solr 集群至少需要 7 台服务器。
这里因环境限制,演示的是搭建伪分布式(在一台虚拟机上,建议内存至少 1G):
需要三个 zookeeper 节点
需要四个 tomcat 节点。
本文使用 tomcat 进行部署,而不使用 solr 自带的 jetty
4. 系统环境
CentOS-6.7-i386-bin-DVD1
jdk-8u151-linux-i586
apache-tomcat-8.5.24
zookeeper-3.4.10
solr-7.1.0
注意:solr6.0 以上版本,官方建议使用 jdk8,tomcat8,搭建步骤和 solr6 以下略微有区别
二、Zookeeper 集群搭建
第一步:需要安装 jdk 环境。
JDK 安装过程省略,不会的去看我的这篇文章:
简单易懂的 CentOS 6.7 上安装 JDK 入门教程 http://www.linuxidc.com/Linux/2017-12/149877.htm
能看集群搭建教程的,应该不可能不会安 JDK 吧,安好之后是这样的
第二步:把 zookeeper 的压缩包上传到服务器。
第三步:解压缩。
解压过程省略,我这里解压到了 /usr/share/
第四步:把 zookeeper 复制三份。
先创建目录 /usr/local/solr-cloud
第五步:在每个 zookeeper 目录下创建一个 data 目录。
第六步:在 data 目录下创建一个 myid 文件,文件名就叫做“myid”。内容就是每个实例的 id。例如 1、2、3
这里我就截一个图啊,其他两个分别照着做,2 和 3
算了,我怕有些人不会。。。看清楚我在 solr-cloud 目录下执行的啊
第七步:把 conf 目录下的 zoo_sample.cfg 文件改名为 zoo.cfg
这次我就真的只演示一个了,其他两个照做,其实第五步和第七步可以在第四步前做,是我疏忽了。
第八步:修改 zoo.cfg 配置文件。
只演示第一个,另外两个自己改。只改前两个红色框框里的(目录和端口号),最后那个红框里的内容三个配置文件一样
server.1 的这个 1,就是上面第六步的内容。在实际工作中每个实例在不同的服务器上,所以后面的 ip 应该是不同的,我这里是在一台虚拟机上演示,所以 ip 相同。
第九步:启动每个 zookeeper 实例
这里一个个进目录里启动实在是好麻烦啊,我替大家写个简单的脚本
1
2
3
4
5
6
|
cd /usr/local/solr-cloud/zookeeper01/bin/ ./zkServer.sh start cd /usr/local/solr-cloud/zookeeper02/bin/ ./zkServer.sh start cd /usr/local/solr-cloud/zookeeper03/bin/ ./zkServer.sh start |
写完后发现没有执行权限,添加权限:
然后运行脚本,就 OK 了
为了验证,去三个 zookeeper 的实例里 bin 目录下分别查看每个实例的状态
(我刚开始是把查看状态的命令写在脚本里的,让一启动就查看,可每次都显示 not running,后来想了想,应该是因为脚本执行太快,启动命令执行了但还没启动起来,就去查看状态,所以会显示没有运行)
如果你显示的是这样子的一个领导两个部下(leader 和 follower 不一定是谁,随机的),那么就代表 zookeeper 集群已经搭建完成
第一步完成了,下来搭建 solr 集群
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-12/149941p2.htm