solrCloud集群的搭建

什么是solrCloud

SolrCloud是solr提供的分布式搜索方案
适用情景:大规模,容错,分布式索引,检索
soLrCloud是基于solr和zookeeper的分布式搜索方案,

zookeeper的作用

使用zookeeper来管理集群:

  • 监控集群中的每个节点的健康状态
  • 请求来了先连zookeeper,而不是直接连solr,然后由zookeeper决定将这个请求发给哪台服务器然后哪台服务器来进行搜索
  • zookeeper可以对配置文件进行集群管理,因为集群中有这么多节点,每个节点都有一套配置文件的话不统一,因此我们把配置文件提出来放到zookeeper上,让集群中所有节点都去zookeeper上读取这个配置文件

solrCloud原理

系统架构图
这里写图片描述
物理结构:
       一个solr服务可以有1个或者多个core,每个core【数据库】存储不同的索引【表】,相互之间不干扰
逻辑结构:

  • 一个collection代表一个完整的索引库,因为存储的内容很多,因此要分片存储,两片的内容不一样
  • 每一片要存储到3个节点即3个core上,这3个core上内容完全一样,等于把一个片的内容复制3份放在3个core,有一个主core,2个从core

    关于zookeeper集群和solr集群的节点个数

  • 因为zookeeper是solr集群的入口,因此zookeeper也要实现高可用,因此才搭建zookeeper集群,而zookeeper遵循投票选举制度, 所以节点最好是奇数节点,最小的话就是3个了。
  • solr集群要分片的话至少分两片,分一片的话就是主和备,就不叫分片了,而每一片至少都是一主master一备slave,实现高可用,这样就是4个core,即一个solrCloud至少7台服务器3zookeeper,4solr

开始搭建solrCloud

1 搭建zookeeper集群
1.1 在~下创建文件夹solrCloud:

mkdir solrCloud

1.2 上传zookeeper.tar包到~目录下,然后解压

tar -xzvf zookeeper-3.4.6.tar.gz

1.3 复制3份解压好的文件分别到solrCloud的zookeeper文件夹中

[root@localhost ~]# cp -r zookeeper-3.4.6 ~/solrCloud/zookeeper1
[root@localhost ~]# cp -r zookeeper-3.4.6 ~/solrCloud/zookeeper2
[root@localhost ~]# cp -r zookeeper-3.4.6 ~/solrCloud/zookeeper3

原始zookeeper文件结构
这里写图片描述
1.4 进入每个zookeeper目录,创建数据data目录,并在data目录中创建myid文件,内容为实例id,即如果为zookeeper1,则myid中内容为1,如果为zookeeper2,则myid内容为2

cd data/
echo 1>myid
cat myid

1.5 进入每个zookeeper目录,修改配置文件:conf/zoozoo_sample.cfg文件改名为zoo.cfg,并修改zoo.cfg中的配置,主要有数据目录地址的修改dataDir,服务端口号的修改clientPort,以及添加配置集群中所有节点的通讯的ip和端口
这里写图片描述

cd conf/
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg

这里写图片描述
这里的集群节点配置端口虽然是128,但是后来已经更新为129
1.6 在solrCloud目录下编辑快速启动脚本start-zookeeper.sh

cd zookeeper1/bin
./zkServer.sh start
cd ../../
cd zookeeper2/bin
./zkServer.sh start
cd ../../
cd zookeeper3/bin
./zkServer.sh start
cd ../../

1.7 给快速启动脚本添加执行权限,仅授权与当前用户

chmod u+x start-zookeeper.sh 

这里写图片描述
1.8 执行脚本,查看执行结果

./start-zookeeper.sh 
Using config: /root/solrCloud/zookeeper1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
JMX enabled by default
Using config: /root/solrCloud/zookeeper2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
JMX enabled by default
Using config: /root/solrCloud/zookeeper3/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

1.9 进入节点目录查看节点状态,可以看到有了一个leader和两个follower


2 搭建solr集群
2.1 在solrCloud目录下创建4个tomcat实例[每个tomcat带有一个solr服务工程],并修改各自对应的端口,如第一个修改8005为8105,8080为8180,8009改为8109,以此类推,第二个tomcat,第三个tomcat,第四个tomcat端口第二位依次加1
这里写图片描述
这里写图片描述
这里写图片描述
2.2 为每个tomcat中的solr服务配置对应的solrhome,将单机版的solrhome配置文件夹直接拷贝四份,并修改每一个的solrhome下的solr.xml,单机版中无需配置此配置文件,但是集群版需要修改。文件结构如下

[root@localhost solrhome1]# ll
total 24
drwxr-xr-x. 2 root root 4096 Mar 11 20:14 bin
drwxr-xr-x. 4 root root 4096 Mar 11 20:14 collection1
drwxr-xr-x. 4 root root 4096 Mar 11 20:14 collection2
-rw-r--r--. 1 root root 2473 Mar 11 20:14 README.txt
-rw-r--r--. 1 root root 1708 Mar 18 06:59 solr.xml
-rw-r--r--. 1 root root  501 Mar 11 20:14 zoo.cfg

修改solr.xml中关于solrCloud的配置项目

  <solrcloud>
    <str name="host">192.168.183.129</str>    // 为该solrhome对应的solr服务的ip
    <int name="hostPort">8180</int>   // 为该solrhome对应的solr服务的端口号
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>

同理,配置其余3个solrhome的solr.xml中关于solrCloud的配置
2.3 配置solr与solrhome的关系,即在solr服务工程中的web.xml中配置solrhome的路径

  <!-- People who want to hardcode their "Solr Home" directly into the
       WAR File can set the JNDI property here...
   -->
    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/root/solrCloud/solrhome1</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>

2.4 配置solr与zookeeper的关系,修改每个tomcat/bin/catalina.sh文件,来关联solr和zookeeper,添加如下配置到配置文件中,配置JAVA_OPTS配置项,指定zookeeper地址,因为是zookeeper集群因此配置zookeeper的地址列表

# Uncomment the following line to make the umask available when using the
# org.apache.catalina.security.SecurityListener
#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`um
ask`"
JAVA_OPTS="-DzkHost=192.168.183.129:2181,192.168.183.129:2182,192.168.183.129:21
83"

2.5 现在每个solr都对应自己的一个solrhome,每个solr用到的配置文件都在自己独立的solrhome中,而每个solrhome中的配置文件可能不一样,而在集群环境下,配置文件应该只有一份,因此我们把配置文件上传到zookeeper,让zookeeper统一管理配置文件,我们需要将solrhome/collection1/conf文件夹上传到zookeeper,至于用哪个solrhome任意,我们在这里上传solrhome1中的conf文件夹conf文件夹目录结构如下所示

[root@localhost conf]# ll
total 296
-rw-r--r--. 1 root root  1068 Mar 11 20:14 admin-extra.html
-rw-r--r--. 1 root root   928 Mar 11 20:14 admin-extra.menu-bottom.html
-rw-r--r--. 1 root root   926 Mar 11 20:14 admin-extra.menu-top.html
drwxr-xr-x. 3 root root  4096 Mar 11 20:14 clustering
-rw-r--r--. 1 root root  3974 Mar 11 20:14 currency.xml
-rw-r--r--. 1 root root  1348 Mar 11 20:14 elevate.xml
drwxr-xr-x. 2 root root  4096 Mar 11 20:14 lang
-rw-r--r--. 1 root root 78514 Mar 11 20:14 mapping-FoldToASCII.txt
-rw-r--r--. 1 root root  2868 Mar 11 20:14 mapping-ISOLatin1Accent.txt
-rw-r--r--. 1 root root   873 Mar 11 20:14 protwords.txt
-rw-r--r--. 1 root root    33 Mar 11 20:14 _rest_managed.json
-rw-r--r--. 1 root root   450 Mar 11 20:14 _schema_analysis_stopwords_english.json
-rw-r--r--. 1 root root   172 Mar 11 20:14 _schema_analysis_synonyms_english.json
-rw-r--r--. 1 root root 61684 Mar 11 20:14 schema.xml
-rw-r--r--. 1 root root   921 Mar 11 20:14 scripts.conf
-rw-r--r--. 1 root root 74827 Mar 11 20:14 solrconfig.xml
-rw-r--r--. 1 root root    13 Mar 11 20:14 spellings.txt
-rw-r--r--. 1 root root   781 Mar 11 20:14 stopwords.txt
-rw-r--r--. 1 root root  1119 Mar 11 20:14 synonyms.txt
-rw-r--r--. 1 root root  1416 Mar 11 20:14 update-script.js
drwxr-xr-x. 2 root root  4096 Mar 11 20:14 velocity
drwxr-xr-x. 2 root root  4096 Mar 11 20:14 xslt

我们上传这个conf文件夹的话需要用到一个插件,这个工具在solr目录下面,solr目录结构如下

[root@localhost solr-4.10.3]# ll
total 996
drwxr-xr-x.  2 root root   4096 Jan 18 20:01 bin
-rw-r--r--.  1 root root 406208 Dec  9  2014 CHANGES.txt
drwxr-xr-x. 13 root root   4096 Dec  9  2014 contrib
drwxr-xr-x.  4 root root   4096 Jan 15 20:05 dist
drwxr-xr-x. 17 root root   4096 Jan 15 20:05 docs
drwxr-xr-x. 15 root root   4096 Jan 15 20:05 example
drwxr-xr-x.  2 root root  28672 Jan 15 20:05 licenses
-rw-r--r--.  1 root root  12646 Dec  1  2014 LICENSE.txt
-rw-r--r--.  1 root root 501873 Dec  8  2014 LUCENE_CHANGES.txt
-rw-r--r--.  1 root root  24655 Dec  1  2014 NOTICE.txt
-rw-r--r--.  1 root root   5344 Dec  1  2014 README.txt
-rw-r--r--.  1 root root    850 Dec  1  2014 SYSTEM_REQUIREMENTS.txt

插件具体位置在

solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh

执行如下命令来上传,其中confname是为上传到zookeeper集群中的配置文件的起名为myconf

./zkcli.sh -zkhost 192.168.183.129:2181,192.168.183.129:2182,192.168.183.129:2183 -cmd upconfig -confdir /root/solrCloud/solrhome1/collection1/conf -confname myconf

执行完毕等待时间上传完成
2.6 检查配置文件是否上传成功,进入solrCloud目录下的任意zookeeper目录,此处我们进入zookeeper1目录,然后执行如下命令,输入ip和端口来连接该服务器上的指定端口的zookeeper,如我们这里配置连接2182端口上的zookeeper

./zkCli.sh -server 192.168.183.129:2182

需要注意的是:我们只需要连接zookeeper集群中的任意节点即可,不需要是leader,连接成功如下图所示
这里写图片描述
使用下面命令查看上传的配置文件目录

ls /
[zk: 192.168.183.129:2182(CONNECTED) 0] ls /
[configs, zookeeper]
[zk: 192.168.183.129:2182(CONNECTED) 1] ls /configs
[myconf]
[zk: 192.168.183.129:2182(CONNECTED) 2] ls /configs/myconf
[admin-extra.menu-top.html, currency.xml, protwords.txt, mapping-FoldToASCII.txt, _schema_analysis_synonyms_english.json, _rest_managed.json, solrconfig.xml, _schema_analysis_stopwords_english.json, stopwords.txt, lang, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, synonyms.txt, scripts.conf, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, clustering, schema.xml]

可以看到配置文件已经成功上传,所有solr节点将共享这一份配置文件
2.7 使用quit退出zookeeper客户端连接。在solrCloud目录下编辑批处理文件start-tomcat.sh启动所有tomcat

/root/solrCloud/tomcat1/bin/startup.sh
/root/solrCloud/tomcat2/bin/startup.sh
/root/solrCloud/tomcat3/bin/startup.sh
/root/solrCloud/tomcat4/bin/startup.sh

2.8 为该批护理文件添加执行权限

chmod +x start-tomcat.sh

2.9 执行

./start-tomcat.sh

这里写图片描述
然后查看任意tomcat的启动日志,查看是否启动成功

2.10 访问任意solr服务,key看到已经配置成功
这里写图片描述
2.11 新建collection进行分片操作,使用如下命令,ip和端口修改为自己的

http://192.168.183.129:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

这里写图片描述
2.12 删除不常用的collection

http://192.168.183.129:8180/solr/admin/collections?action=DELETE&name=collection1

猜你喜欢

转载自blog.csdn.net/bsfz_2018/article/details/79515818