您的位置:首页 > 运维架构 > Tomcat

windows下单机版伪分布式solrcloud搭建(solr-4.9.1+apache-tomcat-7.0.68+zookeeper-3.4.8)

2016-04-29 00:23 906 查看
由于机器有限,没有多台服务器,又需要学习solrcloud,而solrcloud是需要zookeeper集群环境,然后查了下资料,发现可以在本机windows环境下搭建zookeeper的伪集群环境模拟solrcloud的实现,于是开始鼓捣。。。

以下操作使用到的软件:

solr-4.9.1 下载地址http://lucene.apache.org/solr/mirrors-solr-latest-redir.html

apache-tomcat-7.0.68

zookeeper-3.4.8



将solr-4.9.1.zip解压(目录在D:\solr\solr-4.9.1)

先来认识一下解压后的目录文件:

client是一个ruby实现的示例,这个我们暂时不管

contrib有一些功能模块是需要的jar包

dist是打包发布好的工程war包

docs是帮助文档

说明:example是示例,里面有打包部署好的solr工程示例和servlet容器jetty。如果你没有tomcat可以直接使用Jetty服务器部署你的solr示例。

Jetty服务器部署solr-demo(单机版)
下面先来熟悉一下如何使用自带的jetty部署solr项目(单机版):

jetty在cmd命令行下启动运行,进入cmd命令行,执行的命令如下:

>d:

>cd D:\solr\solr-4.9.1\example

D:\solr\solr-4.9.1\example>java -jar start.jar 该命令即启动solr自带的jetty服务器

运行http://localhost:8983/solr(8983为默认端口号),出现solr界面,证明jetty服务器启动成功



从这个页面开始了solr的学习,待后续,本节只研究solr的部署。。

然后,Tomcat是我们最常用的服务器,所以试着将solr的demo部署到Tomcat上——

Tomcat服务器部署solr-demo(Tomcat单机版):

1、准备好Tomcat,我用的版本是apache-tomcat-7.0.68,免安装版,解压后存放在D:\program\apache-tomcat-7.0.68
2、取出solr实例中的war包(目录为D:\solr\solr-4.9.1\example\webapps\solr.war),放到Tomcat的webapps下,启动Tomcat,Tomcat会自动加载solr.war解压为solr项目(项目目录为D:\program\apache-tomcat-7.0.68\webapps\solr)
3、创建solr_home目录,在solr项目的目录下新建solr_home目录,将D:\solr\solr-4.9.1\example\solr下的内容全部拷贝到solr_home目录下(solr_home是必须的,不做此步,会报错误:500 - {msg=SolrCore 'collection1' is not availabledue to init failure)

4、引入必须的包,将D:\solr\solr-4.9.1\example\lib\ext下的所有包拷贝到solr项目的lib目录下(如果不做此步会报错误:Could not find necessary SLF4j logging jars)

5、需要手动将日志文件加到项目中,将D:\solr\solr-4.9.1\example\resources目录下的log4j.properties拷贝到solr项目的classes目录下

然后启动Tomcat,tomcat正常运行,出现solr页面,有一个collection1。

6、新建一个core,在solr_home中新建new_core文件夹及子文件夹conf和data(这三个文件夹需要手动创建),然后拷贝collection1文件夹下的所有内容到new_core的conf下(包含必须的xml文件和txt文件),然后在页面中点击addcore,可以创建成功。

下面进入到本文的重点,在zookeeper集群环境中配置solrcloud,因为资源有限,所以在一台机器上(windows系统)建立zookeeper伪集群环境可以模拟集群环境,按照教程操作,中间也硬着头皮直接读英文的wiki,但仍然遇到一些问题,下面在遇到问题的地方会详细说明,本节旨在成功搭建solrcloud环境,更详细的信息以后补充——
[b]Windows下——zookeeper伪集群环境部署solr-demo(Tomcat集群版)[/b]

使用的版本:

solr-4.9.1

apache-tomcat-7.0.68

zookeeper-3.4.8

搭建三台zookeeper、三个tomcat服务器、运行三个solr实例的环境,先看一下最终的目录结构:

D:\solr\solrcloud\

apache-tomcat-7.0.68_1

apache-tomcat-7.0.68_2

apache-tomcat-7.0.68_3

solr_home_1

solr_home_2

solr_home_3

server1

|_data

|_dataLog

|_logs

|_zookeeper-3.4.8

server2

同上

server3

同上

下面详细配置:
1、配置Tomcat

要在同一机器上运行三个tomcat服务器,需要将端口区分开来,避免冲突,还有配置不同的环境变量:

首先将tomcat软件包解压后放入D:\solr\solrcloud\目录中三份,分别命名为:apache-tomcat-7.0.68_1, apache-tomcat-7.0.68_2, apache-tomcat-7.0.68_3

1) 配置环境变量:

CATALINA_BASE1:D:\solrcloud\apache-tomcat-7.0.68_1

CATALINA_BASE2:D:\solrcloud\apache-tomcat-7.0.68_2

CATALINA_BASE3:D:\solrcloud\apache-tomcat-7.0.68_3

CATALINA_HOME1:D:\solrcloud\apache-tomcat-7.0.68_1

CATALINA_HOME2:D:\solrcloud\apache-tomcat-7.0.68_2

CATALINA_HOME3:D:\solrcloud\apache-tomcat-7.0.68_3

CLASSPATH:%CATALINA_HOME1%\lib\servlet-api.jar;%CATALINA_HOME2%\lib\servlet-api.jar;%CATALINA_HOME3%\lib\servlet-api.jar;

Path:%CATALINA_HOME1%\bin;%CATALINA_HOME2%\bin;%CATALINA_HOME3%\bin;

2)修改Tomcat配置文件中对应的环境变量

D:\solr\solrcloud\apache-tomcat-7.0.68_1\bin\catalina.bat startup.bat两个文件中将CATALINA_HOME和CATALINA_BASE分别替换为对应的环境变量名(全文替换):

apache-tomcat-7.0.68_1\中:CATALINA_HOME1和CATALINA_BASE1

apache-tomcat-7.0.68_2\中:CATALINA_HOME2和CATALINA_BASE2

apache-tomcat-7.0.68_3\中:CATALINA_HOME3和CATALINA_BASE3

3)修改Tomcat的端口号,避免多个tomcat端口冲突,需要修改的是apache-tomcat-7.0.68\conf\server.xml中三个端口号:8005、8080、8009,修改为不一样即可,我修改为:

apache-tomcat-7.0.68_1:8005、8080、8009

apache-tomcat-7.0.68_2:8015、8090、8019

apache-tomcat-7.0.68_3:8025、8100、8029

2、配置solr_home
将D:\solr\solr-4.9.1\example\solr全部内容拷贝到D:\solr\solrcloud\目录下三份,分别改名为:solr_home_1,solr_home_2,solr_home_3

3、Tomcat中引入solr_home(solr与tomcat关联的地方):

D:\solr\solrcloud\apache-tomcat-7.0.68_1\bin\catalina.bat中15行后加入(每个Tomcat配置一遍,修改相应的编号)

set JAVA_OPTS=-Dsolr.solr.home=D:\solr\solrcloud\solr_home_1

if "%OS%"=="Windows-NT" setlocal

D:\solr\solrcloud\apache-tomcat-7.0.68_2\bin\catalina.bat中加入:

set JAVA_OPTS=-Dsolr.solr.home=D:\solr\solrcloud\solr_home_2

if"%OS%"=="Windows-NT" setlocal

D:\solr\solrcloud\apache-tomcat-7.0.68_3\bin\catalina.bat中加入:

setJAVA_OPTS=-Dsolr.solr.home=D:\solr\solrcloud\solr_home_3

if"%OS%"=="Windows-NT" setlocal

4、Tomcat中加入solr项目:
solr-4.9.1.zip解压后的目录中找到..\solr-4.9.1\example\webapps\solr.war,加入到每个tomcat的webapps中

启动每个tomcat,启动后tomcat的webapps中会生成一个solr项目目录,此时tomcat正常启动,但是浏览器是无法看到solr页面,还要进行以下两个步骤(每个tomcat度重复此步骤):

a)将..\solr-4.9.1\example\lib\ext中所有包拷贝到tomcat中solr项目的lib下

b)将..\solr-4.9.1\example\resources\log4j.properties文件拷贝到tomcat中solr项目的WEB-INF的classes下

再次重启每个tomcat,访问http://localhost:8080/solr(每个tomcat换成自己的端口号),此时每个单机版的tomcat启动成功,运行可以看到solr的初始页面。

5、部署zookeeper

a) 在D:\solr\solrcloud文件夹下新建server1、server2、server3文件夹,在每个文件夹下加入三个子文件夹:data、dataLog、logs、zookeeper-3.4.8(zookeeper解压后直接放入)

b) data文件夹中新建文件myid(无后缀),server1中myid文件输入:1(server2中myid文件输入2,server3中myid文件输入3)

c) D:\solr\solrcloud\server1\zookeeper-3.4.8\conf目录下zoo_sample.cfg文件名改为zoo.cfg(其他两个同理),修改zoo.cfg文件内容(注:clientPort不能相同):

tickTime=2000

initLimit=10

syncLimit=5

dataDir=D:/solr/solrcloud/server1/data

dataLogDir=D:/solr/solrcloud/server1/dataLog

clientPort=2181

server.1=127.0.0.1:2888:3888

server.2=127.0.0.1:2889:3889

server.3=127.0.0.1:2890:3890

server.X 这个数字就是对应 data/myid中的数字

clientPort端口号不能相同,server2中clientPort=2182,server3中clientPort=2183

配置完成后,在cmd命令行启动zookeeper,进入zookeeper的bin目录,执行zkServer.cmd(windows环境执行文件),当第一个启动时,会爆错误:connected拒绝访问,不用处理,当zookeeper全部开启后,成功。

6、zookeeper与tomcat关联

修改Tomcat_server_x的catalina.bat:

将server1(zookeeper服务器)作为主服务器,tomcat1的配置如下:

setJAVA_OPTS=-Dsolr.solr.home=D:/solr/solrcloud/solr_home_1

-Dbootstrap_confdir=D:/solr/solrcloud/solr_home_1/collection1/conf-Dcollection.configName=myconf

-DnumShards=2 -DzkHost=127.0.0.1:2181

说明1:Dsolr.solr.home变量是solr的主目录,里边存放索引文件.Dbootstrap_confdir变量指向solr的所有配置文件(注注注:会上传到zookeeper下,供所有的solr节点共用,因此,其它solr节点的启动时,startenv.sh里就不再需要加Dbootstrap_confdir参数).

说明2:-Dcollection.configName这个参数确定了保存在ZooKeeper中的索引配置的名字。在这里我们使用了“myconf”作为一个例子,之前以为一个错误是这个的命名导致,后来验证不是,这里可以随意任意命名

Tomcat2的配置如下:

setJAVA_OPTS=-Dsolr.solr.home=D:/solr/solrcloud/solr_home_2 -DzkHost=127.0.0.1:2181

Tomcat3的配置如下:

setJAVA_OPTS=-Dsolr.solr.home=D:/solr/solrcloud/solr_home_3 -DzkHost=127.0.0.1:2181

7、修改solr_home_x的solr.xml信息,将tomcat与solr关联

因为tomcat中将tomcat1设为主,所以solr_home_1中solr.xml设置如下:

<solr persistent="false">

<coresadminPath="/admin/cores" defaultCoreName="collection1"host="${host:}"
hostPort="8080">

<core name="collection1" instanceDir="collection1"/>

</cores>

</solr>

hostPort是每个tomcat的server.xml中对应的启动端口号(solr_home_2和solr_home_3同上,注意区分端口号)

启动所有服务(zookeeper三枚,tomcat三枚)后访问伪集群地址为:http://localhost:8080/solr/#/~cloud

Tomcat_1访问http://localhost:8080/solr/#/~cloud,会报错误:Zookeeper is not configured for this Solr Core.Please try connecting to an alternate zookeeper address."

tomcat_2和tomcat_3访问http://localhost:8090/solr/#/~cloudhttp://localhost:8100/solr/#/~cloud,错误为:

HTTP Status 500 -{msg=SolrCore 'collection1' is not available due to init failure: Could not findconfigName for collection collection1 found

解决:将solr_home_2和solr_home_3中solr.xml文件中创建core的语句删掉:

<core name="collection1"instanceDir="collection1" />
再次重新启动所有服务器,运行结果为:

tomcat_1,仍然是Zookeeperis not configured for this Solr Core. Please try connecting to an alternatezookeeper address.

tomcat_2和tomcat_3出现期待的结果:

Collection1->shard1->172.20.163.38:8100

172.20.163.38:8110

最后赠送一个问题:

Can't find (or read# directory to add to classloader:../contrib/extraction/lib #resolved as: E:\solrcloud\solr_home_1\collection1

将solrconfig.xml文件中包路径配置为绝对路径,然后将solr解压目录下的contrib和disk全部拷贝到相应目录下,保证能找到包,就不再报此错误。

参考:http://www.it165.net/os/html/201405/8229.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: