学习淘淘商城第三十六课(Solr集群搭建)

110 篇文章 383 订阅
8 篇文章 0 订阅

      关于SolrCloud的基本知识,大家可以参考http://www.cnblogs.com/saratearing/p/5690476.html这篇博客进行学习。

      下面我们来搭建SolrCloud集群,先来看下我们要搭建的集群图,如下图所示,可以看到Solr集群由三台注册中心(Zookeeper集群)和四台部署有Solr的设备组成。我们采用七台虚拟机来搭建Solr集群。


      下面一步一步来进行搭建。

第一步:新建三台虚拟机(如果有现成的设备,不需要新建)注意:大家最好不要用克隆的方式,因为据我的试验,用克隆的方式搭建的Solr集群在重启后原来的库会消失,而且会出现各种各样的问题。

       大家可以参考http://blog.csdn.net/u012453843/article/details/68947589这篇博客进行搭建。

第二步:安装单机版Zookeeper

       大家可以参考http://blog.csdn.net/u012453843/article/details/65937993这篇博客进行安装

第三步:搭建Zookeeper集群

       首先,为zookeeper1配置一下IP和主机名的映射关系,如下所示。

[root@zookeeper1 ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.156.23 zookeeper1
192.168.156.24 zookeeper2
192.168.156.25 zookeeper3

        接着修改zookeeper1的配置文件,先进入到conf目录下,找到我们搭建单机版zookeeper时配置的zoo.cfg文件,在文件的最后添加上三行配置,如下所示。我们以server.1=zookeeper1:2888:3888为例,server.1代表服务的编号,zookeeper1代表服务的地址,2888代表通信端口,3888代表选举端口。

[root@zookeeper1 conf]# pwd
/usr/local/zookeeper-3.4.5/conf
[root@zookeeper1 conf]# ls
configuration.xsl  log4j.properties  zoo.cfg
[root@zookeeper1 conf]# vim zoo.cfg 

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/zookeeper-3.4.5/data
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888

       我们到配置文件中dataDir指定的/usr/local/zookeeper-3.4.5/data目录下, 如果看到该目录下已经有文件的话,我们一定要删除掉,否则zookeeper启动不了,如下所示,我们看到有一个文件夹version-2和一个zookeeper_server.pid(该文件会导致zookeeper启动不了),我们把它们都删除掉,只剩个空目录就行

[root@zookeeper1 conf]# cd /usr/local/zookeeper-3.4.5/data/
[root@zookeeper1 data]# ll
总用量 8
drwxr-xr-x. 2 root root 4096 4月  25 07:50 version-2
-rw-r--r--. 1 root root    4 4月  25 07:50 zookeeper_server.pid

        在空目录下使用命令vim myid新建一个myid文件并在里面输入1(这个数字1就代表我们上面配置文件中server.1的这个数字1),输入完1后保存退出(这时data目录下只有myid这么一个文件)。

[root@zookeeper1 data]# vim myid

1

       这样我们便配置完了一台zookeeper,由于另外两台设备的相关配置一样(除myid文件之外),因此我们把zookeeper1上的相关配置复制到其它两台设备上。我们先把/etc/目录下的hosts文件复制到其它两台zookeeper上,如下所示。

[root@zookeeper1 conf]# scp /etc/hosts root@192.168.156.24:/etc/
The authenticity of host '192.168.156.24 (192.168.156.24)' can't be established.
RSA key fingerprint is 1d:5a:02:3c:a9:30:0a:72:fa:1d:07:13:ea:a1:03:0d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.156.24' (RSA) to the list of known hosts.
root@192.168.156.24's password: 
hosts                                                       100%  236     0.2KB/s   00:00    
[root@zookeeper1 conf]# 

[root@zookeeper1 conf]# scp /etc/hosts root@192.168.156.25:/etc/
The authenticity of host '192.168.156.25 (192.168.156.25)' can't be established.
RSA key fingerprint is 1d:5a:02:3c:a9:30:0a:72:fa:1d:07:13:ea:a1:03:0d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.156.25' (RSA) to the list of known hosts.
root@192.168.156.25's password: 
hosts                                                       100%  236     0.2KB/s   00:00    
[root@zookeeper1 conf]#

         拷贝完之后,我们到zookeeper2和zookeeper3这两台设备上查看下原文件是否已经被覆盖,我们以zookeeper2为例,可以看到已经成功被覆盖了(另一台我就不粘贴了)。

[root@zookeeper2 ~]# more /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.156.23 zookeeper1
192.168.156.24 zookeeper2
192.168.156.25 zookeeper3
[root@zookeeper2 ~]# 

        下面我们把/usr/local/zookeeper-3.4.5/conf/目录下的zoo.cfg文件拷贝到zookeeper2和zookeeper3上。命令如下。

[root@zookeeper1 conf]# scp zoo.cfg root@192.168.156.24:/usr/local/zookeeper-3.4.5/conf/
[root@zookeeper1 conf]# scp zoo.cfg root@192.168.156.25:/usr/local/zookeeper-3.4.5/conf/

         下面我们在zookeeper2和zookeeper3的/usr/local/zookeeper-3.4.5/data目录下都新建一个myid文件,并且分别输入2和3并保存退出,如下所示。

[root@zookeeper2 data]# vim myid

2
[root@zookeeper3 data]# vim myid

3

        下面我们需要修改下Window系统的hosts文件,位置如下图所示。

        以管理员的身份打开HOSTS文件,并在最下面添加如下配置

192.168.156.23 zookeeper1
192.168.156.24 zookeeper2
192.168.156.25 zookeeper3

          为了防止防火墙给集群搭建带来不必要的麻烦,建议关掉防火墙,关闭防火墙的命令是service iptables stop,禁止防火墙重启的命令是chkconfig iptables off。

         由于我们修改了/etc/hosts文件,我们重启下三台Zookeeper设备。重启命令是reboot

         重启之后,我们来依次启动三台zookeeper设备,看集群是否搭建成功。

         先看下zookeeper1的情况,发现该节点zookeeper的角色是follower,如下所示。(注:如果启动报Error contacting service. It is probably not running.这样的错误,请删除/usr/local/zookeeper-3.4.5/data目录下的version-2和 zookeeper_server.pid文件,然后重新启动)

[root@zookeeper1 zookeeper-3.4.5]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper1 zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@zookeeper1 zookeeper-3.4.5]#
 
           接着看下zookeeper2的情况,发现该节点的zookeeper角色是leader(领导者)

[root@zookeeper2 zookeeper-3.4.5]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper2 zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@zookeeper2 zookeeper-3.4.5]# 

          最后看下zookeeper3的情况,发现该节点zookeeper的角色是follower,这说明我们的zookeeper集群搭建成功了!

[root@zookeeper3 zookeeper-3.4.5]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper3 zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@zookeeper3 zookeeper-3.4.5]# 

第四步:新建四台虚拟机并安装单机版的Solr

      大家可以参考http://blog.csdn.net/u012453843/article/details/70482344这篇博客进行学习,由于Solr集群会用到中文分析器IKAnalyzer,因此我们需要为每台Solr配置IKAnalyzer,大家可以参考http://blog.csdn.net/u012453843/article/details/70991327这篇博客进行配置。

第五步:为了避免tomcat的默认端口8080与我们其它的tomcat工程冲突,我们把Solr所在的四台设备的tomcat的端口都改为8180

       我们到tomcat的conf目录下(/usr/local/solr/tomcat/conf)修改server.xml文件,把下面这段配置的port的值由原来的8080修改为8180。如下所示。

<Connector port="8180" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
        注意:把其它三台Solr虚拟机的tomcat端口也都修改为8180

第六步:为4台Solr虚拟机都配置下solrhome目录下的solr.xml文件

[root@solr1 ~]# cd /usr/local/solr/solrhome/
[root@solr1 solrhome]# ll
总用量 20
drwxr-xr-x. 2 root root 4096 4月  23 20:13 bin
drwxr-xr-x. 4 root root 4096 4月  23 20:29 collection1
-rw-r--r--. 1 root root 2473 4月  23 20:13 README.txt
-rw-r--r--. 1 root root 1715 4月  23 20:13 solr.xml
-rw-r--r--. 1 root root  501 4月  23 20:13 zoo.cfg
[root@solr1 solrhome]#
        下面我们修改solr.xml,我们修改的只有<solrcloud>里面的前两项,host和hostPort,host的值修改为我们solr1的IP地址,hostPort修改为我们刚才为tomcat的修改的端口8180,其它不用动。

[root@solr1 solrhome]# vim solr.xml 

<?xml version="1.0" encoding="UTF-8" ?>


<solr>

  <solrcloud>
    <str name="host">192.168.156.26</str>
    <int name="hostPort">8180</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:0}</int>
    <int name="connTimeout">${connTimeout:0}</int>
  </shardHandlerFactory>

</solr>
     
       上面是solr1(192.168.156.26)上的修改,下面我们还需要对solr2(192.168.156.27)、solr3(192.168.156.28)、solr4(192.168.156.29)这三台设备的solr.xml文件进行相关配置,下面是solr2的配置。

<solr>

  <solrcloud>
    <str name="host">192.168.156.27</str>
    <int name="hostPort">8180</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:0}</int>
    <int name="connTimeout">${connTimeout:0}</int>
  </shardHandlerFactory>

</solr>

       下面是solr3的配置

<solr>

  <solrcloud>
    <str name="host">192.168.156.28</str>
    <int name="hostPort">8180</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:0}</int>
    <int name="connTimeout">${connTimeout:0}</int>
  </shardHandlerFactory>

</solr>

       下面是solr4的配置

<solr>

  <solrcloud>
    <str name="host">192.168.156.29</str>
    <int name="hostPort">8180</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>

  <shardHandlerFactory name="shardHandlerFactory"
    class="HttpShardHandlerFactory">
    <int name="socketTimeout">${socketTimeout:0}</int>
    <int name="connTimeout">${connTimeout:0}</int>
  </shardHandlerFactory>

</solr>

第七步:让zookeeper统一管理配置文件

       我们先找到zkcli.sh文件所在的位置,在我的solr1中zkcli.sh文件的目录如下。

[root@solr1 conf]# cd /usr/local/solr-4.10.3/example/scripts/cloud-scripts/
[root@solr1 cloud-scripts]# ll
总用量 12
-rw-r--r--. 1 root root 317 12月  1 2014 log4j.properties
-rw-r--r--. 1 root root 707 12月  1 2014 zkcli.bat
-rwxr-xr-x. 1 root root 485 12月  1 2014 zkcli.sh
[root@solr1 cloud-scripts]# 
       下面我们使用该zkcli.sh脚本文件来执行上传操作,我们要上传的文件目录是/usr/local/solr/solrhome/collection1/conf,该目录下的文件如下所示。注:不同的人安装的习惯不一样,conf这个目录所在的位置也不一样,大家根据实际情况来操作就可以了。

[root@solr1 cloud-scripts]# cd /usr/local/solr/solrhome/collection1/conf
[root@solr1 conf]# ll
总用量 292
-rw-r--r--. 1 root root  1068 4月  23 20:13 admin-extra.html
-rw-r--r--. 1 root root   928 4月  23 20:13 admin-extra.menu-bottom.html
-rw-r--r--. 1 root root   926 4月  23 20:13 admin-extra.menu-top.html
drwxr-xr-x. 3 root root  4096 4月  23 20:13 clustering
-rw-r--r--. 1 root root  3974 4月  23 20:13 currency.xml
-rw-r--r--. 1 root root  1348 4月  23 20:13 elevate.xml
drwxr-xr-x. 2 root root  4096 4月  23 20:13 lang
-rw-r--r--. 1 root root 78514 4月  23 20:13 mapping-FoldToASCII.txt
-rw-r--r--. 1 root root  2868 4月  23 20:13 mapping-ISOLatin1Accent.txt
-rw-r--r--. 1 root root   873 4月  23 20:13 protwords.txt
-rw-r--r--. 1 root root    33 4月  23 20:13 _rest_managed.json
-rw-r--r--. 1 root root   450 4月  23 20:13 _schema_analysis_stopwords_english.json
-rw-r--r--. 1 root root   172 4月  23 20:13 _schema_analysis_synonyms_english.json
-rw-r--r--. 1 root root 60689 4月  23 20:13 schema.xml
-rw-r--r--. 1 root root   921 4月  23 20:13 scripts.conf
-rw-r--r--. 1 root root 74827 4月  23 20:13 solrconfig.xml
-rw-r--r--. 1 root root    13 4月  23 20:13 spellings.txt
-rw-r--r--. 1 root root   781 4月  23 20:13 stopwords.txt
-rw-r--r--. 1 root root  1119 4月  23 20:13 synonyms.txt
-rw-r--r--. 1 root root  1416 4月  23 20:13 update-script.js
drwxr-xr-x. 2 root root  4096 4月  23 20:13 velocity
drwxr-xr-x. 2 root root  4096 4月  23 20:13 xslt
[root@solr1 conf]# 

        在执行上传操作之前,我们需要先安装unzip命令(因为最小化安装的虚拟机当中默认是没有unzip命令的),如果不安装unzip的话,会报找不到unzip命令的错误!我们给四台solr设备都安装上该命令吧。

yum install zip unzip

        下面我们执行上传操作,命令如下(前提条件是在/usr/local/solr-4.10.3/example/scripts/cloud-scripts/目录下):

./zkcli.sh -zkhost 192.168.156.23:2181,192.168.156.24:2181,192.168.156.25:2181 -cmd upconfig -confdir /usr/local/solr/solrhome/collection1/conf -confname myconf
     如果想让命令执行的更灵活一点,那就使用绝对路径来操作,如下所示。

/usr/local/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.156.23:2181,192.168.156.24:2181,192.168.156.25:2181 -cmd upconfig -confdir /usr/local/solr/solrhome/collection1/conf -confname myconf

      上传成功后,我们到任何一台zookeeper上检验一下配置是否已经被上传上来了,我们到zookeeper1的bin目录下,如下所示。

[root@zookeeper1 zookeeper-3.4.5]# cd bin
[root@zookeeper1 bin]# ls
README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  zookeeper.out

       使用命令./zkCli.sh来登录服务端,如下所示。

[root@zookeeper1 bin]# ./zkCli.sh
Connecting to localhost:2181
2017-04-26 07:04:46,025 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GM
这里省略一部分内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] 

        如果我们想连接其它端口(比如2183)的zookeeper,可以使用命令:./zkCli.sh -server 192.168.156.23:2183来进行登录。

       使用命令"ls /"来查看下根目录下是否有configs目录,如下所示,发现已经有了。

[zk: localhost:2181(CONNECTED) 0] ls /
[configs, zookeeper]
[zk: localhost:2181(CONNECTED) 1] 

       再看configs目录下是否有myconf目录,如下所示,发现是有的。

[zk: localhost:2181(CONNECTED) 1] ls /configs
[myconf]
[zk: localhost:2181(CONNECTED) 2] 

        我们还可以看看myconf目录下的所有文件,这些都是我们刚才上传的配置文件,如下所示。

[zk: localhost:2181(CONNECTED) 2] ls /configs/myconf
[currency.xml, mapping-FoldToASCII.txt, protwords.txt, scripts.conf, synonyms.txt, stopwords.txt, velocity, _schema_analysis_synonyms_english.json, 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] 

第八步:  修改Solr所在的四台虚拟机的tomcat/bin目录下的catalina.sh 文件,关联solr和zookeeper

       首先,我们到tomcat的bin目录下,如下所示,可以看到catalina.sh文件。

[root@solr1 bin]# pwd
/usr/local/solr/tomcat/bin
[root@solr1 bin]# ls
bootstrap.jar  catalina.sh         commons-daemon.jar            configtest.bat  cpappend.bat  digest.bat  setclasspath.bat  shutdown.bat  startup.bat  tomcat-juli.jar       tool-wrapper.bat  version.bat
catalina.bat   catalina-tasks.xml  commons-daemon-native.tar.gz  configtest.sh   daemon.sh     digest.sh   setclasspath.sh   shutdown.sh   startup.sh   tomcat-native.tar.gz  tool-wrapper.sh   version.sh

       修改catalina.sh文件,添加JAVA_OPTS="-DzkHost=192.168.156.23:2181,192.168.156.24:2181,192.168.156.25:2181",如下所示。

[root@solr1 bin]# vim catalina.sh

#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one or more
这里省略好多好多行内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

# OS specific support.  $var _must_ be set to either true or false.
JAVA_OPTS="-DzkHost=192.168.156.23:2181,192.168.156.24:2181,192.168.156.25:2181"
cygwin=false
darwin=false

       修改完solr1之后,我们再修改其它三台solr设备,添加的内容完全一样,我就不啰嗦了。

第九步:启动每个tomcat实例。要确保zookeeper集群是启动状态。可以使用tailf logs/catalina.out命令查看启动日志。

       下面是solr1的tomcat启动操作,同理,我们再启动其它三台solr上的tomcat。

[root@solr1 tomcat]# bin/startup.sh 
Using CATALINA_BASE:   /usr/local/solr/tomcat
Using CATALINA_HOME:   /usr/local/solr/tomcat
Using CATALINA_TMPDIR: /usr/local/solr/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_112
Using CLASSPATH:       /usr/local/solr/tomcat/bin/bootstrap.jar:/usr/local/solr/tomcat/bin/tomcat-juli.jar

第十步:我们访问任何一台Solr的首页,点击"Cloud",可以看到如下图所示。当前还没有进行分片处理。


      下面我们来进行分片处理,使用的命令是:http://192.168.156.26:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2,执行结果如下图所示。

      我们再看看solr首页的云图,发现多了一个collection2的库。如下图所示。



        我们把没有分片的collection1删除掉,命令是:http://192.168.156.26:8180/solr/admin/collections?action=DELETE&name=collection1,如下图所示。


        我们再来查看solr首页云图,发现现在只剩下有分片的collection2了,我们的SolrCloud集群搭建成功了!!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值