本文是在单机环境下模拟集群环境,进行solrcloud的配置安装。
-------------------------------------------
所用环境及软件:
------------------------------------------
1. Windows 7 64bit:
2. Jdk v1.7
3. Tomcat v7.0.20 下载地址: http://tomcat.apache.org/
4. Zookeepr v3.4.6 下载地址: http://zookeeper.apache.org/releases.html
5. Solr v4.7.0 下载地址: https://lucene.apache.org/solr/
-------------------------------------------------------------------------------------------------------------------------------------------------
zookeeper的集群安装
-------------------------------------------------------------------------------------------------------------------------------------------------
1. 下载Zookeeper,解压之;
2. 在D:\appservers\hadoop\zookeeper\zookeeperv3.4.6 建立如下目录:
zookeeperA|zookeeperB|zookeeperC用于存放刚才解压过的zookeeper,将刚才解压过的zookpeer文件分别拷入这3个文件夹;
zookeeperA_data|zookeeperB_data|zookeeperC_data 用于存放数据快照及日志文件,并在此文件夹下建立data和logs目录;
3.以zookeeperA为例,配置zoo.cfg文件
拷贝zookeeperA/conf/zoo_sample.cfg,并修改文件名为zoo.cfg;
修改zoo.cfg文件(参见附件):
tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:/appservers/hadoop/zookeeper/zookeeperv3.4.6/zookeeperA_data/data
clientPort=2181
server.1=127.0.0.1:2788:3788
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2988:3988
dataLogDir=D:/appservers/hadoop/zookeeper/zookeeperv3.4.6/zookeeperA_data/logs
参数说明:
tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间
initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
clientPort:服务的监听端口,
dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里
(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)
dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争
syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。
4. 修改ZookeeperB和zookeeperB中的zoo.cfg文件:
在ZookeeperB中clientPort=2281
在ZookeeperC中clientPort=2381
5. 创建myid文件:
ZookeeperA:在ZookeeperA_data/data中创建myid文件,文件内容为1。
ZookeeperB:在ZookeeperB_data/data中创建myid文件,文件内容为2。
ZookeeperC:在ZookeeperC_data/data中创建myid文件,文件内容为3。
6. 依次启动Zookeeper:
zookeeperA | ZookeeperA/bin/zkServer |
zookeeperB | ZookeeperB/bin/zkServer |
zookeeperC | ZookeeperC/bin/zkServer |
依次启动zookeeper,启动第一台zookeeper后,你可以观察bin下的zookeeper.out可以看到报错,connection refused,没有关系,
zookeeper需要等待其他另个节点的加入,全部启动之后就正常了。
7. 客户端连接zookeeper:(以ZookeeperA为例)
zookeeperA | ZookeeperA/bin/zkCli -server localhost:2181 [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 1] |
备注:执行ls /命令后,可能会显示如下目录和文件(此时还未做solrcloud配置,故只显示zookeeper),
configs:保存上传的配置文件信息
clusterstate.json:集群状态json
aliases:别名json
live_node:当solr服务器启动的时候,会注册到这里
overseer:保存shard信息
overseer_elect:节点选举
collections:所有的collection
-----------------------------------------------------------------------------------------------------------------------------------------------
TomCat安装及配置
-----------------------------------------------------------------------------------------------------------------------------------------------
在D:\appservers\apache-tomcat-7.0.20\apache-tomcat-7.0.20-test-solrcloud目录中,创建如下目录:
apache-tomcat-7.0.20-solrcloudA|apache-tomcat-7.0.20-solrcloudB|apache-tomcat-7.0.20-solrcloudC
1.创建solr.xml文件
在<Tomcat.home>/conf/catalina/localhost目录下创建solr文件,文件内容为:
<?xml version="1.0" encoding="utf-8"?>
<Context docBase="../../../webapps/solr.war" debug="0" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="D:/projects/search-engine/solrcloudv47/solrCloudA" override="true"/>
</Context>
备注:
apache-tomcat-7.0.20-solrcloudA:solr/home的value为D:/projects/search-engine/solrcloudv47/solrCloudA;
apache-tomcat-7.0.20-solrcloudB:solr/home的value为D:/projects/search-engine/solrcloudv47/solrCloudB;
apache-tomcat-7.0.20-solrcloudC:solr/home的value为D:/projects/search-engine/solrcloudv47/solrCloudc;
2. 修改<Tomcat.home>/conf/Server.xml文件中端口:
apache-tomcat-7.0.20-solrcloudA:
<Server port="7005" shutdown="SHUTDOWN">
<Connector port="7080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="7443" />
<Connector port="7009" protocol="AJP/1.3" redirectPort="7443" />
apache-tomcat-7.0.20-solrcloudB:
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
apache-tomcat-7.0.20-solrcloudC:
<Server port="9005" shutdown="SHUTDOWN">
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="9443" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
3.分别启动这3个tomcat,测试是否能成功启动。
-------------------------------------------------------------------------------------------------------------------------------------------------
solrcloud的安装及配置
-------------------------------------------------------------------------------------------------------------------------------------------------
1. 创建Solrcloud相关目录
在D:\projects\search-engine\solrcloudv47下创建solrcloudA|solrcloudB|solrcloudC目录:
以solrCloudA为例,在solrCloudA下创建collection1和lib目录,在collections1下建立conf和data目录,
solrcloundB和solrCloudC也建立同样目录结构
2. solr基本配置:
a) 下载的SOLR的压缩包解压缩,将solr-4.7.0\example\webapps\solr.war解开,
b) 将solr-4.7.0\example\webapps\solr\WEB-INF\lib和solr-4.7.0\example\lib\ext中的jar文件
拷贝到solr-4.7.0\example\webapps\solr\WEB-INF\lib中;
c) 然后传到服务器的Tomcat下的webapps目录下。
d) 将solr-4.7.0\example\webapps\solr\WEB-INF\lib和solr-4.7.0\example\lib\ext下面的jar文件都拷贝到指定目录solrcloudA/lib/中。
e) 将solr-4.7.0\contrib目录下的jar文件拷贝到指定目录solrcloudA/lib/中。
f) 将solr-4.7.0\dist目录下的jar文件拷贝到指定目录solrcloudA/lib/中。
3. 创建solr文件(参见附件):
在<solr.home>下建立slor文件,如solrcloudA,则是在solrcloudA目录下建立,即:solrcloudA/solr.xml
在solrcloudB和solrcloudC中也建立solr.xml文件。
该文件中指定了ZooKeeper的相关配置,以及Solr Core的配置内容:
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
<cores defaultCoreName="collection1" host="${host:}" adminPath="/admin/cores" zkClientTimeout="${zkClientTimeout:15000}" hostPort="8080" hostContext="${hostContext:solr}">
</cores>
</solr>
注意:hostPort在solrcloudA中为7080;在solrCloudB中为8080;在solrCloudC中为9080;
这里,我们并没有配置任何的core元素,这个等到整个配置安装完成之后,通过SOLR提供的REST接口,来实现Collection以及Shard的创建,从而来更新这些配置文件。
------------------------------------------------------------------------------------------------------------------------------------------------
Zookeeper管理监控配置文件
------------------------------------------------------------------------------------------------------------------------------------------------
1、上solr配置文件到Zookeeper
java -classpath .;D:/projects/search-engine/solrcloudv47/solrCloudA/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381 -confdir D:/projects/search-engine/solrcloudv47/solrCloudA/collection1/conf -confname testconf
2、把将上传到zookeeper上的配置文件和目标collection联系起来
java -classpath .;D:/projects/search-engine/solrcloudv47/solrCloudA/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection collection1 -confname testconf -zkhost 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381
-confname 与第一个命令中的-confname一致
3、检查zookeeper上的存储情况:
D:\appservers\hadoop\zookeeper\zookeeperv3.4.6\zookeeperA\bin>zkCli -server localhost:2181
其中的命令为:ls / ls /configs ls /configs/testconf
-------------------------------------------------------------------------------------------------------------------------------------------------
Tomcat 配置修改
-------------------------------------------------------------------------------------------------------------------------------------------------
1、修改bin/catalina.bat
分别在apache-tomcat-7.0.20-solrcloudA
apache-tomcat-7.0.20-solrcloudB
apache-tomcat-7.0.20-solrcloudC中设置:
set JAVA_OPTS=%JAVA_OPTS% -DzkHost=127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381
这就是solr和zookeeper交互的地方。
2、启动Tomcat
分别在apache-tomcat-7.0.20-solrcloudA
apache-tomcat-7.0.20-solrcloudB
apache-tomcat-7.0.20-solrcloudC中启动 tomcat:
bin/statup.bat
3、查看zookeeper中的数据状态
D:\appservers\hadoop\zookeeper\zookeeperv3.4.6\zookeeperA\bin>zkCli -server localhost:2181
ls /live_nodes 中可以看出存在3个活跃节点。
4、访问solr,多出Cloud菜单
6、创建collectoin、shard、replication
参数说明:
name 待创建Collection的名称
numShards 分片的数量
replicationFactor 复制副本的数量
如果成功,响应内容如下:
7、查看zookeeper中的数据状态
D:\appservers\hadoop\zookeeper\zookeeperv3.4.6\zookeeperA\bin>zkCli -server localhost:2181
8、访问solr
9、查看<solr.home>/solr.xml, solr.xml的内容已自动发生了变化
D:\projects\search-engine\solrcloudv47\solrCloudA>type solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
<cores defaultCoreName="collection1" host="${host:}" adminPath="/admin/cores" zkClientTimeout="${zkClientTimeout:15000}" hostPort="9080" hostContext="${hostContext:solr}">
<core numShards="3" name="testcollection_shard3_replica1" instanceDir="testcollection_shard3_replica1" shard="shard3" collection="testcollection" coreNodeName="192.168.56.1:9080_solr_testcollection_shard3_replica1"/>
</cores>
</solr>
10、创建Replication
创建shard3的replication
http://localhost:8080/solr/admin/cores?action=CREATE&collection=testcollection&name=testcollection_shard3_replica2&shard=shard3
http://localhost:9080/solr/admin/cores?action=CREATE&collection=testcollection&name=testcollection_shard3_replica3&shard=shard3
创建Shard2的replication
http://localhost:7080/solr/admin/cores?action=CREATE&collection=testcollection&name=testcollection_shard2_replica2&shard=shard2
http://localhost:8080/solr/admin/cores?action=CREATE&collection=testcollection&name=testcollection_shard2_replica3&shard=shard2
创建Shard1的replication
http://localhost:7080/solr/admin/cores?action=CREATE&collection=testcollection&name=testcollection_shard1_replica2&shard=shard1
http://localhost:9080/solr/admin/cores?action=CREATE&collection=testcollection&name=testcollection_shard1_replica3&shard=shard1
------------------------------------------------
索引数据
------------------------------------------------
cd D:\projects\framework_refrence\searchEngine\solr\solr-4.7.0\solr-4.7.0\example\exampledocs
java -Durl=http://localhost:7080/solr/testcollection/update -jar post.jar *.xml
备注:
----------------------
如果要修改solr的data目录的位置,可以在<solr.home>/conf目录下建立solrcore.properties文件,在
solrcore.properties文件中加入如下内容
solr.data.dir=/home/hadoop/applications/storage/cloud/data
---------------------- org.apache.solr.cloud.ZkCLI的使用--------------------------
查看命令帮助:
java -classpath .;D:/projects/search-engine/solrcloudv47/solrCloudA/lib/* org.apache.solr.cloud.ZkCLI -cmd help -zkhost 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381
删除已有configs:
java -classpath .;D:/projects/search-engine/solrcloudv47/solrCloudA/lib/* org.apache.solr.cloud.ZkCLI -cmd clear /configs -zkhost 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381
------------------------删除collectoin----------------------------------------------
http://localhost:7080/solr/admin/collections?action=DELETE&name=testcollection
----------------------------删除索引------------------------------------------------------------
http://localhost:8080/solr/testcollection/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&stream.contentType=text/xml;charset=utf-8&commit=true
参考:
solrcloud,tomcat,外部zookeeper配置详解
SolrCloud 4.3.1+Tomcat 7安装配置实践