SolrCloud部署流程

来源:互联网 发布:网站推广优化 编辑:程序博客网 时间:2024/06/05 08:56
简介
    SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布式搜索方案。SolrCloud是Solr的基于Zookeeper一种部署方式。它的主要思想是使用 Zookeeper 作为集群的配置信息中心。

安装前准备
1.zookeeper3.4.8         http://mirror.bit.edu.cn/apache/zookeeper/
2.solr5.5.3         http://archive.apache.org/dist/lucene/solr/
3.tomcat8.0.38 http://tomcat.apache.org/
4.jdk1.7或以上
    yum命令的时候提示无法执行脚本有出现"Cannot find a valid baseurl for repo"问题提示。看到这样的问题肯定是源不通导致的,先搜索搜索是否有同样的解决方法,有的人用到需要更新repo的,也有的简单更新DNS的。


单solr部署操作
1.解压tomcat以及solr solr初始目录如下

2.配置solr应用到tomcat
    进入solr/server/solr-webapp目录,把webapp目录拷贝到tomcat/webapps目录下,并修改webapp名称为solr
如下图:

3.配置jar包以及日志

进入solr/server/lib/ext目录,把目录下的jar拷贝到tomcat/webapps/solr/WEB-INF/lib下

将solr/dist目录下的solr-dataimporthandler.jar和solr-dataimporthandler-extras.jar复制到tomcat/webapps/solr/WEB-INF/lib/下,这个是为了以后导入数据库表数据。
如下图所有需要移动的jar都移动到此文件夹下

进入solr/server/resources目录,把log4j.properties拷贝到tomcat/webapps/solr/WEB-INF/classes下,classes文件夹需要自行创建

如需修改日志输出地址请修改下图位置

3.配置web.xml
    设置solr/home:编辑tomcat\webapps\solr\WEB-INF\web.xml文件,以下部分是注释的,打开。solr在启动的时候会去这个根目录下加载配置信息。


4.启动tomcat
    启动tomcat访问http://localhost:8080/solr/index.html

5.添加core
 
    在tomcat/solrhome/目录下创建core1(自定义)(solrhome为你在web.xml中配置的地址), 在其目录下创建data文件夹,并将tomcat/solrhome/configsets/basic_configs/目录下的conf文件夹复制到core1下。然后在solr控制台点击Add Core


name:给core随便起个名字

instanceDir:core的安装目录,这里就是之前在tomcat/solrhome/目录下创建的core1文件夹

dataDir:指定用于存放lucene索引和log日志文件的目录路径,该路径是相对于core根目录(在单core模式下,就直接是相对于solr_home了),默认值是当前core目录下的data。

config:用于指定solrconfig.xml配置文件的文件名,启动时会去core1/config目录下去查找。

schema:即用来配置你的schema.xml配置文件的文件名的,schema.xml配置文件应该存放在当前core目录下的conf目录下。但是下载的solr里没有这个文件,所以也不管了。


点击add core 完成



zookeeper伪集群
    ZooKeeper 要求 JAVA 的环境才能运行,并且需要 JAVA6 以上的版本,可以从 SUN 官网上下载,并对 JAVA 环境变量进行设置。除此之外,为了今后操作的方便,我们需要对 ZooKeeper 的环境变量进行配置,方法如下,在 /etc/profile文件中加入如下的内容:
   

#Set ZooKeeper Enviroment

export ZOOKEEPER_HOME=/home/zookeeper-3.4.8

export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf


windowns下:

    右键我的电脑->属性->高级系统设置->高级->环境变量

    新建 

        变量名:ZOOKEEPER_HOME

        变量值:D:\a-zookeeper-3.4.8-2181

    编辑path

        在值之后添加  ;$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

1.配置zookeeper

    我们首先要做的就是在这个目录下创建一个zoo.cfg的配置文件,当然你可以把zoo_sample.cfg文件改成zoo.cfg,配置的内容如下所示:
    
    service1 的zoo.cfg:
    
    service2 的zoo.cfg:
    
    service3 的zoo.cfg:
    

参数说明:

tickTime:zookeeper中使用的基本时间单位, 毫秒值.

initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower。 initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s.

syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms.

dataDir: 数据存放目录. 可以是任意目录.但是我喜欢这么干

dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置

clientPort: 监听client连接的端口号.

server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同.

配置说明

需要注意的是clientPort这个端口如果你是在1台机器上部署多个server,那么每台机器都要不同的clientPort,比如我server1是2181,server2是2182,server3是2183,dataDir和dataLogDir也需要区分下。

最后几行唯一需要注意的地方就是 server.X 这个数字就是对应 data/myid中的数字。你在3个server的myid文件中分别写入了1,2,3,那么每个server中的zoo.cfg都配server.1,server.2,server.3就OK了。因为在同一台机器上,后面连着的2个端口3个server都不要一样,否则端口冲突,其中第一个端口用来集群成员的信息交换,第二个端口是在leader挂掉时专门用来进行选举leader所用。

2.启动zookeeper
   

启动zookeeper/bin下的    zkServer.cmd


报错如下:
 
可以看出没有配置myid

进入zookeeper/data目录,创建一个myid的文件,里面写入一个数字,比如我这个是server1,那么就写一个 1,server2对应myid文件就写入2,server3对应myid文件就写个3(myid文件不可有后缀)
之后可以启动这时会报错,其实没什么关系,因为现在集群只起了1台server,zookeeper服务器端起来会根据zoo.cfg的服务器列表发起选举leader的请求,因为连不上其他机器而报错,那么当我们起第二个zookeeper实例后,leader将会被选出,从而一致性服务开始可以使用,这是因为3台机器只要有2台可用就可以选出leader并且对外提供服务(2n+1台机器,可以容n台机器挂掉)。

多solr与zookeeper组成solrCloud(伪集群)
1.部署多个solr  我这里部署了三个 具体操作参见上面(别忘了在一个机器上时修改tomcat端口)
2.配置zookeeper和各个tomcat进行关联
    修改solr的所在tomcat所在服务器,在${tomcat_home}/bin/目录下修改catalina.sh
   主tomcat配置
linux:
JAVA_OPTS="$JAVA_OPTS -DzkHost=localhost:2181,localhost:2182,localhost:2183 -Dbootstrap_confdir=D:\apache-tomcat-8-8080\solr\core1\conf -Dcollection.configName=myconf -DnumShards=3"

windows:
set JAVA_OPTS=-DzkHost=localhost:2181,localhost:2182,localhost:2183 -Dbootstrap_confdir=D:\apache-tomcat-8-8080\solr\core1\conf -Dcollection.configName=myconf -DnumShards=3
   其它tomcat配置
linux:
JAVA_OPTS="$JAVA_OPTS -DzkHost=localhost:2181,localhost:2182,localhost:2183 -DnumShards=3"
windows:
set JAVA_OPTS=-DzkHost=localhost:2181,localhost:2182,localhost:2183 -DnumShards=3

参数说明:

-DzkRun  在Solr中启动一个内嵌的zooKeeper服务器,该服务会管理集群的相关配置。单机版(测试)使用,如果是集群,用下面的-DzkHost来替换,含义一样

例如:

JAVA_OPTS="$JAVA_OPTS -DzkRun  -Dbootstrap_conf=true -DnumShards=2"

-DzkHost 跟上面参数的含义一样,允许配置一个ip和端口来指定用那个zookeeper服务器进行协调

例如:

JAVA_OPTS = "$JAVA_OPTS -DzkHost=192.168.56.11:2181,192.168.56.12:2181,192.168.56.13:2181-Dbootstrap_conf=true-DnumShards=2"

-Dbootstrap_confdir :zooKeeper需要准备一份集群配置的副本,所以这个参数是告诉SolrCloud这些     配置是放在哪里。同时作为整个集群共用的配置文件

-Dcollection.configName 是在指定你的配置文件上传到zookeeper后的名字,建议和你所上传的核心名字一致,这样容易识别,当然你也可以在满足规范的情况下自己起名。

-bootstrap_conf=true将会上传solr/home里面的所有数据到zookeeper的home/data目录,也就是所有的core将被集群管理

-DnumShards=2 配置你要把你的数据分开到多少个shard中

-Djetty.port =8080 这个端口跟你所在端口保持一致,这个就是jetty的监听端口,实现集群之间进行通信的,如果这个端口不这样配置,那么就是搜索不到数据

当然这个参数也可以再solr/home/solr.xml下面配置:如下所示

<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${jetty.port:8080}</int>
<int name="hostPort">${jetty.port:8080}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool
</solrcloud>

默认是8983,如果在catalina.sh中指定了,会覆盖上图solr.xml中配置的

注意 

-DnumShards, -Dbootstrap_confdir和-Dcollection.configName参数只需要在第一次将Solr运行在SolrCloud模式的时候声明一次。它们可以把你的配置加载到     zooKeeper中;如果你在日后重新声明了这些参数重新运行了一次,将会重新加载你的配置,这样你在原来配置上所做的一些修改操作可能会被覆盖。所以官方推荐只在第一个tomcat里面加入这几个参数,其他集群的tomcat里面不加,启动的第一个Solr的端口号,它是你的SolrCloud集群的overseer节点


3.修改端口
修改solrhome下的solr.xml文件 使其端口与tomcat端口保持一致

4.启动zookeeper与tomcat 完成搭建
   
先启动zookeeper 之后在启动tomcat 访问 http://localhost:8080/solr/index.html#/~cloud 查看是否搭建成功


1 0
原创粉丝点击