您的位置:首页 > 其它

Solr 6.5.1 SolrCloud windows使用zk安装集群

2017-05-22 18:40 507 查看
SolrCloud是基于Solr和Zookeeper的分布式搜索方案,也是Solr5 的核心组件之一,它的主要思想是使用Zookeeper作为集群的配置信息中心。它有几个特色功能:

1)集中式的配置信息

2)自动容错

3)近实时搜索

4)查询时自动负载均衡 。

基本可以用下面这幅图来概述,这是一个拥有4个Solr节点的集群,索引分布在三个Shard里面,每个Shard包含三个Solr节点,一个是Leader节点,另外两个是Replica节点,此外集群中有一个负责维护集群状态信息的Overseer节点,它是一个总控制器。集群的所有状态信息都放在Zookeeper集群中统一维护。从图中还可以看到,任何一个节点都可以接收索引更新的请求,然后再将这个请求转发到文档所应该属于的那个Shard的Leader节点,Leader节点更新结束完成,最后将版本号和文档转发给同属于一个Shard的replicas节点。
具体节点信息我们在后续进入Zookeeper管理节点查看。




黑色是主节点

使用工具 zookeeper-3.5.1-alpha.tar.gz

一、创建目录结构如下





二、修改 zookeeper

1、复制 solrCloud\service1\zookeeper-3.5.1-alpha\conf 下的zoo_sample.cfg 重命名为:zoo.cfg 编辑内容如下

initLimit=5
syncLimit=2
clientPort=2181
tickTime=2000
dataDir= D:\\MayBe\\solrCloud\\service1\\data
dataLogDir= D:\\MayBe\\solrCloud\\service1\\datalog
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890


配置里不要有空格

initLimit=集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。

syncLimit= 集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数。

clientPort= 端口

tickTime= Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔。

dataDir= 数据目录地址

dataLogDir= 数据日志地址

server.1=集群信息(服务器编号,服务器地址,LF通信端口,选举端口)

每个service都重复此操作,不同的service设置不同的clientPort和对应的dataDir,dataLogDir

2、 在data目录新建myid文件(该文件没有后缀文件类型),并写入值(文件中写入一个数字,每台zk不能重复,代表zk的唯一性,在zoo.cfg 中需要配置到)



3、 启动zk分别进入 D:\MayBe\solrcloud\service1\zookeeper-3.5.1-alpha\bin,D:\MayBe\solrcloud\service2\zookeeper-3.5.1-alpha\bin,D:\MayBe\solrcloud\service3\zookeeper-3.5.1-alpha\bin 双击 zkServer.cmd启动,启动过程中由于集群未完全正常启动,会报连接错误,可以暂时不管。 zkServer.sh status(查看状态)

4、安装tomcat:从之前的复制过来,tomcat1-4都要复制



5、编辑每个tomcat中solr项目的web.xml文件, 找到env-entry节点,编辑为以下内容

<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:\MayBe\solrCloud\solr_home1</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>


(solr的用户目录,用于存储索引等,每个tomcat需要不一样的路径:home1-4)

6、添加solr_home 内容



7、修改tomcat的\conf下的server.xml

tomcat1

<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
<Connector port="8009" protocol="AJP/1.3"


tomcat2

<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8082" protocol="HTTP/1.1"
<Connector port="8010" protocol="AJP/1.3"


tomcat3

<Server port="8007" shutdown="SHUTDOWN">
<Connector port="8083" protocol="HTTP/1.1"
<Connector port="8011" protocol="AJP/1.3"


tomcat4

<Server port="8008" shutdown="SHUTDOWN">
<Connector port="8084" protocol="HTTP/1.1"
<Connector port="8012" protocol="AJP/1.3"


8、修改solr.xml

修改成你当前的tomcat的运行端口,每个solr_home对应的tomcat端口不一样,当然是在伪集群的情况下,如果你是多台机器的话请忽略

修改solr_home1 下的solr.xml

solr_home1

<int name="hostPort">${jetty.port:8081}</int>


solr_home2

<int name="hostPort">${jetty.port:8082}</int>


solr_home3

<int name="hostPort">${jetty.port:8083}</int>


solr_home4

<int name="hostPort">${jetty.port:8084}</int>


9、新建配置文件目录(用于zk的集群配置管理)

我是直接在solr_home1中新建一个collection1文件夹,如下:

..\solr_home1\collection1(此文件夹只需要建一个,不需要在每个机器上建,他会通过zk分发到各个机器)

将solr原包中../solr/server/solr/configsets/basic_configs/* 拷贝到 ../solr_home1/collection1/ 下。



10、修改tomcat的文件catalina.bat文件

一台添加:

set JAVA_OPTS=-Dsolr.solr.home=D:/MayBe/solrcloud/solr_home1 -Dbootstrap_confdir=D:/MayBe/solrcloud/solr_home1/collection1/conf -

Dcollection.configName=myconf -DnumShards=3 -DzkHost=localhost:2181,localhost:2182,localhost:2183



DnumShards=3 分片

其它添加: set JAVA_OPTS=-Dsolr.solr.home=D:/MayBe/solrcloud/solr_home2 -DzkHost=localhost:2181,localhost:2182,localhost:2183

solr_home位置修改成对应的

11、 依次启动tomcat

12、测试访问集群

http://localhost:8081/solr/index.html

13、创建一个solr的collection

http://localhost:8081/solr/admin/collections?action=CREATE&name=core1&numShards=3&replicationFactor=3&maxShardsPerNode=3&collection.configName=myconf

numShards=分片数

replicationFactor=复制分片个数

maxShardsPerNode= 最大分片数

14、查看solrCloud



15、solrj 进行solrCloud 添加索引

package com.solr.solrCloud;

import org.apache.solr.client.solrj.impl.CloudSolrClient;

public class CloudSolrServer {

public static CloudSolrClient server = null;

public static CloudSolrClient getServer() {
final String zkHost = "localhost:2181,localhost:2182,localhost:2183";
final String defaultCollection = "core1";
final int zkClientTimeout = 20000;//zk客户端超时时间
final int zkConnectTimeout = 1000;//zk连接超时时间
server = new CloudSolrClient(zkHost);
System.out.println("The Cloud SolrServer Instance has benn created!");
server.setDefaultCollection(defaultCollection);
server.setZkClientTimeout(zkClientTimeout);
server.setZkConnectTimeout(zkConnectTimeout);
server.connect();
return server;
}

public static void main(String[] args) {

}

}


package com.solr.solrCloud;

import java.util.ArrayList;
import java.util.Collection;

import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.common.SolrInputDocument;

public class CloudSolrTest {

public static void addIndex() throws Exception {
CloudSolrClient server = CloudSolrServer.getServer();
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField("id", 1);
doc1.addField("name_s", "中国人");
SolrInputDocument doc2 = new SolrInputDocument();
doc2.addField("id", 2);
doc2.addField("name_s", "美国人");
SolrInputDocument doc3 = new SolrInputDocument();
doc3.addField("id", 3);
doc3.addField("name_s", "中大国人");

Collection<SolrInputDocument> coll = new ArrayList<SolrInputDocument>();
coll.add(doc1);
coll.add(doc2);
coll.add(doc3);
server.add(coll);
server.commit();
}

public static void main(String[] args) throws Exception {
addIndex();
}

}


其他删改查都一样,就server连接方式不同,这里就不一一列举了

15、删除core

http://localhost:8081/solr/admin/collections?action=DELETE&name=core1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息