Solr 6.5.1 SolrCloud windows使用zk安装集群

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值