1. 服务器分配
-
zookeeper三台服务器,三台服务器端口分别为2181/2888/3888,2281/2898/3898,2381/2908/3908,在各自安装目录下建一个dataZookeeper作为各自的数据存放目录
-
solrCloud4台服务器,占用端口分别为:8005/8080/8009;8105/8180/8109;8205/8280/8209;8305/8380/8309。solrHome分别均位于E:\S-soft\Solr5_resp目录下
2. 搭建zookeeper伪集群环境
-
zookeeper版本使用3.4.6版本,解压缩tar包到E:\S-soft\zookeeper目录下,并更名为zookeeper_01(由于是tar包,在windows环境下需要提取两次,两次都提取到当前目录即可)
-
进入zookeeper_01目录,新建dataZookeeper文件夹,并在dataZookeeper文件夹下新建myid文件,文件内容就是"1",该文件标注当前zookeeper的节点为1
-
进入zookeeper_01的conf目录下,拷贝 zoo-sample.cfg拷贝一份并重新命名为zoo.cfg,修改的点如下:
- dataDir:将数据文件夹换成E:/S-soft/zookeeper/zookeeper_01/dataZookeeper(就是我们第二部新建的文件夹路径,这里采用了linux环境下的路径写法)
- clientPort:当前节点对外提供服务的端口号,第一个节点为2181,这里不变
- 新增server,格式为server.nodeNo=ip:host1:host2,其中nodeNo对应的是myid文件中的内容即节点的id为1,ip指的是该节点的ip地址,host1和host2指在内部选举和投票时(决定哪个是leader,哪个是follwer)使用的端口号
dataDir=E:/S-soft/zookeeper/zookeeper_01/dataZookeeper
# the port at which the clients will connect
clientPort=2181
server.1=192.168.4.41:2888:3888
server.2=192.168.4.41:2898:3898
server.3=192.168.4.41:2908:3908
-
拷贝zookeeper_01目录,并将后缀名01改成02:同时修改节点2的myid文件为2,zoo.cfg文件中dataDir为E:/S-soft/zookeeper/zookeeper_02/dataZookeeper,clientPort为2281,
-
同4操作创建第三个节点。
-
启动zookeeper服务,windows环境下直接使用bin/zkServer.cmd,在linux环境下使用bin/zkServer.sh start。在windows环境下先启动第一个节点时,应该会一直报错,可以不用管,这是因为其他两个节点还没有启动。linux环境下如果不出问题,直接会输出STARTED
- 启动zookeeper的客户端,此时需要保持zookeeper处在启动中(挂掉一台也无所谓),bin/zkCli.cmd(linux环境下bin/ziCli.sh)
4. solr单机环境搭建
- solr单机环境搭建这里不介绍了,最终搭建出来如下(四个单机均包含一个_BlankCore的实例,也已经配置好ik中文分词器)
- solr_01:
solrHome:E:\S-soft\Solr5_resp\solrHome\solr_01
tomcat:E:\S-soft\tomcat8\apache-tomcat-8.0.33-solrCloud01\apache-tomcat-8.0.33
tomcat/conf/server.xml:8005,8080,8009
- solr_02:
solrHome:E:\S-soft\Solr5_resp\solrHome\solr_02
tomcat:E:\S-soft\tomcat8\apache-tomcat-8.0.33-solrCloud02\apache-tomcat-8.0.33
tomcat/conf/server.xml:8105,8180,8109
- solr_03:
solrHome:E:\S-soft\Solr5_resp\solrHome\solr_03
tomcat:E:\S-soft\tomcat8\apache-tomcat-8.0.33-solrCloud03\apache-tomcat-8.0.33
tomcat/conf/server.xml:8205,8280,8209
- solr_04:
solrHome:E:\S-soft\Solr5_resp\solrHome\solr_04
tomcat:E:\S-soft\tomcat8\apache-tomcat-8.0.33-solrCloud04\apache-tomcat-8.0.33
tomcat/conf/server.xml:8305,8380,8309
- 启动后如下:选中_BlankCore这个collection,Analysis选项中,是可以找到content-ik域和text-ik域类型,使用这个可以进行中分分词测试
5. solrCloud集群搭建
- 上传配置文件到zookeepeer,将配置文件交给zookeeper统一管理,这里我们将solr01下的conf上传上去,然后可以使用zookeeper查看上传后的文件
//windows下命令如下
java -classpath E:\S-soft\tomcat8\apache-tomcat-8.0.33-solrCloud01\apache-tomcat-8.0.33\webapps\solr\WEB-INF\lib/* org.apache.solr.cloud.ZkCLI -zkhost 192.168.4.41:2181,192.168.4.41:2281,192.168.4.41:2381 -cmd upconfig -confdir E:\S-soft\Solr5_resp\solrHome\solr_01\_BlankCore\conf -confname mySolrCloudCon
//linux下命令如下(注意在-classpath下稍微有点区别):
java -classpath .:/opt/tomcat/apache-tomcat-8.0.23/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -zkhost 192.168.102.102:2181,192.168.102.103:2181,192.168.102.104:2181 -cmd upconfig -confdir /var/solrData/solr/SolrHome/collection1/conf -confname mySolrCloudCon
- zkhost:当前是zookeeper对外提供服务的地址和端口了
- cmd upconfig就是上传配置文件
- confdir :待上传配置文件的目录
- confname :上传后dir的命令
- 修改solr.xml文件(位于solrHome目录下)
- host:改成当前solr实例的ip地址
- hostPort:当前实例提供服务的端口
<str name="host">${host:192.168.4.41}</str>
<int name="hostPort">${jetty.port:8380}</int>
- 配置solr实例的zookeeper的位置:修改每台solr的tomcat的bin目录下的catalina.bat(linux下自然是catalina.sh)文件中加入zookeeper服务器地址:
//windows环境下
set JAVA_OPTS="-DzkHost=192.168.4.41:2181,192.168.4.41:2281,192.168.4.41:2381"
//linux环境下
JAVA_OPTS="-DzkHost=192.168.102.102:2181,192.168.102.103:2181,192.168.102.104:2181"
- 重启tomcat:原来没有cloud这个选项的,现在有了,在Graph中可以看到_BlankCore实例,只有一个分片(shard),主节点为192.168.4.41:8381这个主机上的节点,其他几个是辅助节点。可以尝试停掉其中一个或者两个节点试试。我们可以尝试在某个节点上添加索引,然后在其他节点上尝试查询,看看是否已经同步!这里也有一些其他的信息,比如配置等等
- 创建新的collection(两个分片,每个分片一主一备[刚好就是4台服务器]):numShards就是分片的数量,replicationFactor是每一个分片的节点数
http://192.168.4.41:8080/solr/admin/collections?action=CREATE&name=shardCollection01&numShards=2&replicationFactor=2
注意注意下,_BlankCore,有个节点状态为Gone,这是因为我最开始在配置时,将某个solr的中的host配错了~~