淘淘商城第59讲——搭建Solr集群,注意是Solr 7.1.0这个版本的哟!
发布日期:2021-06-30 17:55:32 浏览次数:2 分类:技术文章

本文共 8775 字,大约阅读时间需要 29 分钟。

前言

我们之前完成的商品搜索功能使用的是Solr的单机版来实现的,正是由于我们现在商品数据量不多,才几千条而已。如果商品数据量变得非常庞大,比如说淘宝,淘宝上面的商品数量就特别多,我们能用一个单机版的Solr来实现吗?显然不能,因为这样做肯定会有问题,一个是数据量特别庞大,每一台服务器存储容量是有上限的,一旦磁盘存不下了该怎么办呢?这是不是有问题啊!还有就是由于淘宝的用户访问量很大,搜索相关商品的人也有很多,并发量必然会非常高,这种情况使用一个Solr服务,极有可能撑不住,这种时候该怎么办呢?这便需要使用到Solr集群了。

本讲我们就来搭建Solr集群,不过在搭建之前,先来看下Solr集群最小的一个架构,如下图所示。

在这里插入图片描述

准备工作

环境准备

提前准备好环境,例如,笔者使用的环境如下:

在这里插入图片描述

新建一台虚拟机(而且最好设置固定IP地址),并安装好jdk环境

首先,新建一台虚拟机,而且最好设置为固定IP地址,别跟我说你不知道怎么做,要是你真不晓得,那么可以参考我下面的两篇文章。

然后,在Linux CentOS 7.6系统上安装好jdk环境,因为Solr是由Java开发的。至于如何在Linux CentOS 7.6系统上安装jdk环境,我想我的这篇文章已经说的很清楚了。

搭建Zookeeper集群

我们是使用Zookeeper来作为Solr集群的管理工具的,Zookeeper作为Solr集群的管理工具有以下几个作用:

在这里插入图片描述
因为我们需要实现Zookeeper的高可用,所以就得需要搭建Zookeeper集群了。Zookeeper集群中的节点数量建议是奇数,因此至少就需要三台Zookeeper服务器了。从以上Solr集群的架构图中可以看到Solr集群由三台注册中心(Zookeeper集群)和四台部署有Solr应用的设备组成,这样看来搭建Solr集群就需要7台服务器了,如果我们真的要模拟这样一种集群环境的话,那么就得需要7台虚拟机了。由于7台虚拟机跑起来肯定会有一定难度,再加上我们只是练习Solr集群的搭建,因此我们使用一台虚拟机就行了,在这一台虚拟机上面搭建3个Zookeeper实例和4个Solr实例。又由于每一个Solr实例对应着一个Tomcat服务器,所以最终我们需要4个Tomcat服务器和3个Zookeeper服务器。并且这里建议虚拟机的内存给得大一点,至少得给1个G吧!

在搭建Solr集群之前,我们还需搭建Zookeeper集群。所以在这一小节,我就来告诉你怎样搭建Zookeeper集群。

第一步,将Zookeeper的压缩包上传到Linux服务器上,这儿我下载的Zookeeper压缩包是zookeeper-3.4.14.tar.gz。不用我教你如何下载吧!如果实在不会,那么看看我的这篇文章吧!

关于怎样将文件上传到Linux服务器上,我想我已经说的要吐了,所以这儿就不再浪费口舌了。与往常一样,我把zookeeper-3.4.14.tar.gz压缩包上传到了用户主目录(即root)下,如下图所示。

在这里插入图片描述
第二步,使用tar zxf zookeeper-3.4.14.tar.gz命令将Zookeeper的压缩包解压缩到用户主目录(即root)下,解压完之后,便可以看到解压后的zookeeper-3.4.14目录了。
在这里插入图片描述
第三步,在/usr/local目录下面创建一个solr-cloud目录,然后把zookeeper-3.4.14往/usr/local/solr-cloud目录下面复制三份。
在这里插入图片描述
进入/usr/local/solr-cloud目录中,便可以看到如下三个Zookeeper实例了。
在这里插入图片描述
第四步,进入到zookeeper01目录中,使用mkdir data命令在该目录中创建一个data目录,创建成功之后使用ll命令查看一下zookeeper01目录,效果如下:
在这里插入图片描述
然后使用echo 1 >> myid命令在data目录下创建一个myid文件,文件名就叫做myid,其内容就是每个Zookeeper实例的id,例如1、2、3。创建完myid文件之后,可使用cat myid命令查看下文件中的内容。
在这里插入图片描述
接着我们就要修改配置文件了。进入到zookeeper01/conf目录下,可以看到该目录下有个zoo_sample.cfg文件。
在这里插入图片描述
紧接着我们需要使用mv zoo_sample.cfg zoo.cfg命令将zoo_sample.cfg文件改下名字,改为zoo.cfg,修改成功之后再使用ll命令查看一下conf目录,效果如下:
在这里插入图片描述
再接着我们就要编辑zoo.cfg文件了,我们使用的命令是vim zoo.cfg,在打开的文件中修改dataDir的路径为我们上面创建的data目录的绝对路径,即/usr/local/solr-cloud/zookeeper01/data,除此之外还要修改一下clientPort所指定的端口号,clientPort是客户端连接Zookeeper时的端口号,如果我们要想启动这三个Zookeeper实例,那么这个端口号就不能冲突,所以就得需要改一下端口号了。最后还得在文件的最后添加上如下三行配置,如下图所示。
在这里插入图片描述
编辑完zoo.cfg文件之后,按ESC键退出编辑模式,然后再输入:wq命令来保存并退出zoo.cfg文件的编辑模式。

我们配置好zookeeper01这个实例之后,可以仿照zookeeper01实例的配置来配置好zookeeper02和zookeeper03这两个实例,这样三个Zookeeper实例就都配置好了。

第五步,启动每个Zookeeper实例。如果想启动每个Zookeeper实例的话,不必每个实例一个个启动,这样太麻烦了,我们可以写个批处理程序来把它们一下子都启动起来。于是我们在solr-cloud目录下使用vim zookeeper_start_all.sh命令来创建一个批处理文件,文件内容为:

cd /usr/local/solr-cloud/zookeeper01/bin./zkServer.sh startcd /usr/local/solr-cloud/zookeeper02/bin./zkServer.sh startcd /usr/local/solr-cloud/zookeeper03/bin./zkServer.sh start

保存完该文件之后,使用ll命令查看一下solr-cloud目录,可以发现有zookeeper_start_all.sh这个文件了,如下图所示。

在这里插入图片描述
但是这个批处理程序是不能运行的,所以还得需要使用chmod u+x zookeeper_start_all.sh命令来更改一下它的权限,这样我们便可以使用./zookeeper_start_all.sh命令来启动每个Zookeeper实例了。
在这里插入图片描述
启动完每个Zookeeper实例之后,我们来查看一下zookeeper01的状态,发现该节点的Zookeeper的角色是follower,如下图所示。
在这里插入图片描述
接着看下zookeeper02的状态,发现该节点的Zookeeper角色也是follower,如下图所示。
在这里插入图片描述
最后看下zookeeper03的状态,发现该节点的Zookeeper的角色是leader(领导者),这说明我们的Zookeeper集群搭建成功了!
在这里插入图片描述
如果想关闭每个Zookeeper实例的话,也不必每个实例一个个关闭,因为这样做太麻烦了,我们同样也可以写个批处理程序来把它们一下子都关闭掉。于是我们在solr-cloud目录下使用vim zookeeper_stop_all.sh命令来创建一个批处理文件,文件内容为:

cd /usr/local/solr-cloud/zookeeper01/bin./zkServer.sh stopcd /usr/local/solr-cloud/zookeeper02/bin./zkServer.sh stopcd /usr/local/solr-cloud/zookeeper03/bin./zkServer.sh stop

保存完该处理文件之后,要知道这个批处理文件是不能直接运行的,还得需要使用chmod u+x zookeeper_stop_all.sh命令来更改一下它的权限,这样我们便可以使用./zookeeper_stop_all.sh命令来关闭掉每个Zookeeper实例了。

搭建Solr集群

温馨提示

在正式搭建Solr集群之前,建议最好有一个单机版Solr服务是已经搭建好的,因为这样可以简化大量重复的配置操作。而且,单机版Solr服务的搭建过程可以参看我的这篇文章——。

值得注意的一点是,之前笔者搭建单机版Solr服务时,所使用的Solr是Apache Solr 8.4.0这个版本的,但现在咱们使用的是Apache Solr 7.1.0这个版本,这一点笔者必须要说明,其实对于不同版本的Solr而言,其单机版Solr服务的搭建过程都是极其类似的,这一点笔者深有体会!

扬帆起航

我们说过Solr应用要运行在Tomcat服务器中,所以这4个Solr节点也就自然对应着4个Tomcat服务器,要想保证这4个Tomcat服务器都能正常启动,那么它们的启动端口就不能冲突,这样的话,我们就需要修改这4个Tomcat服务器的端口号了。由于我们之前已经搭好了一个单机版的Solr服务,而Solr本身就是一个web工程,因此我们可以直接把单机版配好的那个Solr复制到我们这个集群里面。还有一个,就是单机版Solr的那个solrhome目录我们也可以直接用,避免了再次配置的麻烦。

下面讲一下笔者本人是如何搭建Solr集群的。

第一步,将/usr/local/solr目录下的tomcat目录复制4份到/usr/local/solr-cloud目录下,这样就能创建4个Tomcat服务器实例了,如下图所示。

在这里插入图片描述
这时在solr-cloud目录下使用ll命令查看一下该目录,便可以看到4个Tomcat服务器实例了,如下图所示。
在这里插入图片描述
第二步,将这4个Tomcat服务器的端口号给改一下,使每个Tomcat服务器运行在不同的端口上。我们先到tomcat01/conf目录下修改server.xml文件,依次修改下面这三段配置中port属性的值。

  1. 将port属性的值由原来的8005改为8105
    在这里插入图片描述
  2. 将port属性的值由原来的8080改为8180
    在这里插入图片描述
  3. 将port属性的值由原来的8009改为8109
    在这里插入图片描述

同理,按照上面的步骤依次修改tomcat02、tomcat03以及tomcat04这3个Tomcat服务器的端口号。

第三步,部署Solr应用的war包。由于以上4个Tomcat服务器已经部署了Solr应用,因此这一步可以忽略。

第四步,为每个Solr实例创建一个对应的solrhome目录,在这儿使用单机版Solr服务里的solrhome目录即可。具体做法是将/usr/local/solr目录下的solrhome分别复制4份到/usr/local/solr-cloud目录下,如下图所示。

在这里插入图片描述
这时在solr-cloud目录下使用ll命令查看一下该目录,便可以看到4个solrhome目录了,如下图所示。
在这里插入图片描述
第五步,我们还须对solrhome目录里面的solr.xml配置文件进行修改。每个solrhome目录下都有一个solr.xml配置文件,修改该文件时我们修改的只有<solrcloud>标签里面的前两项,既host和hostPort,host中的值要修改为Solr所在虚拟机的IP地址,hostPort中的值要修改为Tomcat服务器所对应的端口号,其它均不用动。
在这里插入图片描述
以上是solrhome01目录里面的solr.xml文件的配置。同理我们还需要对solrhome02、solrhome03以及solrhome04这4个目录里面的solr.xml文件进行相关配置,下面是solrhome02目录里面的solr.xml文件的配置。
在这里插入图片描述
下面是solrhome03目录里面的solr.xml文件的配置。
在这里插入图片描述
下面是solrhome04目录里面的solr.xml文件的配置。
在这里插入图片描述
第六步,solrhome目录中的solr.xml文件配置好了之后,接下来还需要关联每一个solrhome和Solr服务,即需要修改每一个Solr应用下的web.xml文件。
在这里插入图片描述
以上便是tomcat01目录里面的web.xml文件的配置。同理我们还需要对tomcat02、tomcat03以及tomcat04这4个目录里面的web.xml文件进行相关配置。下面是tomcat02目录里面的web.xml文件的配置。
在这里插入图片描述
下面是tomcat03目录里面的web.xml文件的配置。
在这里插入图片描述
下面是tomcat04目录里面的web.xml文件的配置。
在这里插入图片描述
这样,Solr服务就和自己的solrhome关联起来了,也就是说现在每一个Solr服务都对应着一个solrhome,而且都有其自己的配置文件。

第七步,如果我们要想保证每一个Solr实例的配置文件都是一样的话,那么这个配置文件就应该集中管理,要集中管理我们应该使用谁来管理呢?这时候就需要用到Zookeeper了,让Zookeeper来集中管理配置文件,所以我们应该把配置文件上传到Zookeeper。

那好了,接下来考虑上传哪些配置文件呢?我们只须把solrhome/core1/conf目录上传到Zookeeper即可,上传任意solrhome中的conf目录都可以哟!其中conf目录下面有两个非常最重要的配置文件,它们分别是managed-schema和solrconfig.xml。记住我们只要上传一份就可以了,这样的话,每个Solr实例连接上Zookeeper,它就从Zookeeper上读取这一份配置文件,每一个Solr实例都将共用这一份配置文件。

我们已经确定下来要上传什么东西了,接下来便是怎么上传的问题了。我们可使用一个工具来上传配置文件,该工具所在的位置如下图所示。

在这里插入图片描述
下面我们使用该zkcli.sh脚本文件来执行上传操作,我们要上传的目录是/usr/local/solr-cloud/solrhome01/core1/conf,因此执行上传操作的命令就应该是下面这样的。

./zkcli.sh -zkhost 192.168.81.134:2181,192.168.81.134:2182,192.168.81.134:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/core1/conf -confname myconf

温馨提示:在使用上述命令连接Zookeeper集群并上传配置文件时,必须要保证Zookeeper集群是启动的状态。

在这里插入图片描述
上传成功后,我们到任何一个Zookeeper节点上去检验一下配置文件是否已经上传上来了。首先切到zookeeper01/bin目录下,如下图所示。
在这里插入图片描述
然后使用命令./zkCli.sh来登录服务端,登录成功之后,使用ls /命令来查看下根目录是否有configs目录,如下图所示,发现已经有了。
在这里插入图片描述
接着再看下configs目录下是否有myconf目录,如下图所示,发现是有的。
在这里插入图片描述
我们还可以看看myconf目录中的所有文件,这些都是我们刚才上传的配置文件,如下图所示。
在这里插入图片描述
如果我们想退出,那么可使用quit命令。
在这里插入图片描述
第八步,我们还需要修改每一个Tomcat服务器中的bin目录下的catalina.sh文件,以关联Solr和Zookeeper集群。

首先,我们来到tomcat01/bin目录下,如下图所示,可以看到catalina.sh这个文件。

在这里插入图片描述
然后修改该文件,在该文件的首行位置添加JAVA_OPTS="-DzkHost=192.168.81.134:2181,192.168.81.134:2182,192.168.81.134:2183"这句配置,如下图所示。
在这里插入图片描述
修改完tomcat01之后,接着我们再来修改其它三个Tomcat服务器,添加的内容完全一样,这里我就不再啰嗦了。

现在我们的Solr便知道Zookeeper集群的地址了,相应地Solr就会主动地去连接Zookeeper集群,把自己的一些状态信息汇报给Zookeeper集群,比如说自己的IP地址和端口号等,这样Zookeeper集群就能连接到Tomcat服务器了,而且它们之间还建立了一个通信关系。

第九步,启动每一个Tomcat服务器实例,启动之前要确保Zookeeper集群是启动状态。如果想启动每个Tomcat服务器实例的话,不必每个实例一个个启动,这样太麻烦了,可以写个批处理程序来把它们一下子都启动起来。于是我们在solr-cloud目录下使用vim tomcat_startup_all.sh命令来创建一个批处理文件,文件内容如下:

cd /usr/local/solr-cloud/tomcat01/bin./startup.shcd /usr/local/solr-cloud/tomcat02/bin./startup.shcd /usr/local/solr-cloud/tomcat03/bin./startup.shcd /usr/local/solr-cloud/tomcat04/bin./startup.sh

保存完该文件之后,使用ll命令查看一下solr-cloud目录,可以发现确实有tomcat_startup_all.sh这个文件了,如下图所示。

在这里插入图片描述
但是这个批处理程序是不能运行的,所以还得需要使用chmod u+x tomcat_startup_all.sh命令来更改一下它的权限,这样我们就可以使用./tomcat_startup_all.sh命令来启动每个Tomcat服务器实例了。
在这里插入图片描述
同理,如果想关闭每个Tomcat服务器实例的话,也不必每个实例一个个关,因为这样做太麻烦了,同样也可以写个批处理程序来把它们一下子都关闭掉。于是我们在solr-cloud目录下使用vim tomcat_shutdown_all.sh命令来创建一个批处理文件,文件内容如下:

cd /usr/local/solr-cloud/tomcat01/bin./shutdown.shcd /usr/local/solr-cloud/tomcat02/bin./shutdown.shcd /usr/local/solr-cloud/tomcat03/bin./shutdown.shcd /usr/local/solr-cloud/tomcat04/bin./shutdown.sh

该批处理文件创建完毕之后,它是不能运行的,所以还得需要使用chmod u+x tomcat_shutdown_all.sh命令更改一下它的权限,这样我们就可以使用./tomcat_shutdown_all.sh命令来关掉每个Tomcat服务器实例了。

在启动每一个Tomcat服务器实例时,如果你有心的话,那么可以使用tail -f /usr/local/solr-cloud/tomcat01/logs/catalina.out命令来查看下第一个Tomcat服务器的启动日志,看看启动有没有出什么错误。

不用我说,作为一个小白,你在启动每一个Tomcat服务器实例时,一定会遇到如下图所示的两个异常,你要是没碰到,那就见鬼了!

  1. 你会碰到的第一个异常:
    在这里插入图片描述
    如果你真的碰到了以上异常,不要慌,我帮你踩过坑了,请参考我的这篇文章进行解决。
  2. 你会碰到的第二个异常:
    在这里插入图片描述
    如果你真的碰到了以上异常,也请不要慌,我也帮你踩过坑了,请参考我的这篇文章进行解决。

等你能真正启动每一个Tomcat服务器实例后,随便访问任何一台Solr的首页,你又会发现一个异常,如下图所示。

在这里插入图片描述
该异常说的是咱们没有为集群配副本,我们大可不必在意该异常,因为虽然报了这个异常,但是不影响我们正常使用!!!

温馨提示:为了防止防火墙给集群搭建带来不必要的麻烦,建议关掉防火墙!

第十步,访问下咱们的Solr集群,你可以访问任何一个Solr节点的首页,这时你便会看到如下图所示的界面,图中红框框出来的两个东西是单机版所没有的。

在这里插入图片描述
然后点击左侧一栏中的Cloud,随即便会在它下面展开一个下拉列表,接着点击其中的Graph,便会看到如下图所示的界面。
在这里插入图片描述
由于现在还没有创建Solr Core(Solr实例),所以右侧啥都没有。

接下来我们创建新的Collection进行分片处理。在浏览器中输入类似http://192.168.81.134:8180/solr/admin/collections?action=CREATE&name=collection1&numShards=2&replicationFactor=2这样的url并回车,即可创建一个新的Collection,如下图所示。

在这里插入图片描述
此时,我们再看看Solr首页的云图,发现多了一个collection1,而且还分片了,如下图所示。
在这里插入图片描述
这样Solr集群就搭建成功了!

最后,如果你想要删除掉不用的Collection或Core,那么可以在浏览器中输入类似http://192.168.81.134:8180/solr/admin/collections?action=DELETE&name=collection1这样的url并回车即可。

转载地址:https://liayun.blog.csdn.net/article/details/109300665 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:淘淘商城第60讲——搭建Solr集群时,报错:org.apache.solr.common.SolrException: No coreNodeName for CoreDescriptor ···
下一篇:淘淘商城第60讲——搭建Solr集群时,报错:org.apache.solr.common.SolrException: Could not find collection : core1

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月25日 00时12分43秒