在前一篇中,已经分享了 solr 与tomcat 的集成, 下面继续分享,在单机环境下搭建集群,由于前一篇 solr 的一些东西都是放在tomcat 中,这篇文章将一些东西与tomcat 分离开来,便于维护
一:环境准备
1:tomcat7
二:环境搭建
One: tomcat 配置(路径:D:\solr\apache-tomcat-7.0.40 - 9091)
1:解压tomcat,并重命名为apache-tomcat-7.0.40 - 9091, 同时在复制两份,分别命名为:
apache-tomcat-7.0.40 - 9092 apache-tomcat-7.0.40 - 9093
2: 修改tomcat 启动端口号,具体怎么修改 可以百度,只要修改 server.xml 3处地方即可
3: 同时启动tomcat 看看是否都配置成功
Two:solr 配置(solr 解压路径:D:\solr\solr-5.3.1)
1:新建solr_home_1 文件夹(路径:D:\solr\solr_home_1),并在此目录下创建 home 和server 文件夹
2:把D:\solr\solr-5.3.1\example\example-DIH\solr 下的 solr文件夹和solr.xml 复制到D:\solr\solr_home_1\home 下面去
3: 把D:\solr\solr-5.3.1\server\solr-webapp下的webapp目录复制到D:\solr\solr_home_1\server 文件夹下,并将webapp 更名为solr
4:修改D:\solr\solr_home_1\server\solr\WEB-INF\web.xml 新增solr/home 的值(大概在47行下新增)
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:/solr/solr_home_1/home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
5:在D:\solr\solr_home_1\server\solr\WEB-INF 目录下创建classes 文件夹 ,把D:\solr\solr-5.3.1\example\resources\log4j.properites文件复制到classes目录下。
6:修改D:\solr\apache-tomcat-7.0.40 - 9091\conf\server.xml 指向solr服务路径。 在host 节点下新增(这里不知道的可以百度,tomcat 设置虚拟目录)
<Context path="/solr" docBase="D:/solr/solr_home_1/server/solr">
</Context>
7:将D:\solr\solr-5.3.1\dist 和D:\solr\solr-5.3.1\server\lib\ext 下的jar包 复制到 D:\solr\solr_home_1\server\solr\WEB-INF\lib 下
8: 启动tomcat 访问http://localhost:9091/solr/ 查看是否成功
Three:配置多tomcat+solr
1: 将sorl_home_1 同样复制2份,分别命名为:sorl_home_2 ;sorl_home_3
2:修改D:\solr\solr_home_2\server\solr\WEB-INF\web.xml 新增solr/home 的值(大概在47行下新增)
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:/solr/solr_home_2/home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
3:sorl_home_3 中的也同样修改一下
4:修改 apache-tomcat-7.0.40 - 9092 和 apache-tomcat-7.0.40 - 9093 下的 server.xml (对应上面的第6步,增加Context 节点,)
如:
<!--apache-tomcat-7.0.40 - 9092-->
<Context path="/solr" docBase="D:/solr/solr_home_2/server/solr">
</Context>
<!--apache-tomcat-7.0.40 - 9093-->
<Context path="/solr" docBase="D:/solr/solr_home_3/server/solr">
</Context>
5: 验证是否成功, 同时启动3个tomcat, ,是否能访问到solr
http://localhost:9091/solr/
http://localhost:9092/solr/
http://localhost:9093/solr/
三: 配置 zookeeper 集群
1: 解压zookeeper3.4.6 到D:\solr(解压后路径:D:\solr\zookeeper3.4.6)
2:复制刚刚解压的zookeeper3.4.6 更名为zookeeper-1 并在目录下新建 data 跟datalog 文件夹(D:\solr\zookeeper-1\data 跟D:\solr\zookeeper-1\datalog)
3:把D:\solr\zookeeper-1\conf\zoo_sample.cfg 修改为zoo.cfg ,并写入配置参数
dataDir=D:/solr/zookeeper-1/data
dataLogDir=D:/solr/zookeeper-1/logs
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
如下图:
4: 在D:/solr/zookeeper-1/data 目录下新建文件 myid ,不需要后缀名 ,并在文件中写入数字 1保存
5:把zookeeper-1 文件同样复制两份,更名为:zookeeper-2;zookeeper-3 ,然后修改 下面的zoo.cfg 文件,跟修改1 的一样
dataDir=D:/solr/zookeeper-2/data
dataLogDir=D:/solr/zookeeper-2/logs
clientPort=2281
server.1=127.0.0.1:2788:3788
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2988:3988
dataDir=D:/solr/zookeeper-3/data
dataLogDir=D:/solr/zookeeper-3/logs
clientPort=2381
server.1=127.0.0.1:2788:3788
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2988:3988
并且修改每个data 下的myid 文件的内容, zookeeper-1是1, zookeeper-2是2,zookeeper-3是3
6:启动 三个zookeeper ,可以直接点击D:\solr\zookeeper-1\bin\zkServer.cmd 文件启动,也可以通过cmd 去启动;
注意, 启动第一台的时候会有异常,不用去管,后面都启动后就好了,下面是第一台启动异常图:
四:搭建tomcat+solr5.3.1+zookeeper 集群
1: 上面 tomcat+solr 也能正常访问了, zookeeper 也可以正常启动了,下面就要把他们给关联起来 , solrCloud 的所有配置都需要zookeeper 的统一管理
2: 将需要的配置库几种放到一个目录中去
创建 cloud_conf 文件夹(目录:D:\solr\cloud_conf) ,将
D:\solr\solr-5.3.1\server\solr\configsets\sample_techproducts_configs\conf 下的所有文件复制到 D:\solr\cloud_conf 下面去
3:配置zookeeper 路径
在D:\solr\apache-tomcat-7.0.40 - 9091\bin\catalina.bat文件中 ,添加下面代码
set JAVA_OPTS=-Dbootstrap_confdir=D:/solr/cloud_conf -Dcollection.configName=myconf -DzkHost=127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381 -DnumShards=3
注意: 这里是没有引号的,有的文章上写的有引号,坑了我好久没成功
配置参数解释:
-DzkHost是用来指定zookeeper服务器的ip和端口。
-Dnumshareds=3 用来指定当前集群中分片数为3
-Dcollection.configName 是在指定你的配置文件上传到zookeeper后的名字,省略这个参数将导致配置名字为默认的“configuration1”
-Dbootstrap_confdir :zooKeeper需要准备一份集群配置的副本,所以这个参数是告诉SolrCloud这些 配置是放在哪里。同时作为整个集群共用的配置文件。可以看作是第一份solr配置。因为后续我们可以通过上传,来实现多collection。
-----其余tomcat 下的catalina.bat 设置:
set JAVA_OPTS="-DzkHost=127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381"
如下图:
4:修改D:\solr\solr_home_1\home,D:\solr\solr_home_2\home,D:\solr\solr_home_3\home下的solr.xml 新增如下代码
<solrcloud>
<str name="host">${host:}</str>
<!--设置成对应的tomcat 端口号-->
<int name="hostPort">9091</int>
<str name="hostContext">${hostContext:solr}</str>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
<int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:600000}</int>
<int name="connTimeout">${connTimeout:60000}</int>
</shardHandlerFactory>
5:重启tomcat ,访问http://localhost:9091/solr/ ,能正常访问, 且菜单中出现cloud 选项,说明配置成功。
6:接下来分别从Core Admin创建一个Core ,(当collection 名称一样的core ,索引是通用的)
五: zookeeper 常用命令
1:通过 rest 接口 来创建 collection
localhost:9091/solr/admin/collections?action=CREATE&name=mycollection1&numShards=3&replicationFactor=1
2:上传另一份collection配置文件 ,在window cmd模式:
java -classpath .;D:/solr/solr_home_1/server/solr/WEB-INF/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:/solr/cloud_conf -confname mycollection2
命令说明:
上传(upconfig) 到指定的服务(-zkhost 27.0.0.1:2181, 127.0.0.1:2281, 127.0.0.1:2381) 配置文件路径(-confdir):D:/solr/cloud_conf。 配置名称(-confname)为: mycollection2
注: 要添加D:/solr/solr_home_1/server/solr/WEB-INF/lib/* cmd才能识别 org.apache.solr.cloud.ZkCLI 的命令。
--成功以后 ,强刷页面, 会出现如图:
3: 删除 collection
java -classpath .;D:/solr/solr_home_1/server/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd clear /configs/mycollection1 -zkhost 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381
删除以后,刚刚创建的collection 没有了,如图所示
3: 删除 所有 collection
java -classpath .;D:/solr/solr_home_1/server/solr/WEB-INF/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