Solr集群安装

1. SolrCloud介绍

1.1. 什么是SolrCloud

 

SolrCloud(solr )Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。

 SolrCloud是基于SolrZookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。

它有几个特色功能:

1)集中式的配置信息

2)自动容错

3)近实时搜索

4)查询时自动负载均衡

 

1.2. zookeeper是个什么玩意?

顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象)、Hive(蜜蜂)pig(小猪)的管理员, Apache Hbase和 Apache Solr 的分布式集群都用到了zookeeperZookeeper:是一个分布式的、开源的程序协调服务,是hadoop项目下的一个子项目。

1.3. Zookeeper可以干哪些事情

1.3.1. 配置管理

在我们的应用中除了代码外,还有一些就是各种配置。比如数据库连接等。一般我们都是使用配置文件的方式,在代码中引入这些配置文件。但是当我们只有一种配置,只有一台服务器,并且不经常修改的时候,使用配置文件是一个很好的做法,但是如果我们配置非常多,有很多服务器都需要这个配置,而且还可能是动态的话使用配置文件就不是个好主意了。这个时候往往需要寻找一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。比如我们可以把配置放在数据库里,然后所有需要配置的服务都去这个数据库读取配置。但是,因为很多服务的正常运行都非常依赖这个配置,所以需要这个集中提供配置服务的服务具备很高的可靠性。一般我们可以用一个集群来提供这个配置服务,但是用集群提升可靠性,那如何保证配置在集群中的一致性呢? 这个时候就需要使用一种实现了一致性协议的服务了。Zookeeper就是这种服务,它使用Zab这种一致性协议来提供一致性。现在有很多开源项目使用Zookeeper来维护配置,比如在HBase中,客户端就是连接一个Zookeeper,获得必要的HBase集群的配置信息,然后才可以进一步操作。还有在开源的消息队列Kafka中,也使用Zookeeper来维护broker的信息。在Alibaba开源的SOA框架Dubbo中也广泛的使用Zookeeper管理一些配置来实现服务治理。

1.3.2. 名字服务

名字服务这个就很好理解了。比如为了通过网络访问一个系统,我们得知道对方的IP地址,但是IP地址对人非常不友好,这个时候我们就需要使用域名来访问。但是计算机是不能是别域名的。怎么办呢?如果我们每台机器里都备有一份域名到IP地址的映射,这个倒是能解决一部分问题,但是如果域名对应的IP发生变化了又该怎么办呢?于是我们有了DNS这个东西。我们只需要访问一个大家熟知的(known)的点,它就会告诉你这个域名对应的IP是什么。在我们的应用中也会存在很多这类问题,特别是在我们的服务特别多的时候,如果我们在本地保存服务的地址的时候将非常不方便,但是如果我们只需要访问一个大家都熟知的访问点,这里提供统一的入口,那么维护起来将方便得多了。

1.3.3. 分布式锁

其实在第一篇文章中已经介绍了Zookeeper是一个分布式协调服务。这样我们就可以利用Zookeeper来协调多个分布式进程之间的活动。比如在一个分布式环境中,为了提高可靠性,我们的集群的每台服务器上都部署着同样的服务。但是,一件事情如果集群中的每个服务器都进行的话,那相互之间就要协调,编程起来将非常复杂。而如果我们只让一个服务进行操作,那又存在单点。通常还有一种做法就是使用分布式锁,在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即fail over到另外的服务。这在很多分布式系统中都是这么做,这种设计有一个更好听的名字叫Leader Election(leader选举)。比如HBaseMaster就是采用这种机制。但要注意的是分布式锁跟同一个进程的锁还是有区别的,所以使用的时候要比同一个进程里的锁更谨慎的使用。

1.3.4. 集群管理

在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中其他机器需要感知到这种变化,然后根据这种变化做出对应的决策。比如我们是一个分布式存储系统,有一个中央控制节点负责存储的分配,当有新的存储进来的时候我们要根据现在集群目前的状态来分配存储节点。这个时候我们就需要动态感知到集群目前的状态。还有,比如一个分布式的SOA架构中,服务是一个集群提供的,当消费者访问某个服务时,就需要采用某种机制发现现在有哪些节点可以提供该服务(这也称之为服务发现,比如Alibaba开源的SOA框架Dubbo就采用了Zookeeper作为服务发现的底层机制)。还有开源的Kafka队列就采用了Zookeeper作为Cosnumer的上下线管理。

 

1.4. SolrCloud结构

SolrCloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引。

SolrCloud需要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成,由zookeeper来进行协调管理。

 

下图是一个SolrCloud应用的例子:

 

 

对上图进行图解,如下:

 

 

 

1.4.1. 物理结构

三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud

1.4.2. 逻辑结构

索引集合包括两个Shardshard1shard2),shard1shard2分别由三个Core组成,其中一个Leader两个ReplicationLeader是由zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。

用户发起索引请求分别从shard1shard2上获取,解决高并发问题。

 

1. collection

CollectionSolrCloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个Shard(分片),它们使用相同的配置信息。

比如:针对商品信息搜索可以创建一个collection

 collection=shard1+shard2+....+shardX

 

2. Core

每个CoreSolr中一个独立运行单位,提供 索引和搜索服务。一个shard需要由一个Core或多个Core组成。由于collection由多个shard组成所以collection一般由多个core组成。

 

3. MasterSlave

Mastermaster-slave结构中的主结点(通常说主服务器),Slavemaster-slave结构中的从结点(通常说从服务器或备服务器)。同一个Shardmasterslave存储的数据是一致的,这是为了达到高可用目的。

 

 

4. Shard

Collection的逻辑分片。每个Shard被化成一个或者多个replication,通过选举确定哪个是Leader

 

2. SolrCloud搭建

2.1. 架构分析

本课程的这套安装是单机版的安装,所以采用伪集群的方式进行安装,如果是真正的生产环境,将伪集群的ip改下就可以了,步骤是一样的。

SolrCloud结构图如下:

2.1.1. 集群分成两大部分:

1. zookeeper集群

a) zookeeper需要保证高可用,需要搭建集群

b) zookeeper需要进行投票和选举机制,最少需要三个节点

c) zookeeper的三个节点,注意修改端口号不一样

2. Solr的集群

a) 需要四个节点

b) 整个core分成两个分片,每个分片都由两个服务器组成,masterslave

c) 每个Tomcat有一个solr服务

 

2.1.2. 环境:

CentOS 6.5  32位

jdk1.7

 

单机版的虚拟机内存最好是1G以上

 

2.2. zookeeper集群搭建

2.2.1. 复制三份zookeeper

[root@itcast-01 WEB-INF]# cd /usr/local/

[root@itcast-01 local]# cp zookeeper-3.4.6.tar.gz solr/solr-cloud/

[root@itcast-01 local]# cd solr/solr-cloud/

[root@itcast-01 solr-cloud]# tar -zxf zookeeper-3.4.6.tar.gz

[root@itcast-01 solr-cloud]# mv zookeeper-3.4.6 zookeeper01

[root@itcast-01 solr-cloud]# cp -r zookeeper01/ zookeeper02

[root@itcast-01 solr-cloud]# cp -r zookeeper01/ zookeeper03

 

2.2.2. 配置zookeeper

1. 给每个zookeeper的解压目录创建data文件夹

[root@itcast-01 solr-cloud]# mkdir zookeeper01/data

[root@itcast-01 solr-cloud]# mkdir zookeeper02/data

[root@itcast-01 solr-cloud]# mkdir zookeeper03/data

 

2. 给每个zookeeper的解压目录创建myid文件,并分别写入1,2,3

[root@itcast-01 solr-cloud]# vim zookeeper01/data/myid

1

[root@itcast-01 solr-cloud]# vim zookeeper01/data/myid

2

[root@itcast-01 solr-cloud]# vim zookeeper01/data/myid

3

 

 

3. 给每个zookeeper的配置文件改名

[root@itcast-01 solr-cloud]# mv zookeeper01/conf/zoo_sample.cfg zookeeper01/conf/zoo.cfg

[root@itcast-01 solr-cloud]# mv zookeeper02/conf/zoo_sample.cfg zookeeper02/conf/zoo.cfg

[root@itcast-01 solr-cloud]# mv zookeeper03/conf/zoo_sample.cfg zookeeper03/conf/zoo.cfg

 

4. 修改每个zookeeper的配置文件

[root@itcast-01 solr-cloud]# vim zookeeper01/conf/zoo.cfg

[root@itcast-01 solr-cloud]# vim zookeeper02/conf/zoo.cfg

[root@itcast-01 solr-cloud]# vim zookeeper03/conf/zoo.cfg

 

修改dataDir和端口号

底部加上:

server.1=192.168.25.154:2881:3881

server.2=192.168.25.154:2882:3882

server.3=192.168.25.154:2883:3883

 

效果

 

 

2.2.3. 启动zookeeper

[root@itcast-01 solr-cloud]# zookeeper01/bin/zkServer.sh start

JMX enabled by default

Using config: /usr/local/solr/solr-cloud/zookeeper01/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@itcast-01 solr-cloud]# zookeeper02/bin/zkServer.sh start

JMX enabled by default

Using config: /usr/local/solr/solr-cloud/zookeeper02/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[root@itcast-01 solr-cloud]# zookeeper03/bin/zkServer.sh start

JMX enabled by default

Using config: /usr/local/solr/solr-cloud/zookeeper03/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

 

2.2.4. 查看状态

[root@itcast-01 solr-cloud]# ./zookeeper01/bin/zkServer.sh status  

JMX enabled by default

Using config: /usr/local/solr/solr-cloud/zookeeper01/bin/../conf/zoo.cfg

Mode: follower

[root@itcast-01 solr-cloud]# ./zookeeper02/bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/solr/solr-cloud/zookeeper02/bin/../conf/zoo.cfg

Mode: leader

[root@itcast-01 solr-cloud]# ./zookeeper03/bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/solr/solr-cloud/zookeeper03/bin/../conf/zoo.cfg

Mode: follower

 

2.3. 搭建单机版solr服务

2.3.1. 安装jdk

2.3.2. 安装Tomcat

1. 上传

alt+p进入SFTP界面,进行上传

sftp> put -r "C:\0423\07taotao\01课前资料\02技术资料\tomcat\apache-tomcat-7.0.47.tar.gz"

 

2. 解压

[root@itcast-01 ~]# tar -zxf apache-tomcat-7.0.47.tar.gz

 

3. 移动

[root@itcast-01 ~]# mkdir /usr/local/solr

[root@itcast-01 ~]# mv apache-tomcat-7.0.47 /usr/local/solr/tomcat

 

2.3.3. 安装solr单机版

5. 上传solr

alt+p进入SFTP界面,进行上传

sftp> put -r "C:\0423\07taotao\01课前资料\02技术资料\Solr\solr-4.10.3.tgz.tgz"

 

6. 移动solr

[root@itcast-01 ~]# mv solr-4.10.3.tgz.tgz /usr/local/solr/

 

7. 解压solr

[root@itcast-01 ~]# cd /usr/local/solr/

[root@itcast-01 solr]# tar -zxf solr-4.10.3.tgz.tgz

 

8. solr部署到Tomcat

1. 复制Tomcat并删除webapps内所有文件,创建ROOT目录

[root@itcast-01 example]# cd /usr/local/solr/tomcat/webapps/

[root@itcast-01 webapps]# rm -rf *

[root@itcast-01 webapps]# mkdir ROOT

 

2. 部署solr.warTomcat

[root@itcast-01 webapps]# cp /usr/local/solr/solr-4.10.3/example/webapps/solr.war ROOT/

[root@itcast-01 webapps]# cd ROOT

[root@itcast-01 ROOT]# jar -xf solr.war

 

3. 删除war

[root@itcast-01 ROOT]# rm -f solr.war

 

4. solr-4.10.2/example/lib/ext目录下的所有的jar包,添加到solr工程中

[root@itcast-01 ROOT]# cd /usr/local/solr/solr-4.10.3/example/lib/ext/

[root@itcast-01 ext]# cp * /usr/local/solr/tomcat/webapps/ROOT/WEB-INF/lib/

 

9. 创建solrhome

/example/solr目录就是一个solrhome。复制此目录到/usr/local/solr/solrhome

[root@itcast-01 ext]# cd /usr/local/solr/solr-4.10.3/example/

[root@itcast-01 example]# cp -r solr /usr/local/solr/solrhome

 

10. 准备自己的业务域

根据业务需求,添加中文分词jar,修改自己的solrcoreschema.xml配置文件的业务域等等。

 

 

例如schema.xml增加内容如下:

    <!-- IKAnalyzer-->

    <fieldType name="text_ik" class="solr.TextField">

          <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>

    </fieldType>

 

    <field name="item_title" type="string" indexed="true" stored="true" />

    <field name="item_price" type="long" indexed="true" stored="true"  />       

    <field name="item_image" type="string" indexed="false" stored="true" />    

    <field name="item_cid" type="long" indexed="false" stored="true" />

    <field name="item_status" type="int" indexed="true" stored="false" />

 

 

2.4. solr集群搭建

solr的集群应该有4solr服务

2.4.1. 把solrhome复制到solr-cloud目录下,复制四份。

[root@itcast-01 example]# cd /usr/local/solr/

[root@itcast-01 solr]# mkdir solr-cloud/

[root@itcast-01 solr]# cp -r solrhome/ solr-cloud/solrhome01

[root@itcast-01 solr]# cp -r solrhome/ solr-cloud/solrhome02

[root@itcast-01 solr]# cp -r solrhome/ solr-cloud/solrhome03

[root@itcast-01 solr]# cp -r solrhome/ solr-cloud/solrhome04

 

2.4.2. 安装4Tomcat ,其实就是复制4Tomcat

其实就是复制4分之前准备的4solr单机版

[root@itcast-01 solr]# cp -r tomcat/ solr-cloud/tomcat-solr01

[root@itcast-01 solr]# cp -r tomcat/ solr-cloud/tomcat-solr02

[root@itcast-01 solr]# cp -r tomcat/ solr-cloud/tomcat-solr03

[root@itcast-01 solr]# cp -r tomcat/ solr-cloud/tomcat-solr04

 

2.4.3. 修改Tomcat端口号8081~8084

[root@itcast-01 solr]# cd solr-cloud/

[root@itcast-01 solr-cloud]# vim tomcat-solr01/conf/server.xml

[root@itcast-01 solr-cloud]# vim tomcat-solr02/conf/server.xml

[root@itcast-01 solr-cloud]# vim tomcat-solr03/conf/server.xml

[root@itcast-01 solr-cloud]# vim tomcat-solr04/conf/server.xml

 

需要修改3个地方的端口号,

如下图第一个Tomcat为例,修改三个端口号8001,8081,8011,其他Tomcat类似

 

 

 

 

2.4.4. 修改每个Tomcatsolr服务的web.xml

4Tomcat都要修改为对应的solrhome

[root@itcast-01 solr-cloud]# vim tomcat-solr01/webapps/ROOT/WEB-INF/web.xml

[root@itcast-01 solr-cloud]# vim tomcat-solr02/webapps/ROOT/WEB-INF/web.xml

[root@itcast-01 solr-cloud]# vim tomcat-solr03/webapps/ROOT/WEB-INF/web.xml

[root@itcast-01 solr-cloud]# vim tomcat-solr04/webapps/ROOT/WEB-INF/web.xml

 

修改各自的solrhome

例如/usr/local/solr/solr-cloud/solrhome01

 

 

 

2.4.5. 修改4solrhome里面的solr.xml设置运行的端口号

[root@itcast-01 solr-cloud]# vim solrhome01/solr.xml

[root@itcast-01 solr-cloud]# vim solrhome02/solr.xml

[root@itcast-01 solr-cloud]# vim solrhome03/solr.xml

[root@itcast-01 solr-cloud]# vim solrhome04/solr.xml

 

例如solrhome01需要修改为8081,其他类似

 

 

2.4.6. 把配置文件上传到zookeeper集群

进入/usr/local/solr/solr-4.10.3/example/scripts/cloud-scripts,执行命令

[root@itcast-01 solr-cloud]# cd /usr/local/solr/solr-4.10.3/example/scripts/cloud-scripts

需要运行的以下命令,需要修改IP地址修改solrcore的路径地址

[root@itcast-01 cloud-scripts]# ./zkcli.sh -zkhost 192.168.37.161:3181,192.168.37.161:3182,192.168.37.161:3183 -cmd upconfig -confdir /usr/local/solr/solr-cloud/solrhome01/collection1/conf -confname myconf

 

zookeeper是做配置文件的集中管理,

以上命令的作用是配置文件上传给zookeeperzookeeper管理配置文件

zookeeper把所有的solr集群的配置文件进行统一管理

 

2.4.7. 查看zookeeper中的配置文件

进入任意zookeeper使用客户端进行查看

[root@itcast-01 cloud-scripts]# cd /usr/local/solr/solr-cloud/zookeeper01/bin

[root@itcast-01 bin]# ./zkCli.sh -server 192.168.37.161:3181

 

使用ls命令查看zookeeper配置信息

 

 

2.4.8. 设置zookeeper的地址给Tomcat

需要修改每个Tomcatbin/catalina.sh文件

[root@itcast-01 bin]# cd /usr/local/solr/solr-cloud/

[root@itcast-01 solr-cloud]# vim tomcat-solr01/bin/catalina.sh

[root@itcast-01 solr-cloud]# vim tomcat-solr02/bin/catalina.sh

[root@itcast-01 solr-cloud]# vim tomcat-solr03/bin/catalina.sh

[root@itcast-01 solr-cloud]# vim tomcat-solr04/bin/catalina.sh

 

例如Tomcat01,其他Tomcat都一样设置,添加JAVA_OPTS

JAVA_OPTS="-DzkHost=192.168.37.161:3181,192.168.37.161:3182,192.168.37.161:3183"

 

 

 

2.4.9. 启动所有的Tomcat

[root@itcast-01 solr-cloud]# ./tomcat-solr01/bin/startup.sh

[root@itcast-01 solr-cloud]# ./tomcat-solr02/bin/startup.sh

[root@itcast-01 solr-cloud]# ./tomcat-solr03/bin/startup.sh

[root@itcast-01 solr-cloud]# ./tomcat-solr04/bin/startup.sh

 

 

 

2.4.10. 访问solr集群

访问任意一个solr集群的节点都可以

例如http://192.168.37.161:8081/solr

 

 

2.4.11. 集群分片

如果集群中有四个solr节点创建新集群collection2,将集群分为两片,每片一个副本。

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

 

 

效果

 

 

2.4.12. 删除原来的solrcore

http://192.168.37.161:8081/solr/admin/collections?action=DELETE&name=collection1

 

 

效果

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值