热门标签 | 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)


推荐阅读
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 将解压缩版Tomcat集成至系统服务
    将解压缩版Tomcat集成至系统服务的方法如下:首先,在命令行中导航至Tomcat的`bin`目录,运行`service.bat install`命令以安装服务。需要注意的是,服务名称和显示名称已在`service.bat`脚本中预设,默认情况下会随不同版本有所变化。此外,建议检查并配置相关参数,确保服务能够稳定运行。 ... [详细]
  • Vi编辑器的工作模式有哪些?如何在不同模式间切换?
    Vi编辑器是Linux系统中常用的文本编辑工具,具备三种主要工作模式:命令模式、插入模式和底行模式。用户可以通过特定的按键组合在这些模式之间进行切换,以实现不同的编辑功能。例如,在命令模式下,用户可以执行移动光标、删除文本等操作;而在插入模式下,则可以输入或修改文本内容。底行模式则用于执行保存文件、退出编辑器等命令。 ... [详细]
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社区 版权所有