热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

solrCloud单机多节点部署(zookeeper3.4.6+solr4.10.4+tomcat7.0.61)

本套方案是在linux单主机上部署多个solr节点,最终达到solrCloud的效果。先展示下solrCloud单机部署的效果:在solrCloud上已经创建了两个collecti

本套方案是在linux单主机上部署多个solr节点,最终达到solrCloud的效果。先展示下solrCloud单机部署的效果:

技术分享

在solrCloud上已经创建了两个collection。

接下来就说说这个部署过程:

首先创建一个solrcloud目录,用于存放solrCloud所有相关的软件和配置。

1.下载安装zookeeper

按理来说需要多节点部署zookeeper,由于这个工作比较简单,需要的可以从网络上的其他地方搜索部署。本次使用单节点zookeeper,测试使用环境足以。当下载解压zookeeper之后,进入zookeeper目录,执行以下指令:

./bin/zkServer.sh start

所有的zookeeper日志都会存储到./bin/zookeeper.out中

2.下载配置solr-4.10.4和tomcat7.0.61

都解压完毕之后:

将solr-4.10.4/example/webapps/solr.war再解压到tomcat/webapps/solr目录下

unzip solr-4.10.4/example/webapps/solr.war tomcat/webapps/solr

将log4j配置文件和jar包拷贝到tomcat下

cp solr-4.10.4/example/lib/ext/* tomcat/webapps/solr/WEB-INF/lib/

mkdir -p tomcat/webapps/solr/WEB-INF/classes/
cp solr-4.10.4/example/resources/log4j.properties tomcat/webapps/solr/WEB-INF/classes

将配置文件上传到zookeeper中,用于集群共享配置:主要就是solrConfig.xml和schema.xml这两个文件。

上传需要用到solr自带的zookeeper工具包,将这些工具复制到自己的工具文件中。

cp -r  solrcloud/tomcat/webapps/solr/WEB-INF/lib/* solrcloud/solr-lib

我们需要用到的其实就是org.apache.solr.cloud.ZkCLI这个类

将需要上传的配置文件也单独存到solrcloud目录下

cp -r solrcloud/solr-4.10.4/example/solr/collection1/conf/*  solrcloud/config-files

将这些配置文件上传到zookeeper

java -classpath solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 172.20.5.161:2181 -confdir solrcloud/config-files/ -confname solrconf

可以使用zookeeper自带的客户端查看下zookeeper上的数据

zookeeper-3.4.6/bin/zkCli.sh -server 172.20.5.161:2181

可以看到solr集群配置数据已经存在

技术分享

将zookeeper上的solrconf配置文件关联到zookeeper的collection目录

java -classpath solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection mycollection -confname solrconf -zkhost 172.20.5.161:2181
以上步骤已经将配置文件部署完毕
接下去需要配置tomcat中的solr了:
将solrcloud目录下创建index1目录,作为索引存放处。在index1目录下创建solr.xml文件,作为节点1的配置。solrcloud/index1/solr.xml的内容如下:
xml version="1.0" encoding="UTF-8" ?>
<solr persistent="true">
  <cores host="172.20.5.161" adminPath="/admin/cores" zkClientTimeout="${zkClientTimeout:15000}" hostPort="8080" hostContext="${hostContext:solr}">
solr>

*这里的hostPort需要和tomcat对外的端口地址一致

将这个文件的位置写入到tomcat的solr应用中。

tomcat/webapps/solr/WEB-INF/web.xml文件中找到env-entry标签,启用它,配置如下:


    <env-entry>
       <env-entry-name>solr/homeenv-entry-name>
       <env-entry-value>/home/clare/soft/solr/index1env-entry-value>
       <env-entry-type>java.lang.Stringenv-entry-type>
    env-entry>

将env-entry-value替换为你index1所在目录就可以。

现在可以准备运行了,运行前先将tomcat启动参数配置下,tomcat/bin/catalina.sh:

*注意是脚本第一行,不是最后一行

#!/bin/sh
export JAVA_OPTS="-DzkHost=172.20.5.161:2181"

第一个节点就此配置完毕,等待启动。

===============================

接下来配置第二和第三节点:

复制tomcat目录两份到当前目录,命名为tomcat-2和tomcat-3

复制index1目录两份到当前目录,命名为index2和index3

这样下来,你的目录应该是如下

技术分享

首先修改tomcat2/conf/server.xml文件

需要修改的部分为将所有的port的数值+1,使其与tomcat第一个节点不一致。同理第三个节点也是如此修改。

然后修改tomcat2/webapps/solr/WEB-INF/web.xml

将env-entry-value的值替换为index2的路径

最后修改index2中的solr.xml文件

将这里的hostPort改为tomcat2中的conf/server.xml文件的connector port一致

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />

开始启动三个节点:

在每个tomcat目录下执行bin/catalina.sh start指令。

然后在浏览器输入机器ip:port/solr就可以看到控制面板了

这时cloud目录下没有数据,需要创建一个collection

在浏览器中地址栏输入创建指令,可以知道创建索引成功:

http://172.20.5.161:8080/solr/admin/collections?action=CREATE&name=secondIndex&numShards=3&replicationFactor=1

技术分享

然后在控制面板中可以看到新创建的索引了:

技术分享

接下来需要往solrcloud传点数据:

切到目录/solr-4.10.4/example/exampledocs下,执行以下指令,会将一些例子文档全部传到solrcloud创建索引

java -Durl=http://172.20.5.161:8080/solr/secondIndex/update -jar post.jar ./*

然后在控制面板中进行搜索测试:

技术分享

这样整套solrCloud就基本搭建成功了。

再来试下java sdk:

写了一个solrCloudHelper.java进行测试:

import java.io.IOException;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CloudSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.clare.exception.SolrCloudAddDocException;
import com.clare.exception.SolrCloudSearchException;

public class SolrCloudHelper {
    private final static Logger logger = LoggerFactory
            .getLogger(SolrCloudHelper.class);
    private final static String zkHostString = "172.20.5.161:2181";// 这里不能用localhost,要与config文件中一致
    private CloudSolrServer server = null;

    public  SolrCloudHelper() {
        server = new CloudSolrServer(zkHostString);
        server.setDefaultCollection("secondIndex");
        server.connect();
    }

    public CloudSolrServer getServer() {
        return server;
    }

    public void addDoc(SolrInputDocument doc) throws SolrCloudAddDocException {
        try {
            server.add(doc);
        } catch (Exception e) {
            throw new SolrCloudAddDocException(e);
        }
    }

    public SolrResponse search(SolrQuery query) throws SolrCloudSearchException {
        try {
            return server.query(query);
        } catch (SolrServerException e) {
            throw new SolrCloudSearchException(e);
        }
    }

    public void addDoc() throws SolrServerException, IOException {
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", "1234");
        doc.addField("name", "A lovely summer holiday dong dong");
        server.add(doc);
        server.commit();
    }

    public void docSearch() throws SolrServerException {
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.set("q", "holiday dong");
        QueryResponse response = server.query(solrQuery);
        SolrDocumentList list = response.getResults();
        System.out.println("hit doc number: " + list.getNumFound());
        for (SolrDocument doc : list) {
            System.out.println(doc.get("id") + "--->"
                    + (String) doc.get("name"));
        }

    }
    public static void main(String[] args) {
        SolrCloudHelper helper = new SolrCloudHelper();
        try {
            helper.addDoc();
            helper.docSearch();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

先执行addDoc(),

然后再执行doCSearch():

技术分享

至此,solrCloud的测试到此为止,运行原理之后会奉上。

solrCloud 单机多节点部署(zookeeper3.4.6+solr4.10.4+tomcat7.0.61)


推荐阅读
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
author-avatar
林韵杰64833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有