windows下solrcloud+tomcat+zookeeper伪集群环境搭建

时间:2022-04-03 20:14:50

利用外部的tomcat+外部的zookeeper搭建solrcloud集群服务环境

Tomcat服务器部署集群solr示例(Tomcat集群-Windowssolrcloud+tomcat+zookeeper)

需要的软件:

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

apache-tomcat-7.0.68

zookeeper-3.4.8.tar.gz

最终配置的目录结构:

E:\solrcloud\tomcatcloud\

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

zk_server_1

zk_Server_2

zk_Server_3

下面是各文件夹下的详细配置:

1)Tomcat配置:

同一机器部署多个Tomcat,注意将环境变量和server.xml中端口号(三个端口号都要变成不一样)区分开

若用MyEclipse来启动Tomcat的话,那么配置Tomcat的版本必须不一样才能同时配置上去,比如,同时配置四个Tomcat6是不可能的,但是Tomcat4567是可以同时配置的!

a) Tomcat目录:

apache-tomcat-7.0.68-windows-x64.zip解压后,取apache-tomcat-7.0.68放入solrcloud目录下三份,分别改名为:apache-tomcat-7.0.68_1apache-tomcat-7.0.68_2apache-tomcat-7.0.68_3

b) 配置Tomcat环境变量:

CATALINA_BASE1E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_1

CATALINA_BASE2:E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_2

CATALINA_BASE3:E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_3

CATALINA_HOME1E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_1

CATALINA_HOME2:E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_2

CATALINA_HOME3:E:\solrcloud\tomcatcloud\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)配置solrhome

解压后的solr的..\example\solr全部内容拷贝到solrcloud目录下三份,分别改名为:solr_home_1solr_home_2solr_home_3 

3)Tomcat中加入solrhome

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

set JAVA_OPTS=-Dsolr.solr.home=E:/solrcloud/tomcatcloud/solr_home_1

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

E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_2\bin\catalina.bat中加入:

set JAVA_OPTS=-Dsolr.solr.home=E:/solrcloud/tomcatcloud/solr_home_2

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

E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_3\bin\catalina.bat中加入:

set JAVA_OPTS=-Dsolr.solr.home=E:/solrcloud/tomcatcloud/solr_home_3

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

4)修改TOmcat配置文件中对应环境变量的值:

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

CATALINA_HOME1和CATALINA_BASE1

CATALINA_HOME2和CATALINA_BASE2

CATALINA_HOME3和CATALINA_BASE3

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

E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_1\conf\server.xml:8015、80908019

E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_2\conf\server.xml:8025、81008029

E:\solrcloud\tomcatcloud\apache-tomcat-7.0.68_3\conf\server.xml:8035、81108039

6)Tomcat中加入solr:

找到..\solr-4.9.1\example\webapps\solr.war,加入到每个tomcatwebapps

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

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

b)..\solr-4.9.1\example\resources\log4j.properties文件拷贝到tomcatsolr项目的WEB-INFclasses

再次重启每个tomcat,访问http://localhost:8090/solr(每个tomcat换成自己的端口号),启动成功。

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

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

8)配置zookeeper

a) E:\solrcloud\tomcatcloud文件夹下新建server1server2server3文件夹,在每个文件夹下加入三个子文件夹:datadataLoglogszookeeper解压后放入

b) data文件夹中新建文件myid(无后缀)server1myid文件输入内容1(另两个同理)

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

tickTime=2000

initLimit=10

syncLimit=5

dataDir=E:/solrcloud/tomcatcloud/zk_server_1/data

dataLogDir=E:/solrcloud/tomcatcloud/zk_server_1/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中的数字

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

9)如何验证zookeeper伪集群(本地单机三点zookeeper服务)配置成功:

zookeeper测试类:

cmd启动:>cd java测试类所在目录(java类中引用到的zookeeper-3.4.8.jarslf4j-api-1.61.jar也放在该目录下)

>javac -cp zookeeper-3.4.8.jar ZKClient.java

正常运行,在java类所在目录下生成对应的class文件,无报错,但不知怎么体现zookeeper配置正确?

zookeeper\binzkServer.cmd加入:

set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain

set ZOOCFG=..\conf\zoo3.cfg,将zoo.cfg改为zoo3.cfg(其他各自对应)

10)修改Tomcat_server_xcatalina.bat信息,将zookeeper加入tomcat

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

set JAVA_OPTS=-Dsolr.solr.home=E:/solrcloud/tomcatcloud/solr_home_1

-Dbootstrap_confdir=E:/solrcloud/tomcatcloud/solr_home_1/collection1/conf -Dcollection.configName=myconf 

-DnumShards=2 -DzkHost=127.0.0.1:2181

 -D是命令行下指定系统属性的固定前缀

Dsolr.solr.home变量是solr的主目录,里边存放索引文件

.Dbootstrap_confdir变量指向solr的所有配置文件(注注注:会上传到zookeeper,供所有的solr节点共用,因此,其它solr节点的启动时,startenv.sh里就不再需要加Dbootstrap_confdir参数). 

-Dcollection.configName 这个参数确定了保存在ZooKeeper中的索引配置的名字。在这里我们使用了“myconf”作为一个例子,你可以使用任意你想要使用的名字来替换。

Tomcat2的配置如下:

set JAVA_OPTS=-Dsolr.solr.home=E:/solrcloud/somcatcloud/solr_home_2 -DzkHost=127.0.0.1:2181

Tomcat3的配置如下:

set JAVA_OPTS=-Dsolr.solr.home=E:/solrcloud/somcatcloud/solr_home_3 -DzkHost=127.0.0.1:2181

11)修改solr_home_xsolr.xml信息,将tomcat端口号与solr关联

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

<solr persistent="false">

<cores adminPath="/admin/cores" defaultCoreName="collection1" host="${host:}" hostPort="8090">

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

</cores>

</solr>

hostPort是每个tomcatserver.xml中对应的启动端口号(solr_home_2solr_home_3同上,注意区分端口号)

启动所有server和tomcat

启动所有服务后访问伪集群地址为:http://localhost:8090/solr/#/~cloud

以下解决启动报错问题:

Tomcat_1会报错误:Zookeeper is not configured for this Solr Core. Please try connecting to an alternate zookeeper address."正常配置下主机器(tomcat_1)中运行页面,就是这种提示,

tomcat_2tomcat_3中错误为:

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

验证:zookeeper集群配置成功,排除zookeeper集群配置问题

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

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

创建core时需要注意的地方说明:core在创建的时候会比较麻烦,可以在最初只放一个collection1(solr的解压包中的exampl/solr中获得),启动之后,在collection1相同目录下手动新建其他core的文件夹,然后将collection1中的confdata文件夹拷贝到相应新建core的文件夹下,然后保留conf文件夹下的配置文件,删除data文件夹下的文件(这个文件夹拷贝过来的是collection1的索引,删除,在tomcat启动后,会自动为每个core创建索引)

再次启动,运行

http://localhost:8090/solr/#/~cloud(Tomcat_1),

http://localhost:8100/solr/#/~cloud(tomcat_2),

http://localhost:8110/solr/#/~cloud(tomcat_3)

运行结果:tomcat_1,出现的结果还是Zookeeper is not configured for this Solr Core. Please try connecting to an alternate zookeeper address.

tomcat_2和tomcat_3会出现预期的结果:

Collection1->shard1->172.20.163.38:8100

            172.20.163.38:8110

注意:直接将solr_home_2solr_home_3collection1删掉,然后启动所有服务,tomcat1显示如上,但是tomcat2tomcat3没有显示任何信息,并不是错误,因为没有创建core,所以没有信息显示