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

本套方案是在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/home</env-entry-name>
       <env-entry-value>/put/your/solr/home/here</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
   -->
    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/home/clare/soft/solr/index1</env-entry-value>
       <env-entry-type>java.lang.String</env-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的测试到此为止,运行原理之后会奉上。

时间: 2024-10-11 00:43:06

solrCloud 单机多节点部署(zookeeper3.4.6+solr4.10.4+tomcat7.0.61)的相关文章

HyperLedger Fabric 1.2 单机单节点部署(10.2)

单机单节点指在一台电脑上部署一个排序(Orderer)服务.一个组织(Org1),一个节点(Peer,属于Org1),然后运行官方案例中的example02智能合约例子,实现转财交易和查询功能.单机单节点部署结构图如下: 图:单机单节点部署结构图 单机单节点部署步骤如下:1. 创建singlepeer目录 # cd $GOPATH/src/github.com/hyperledger/fabric # mkdir singlepeer # cd singlepeer 2. 获取生成工具 把下载的

使用jekins自动构建部署java maven项目(jdk1.7+tomcat7.0+jenkins2.19.3)

1.下载jenkins 地址:https://jenkins.io/index.html 本人下载了2.19.3版本的war包:jenkins.war 2.安装jenkins 拷贝jenkins.war到tomcat的webapps文件夹下,如果tomcat是启动的,jenkins项目会自动解压启动的,如果tomcat是停止的,需要启动tomcat服务,进入bin文件夹,linux环境下执行 ./startup.sh即可启动服务,windows下双击startup.bat即可. 然后,访问地址:

Solrcloud单机伪集群部署

线上有一套双节点的Solrcloud节点,因机器性能较老,环境搭建于2013年,原节点有数百个已经被unload的collections,考虑以后可能还会需要,所以搭建一套和原节点相同的solrcloud环境,因为目前只有一台新机器,所以在一台机器上搭建Solrcloud伪双节点集群, 软件版本 JDK:jdk1.6.0_12 Tomcat:apache-tomcat-6.0.20 Zookeeper:zookeeper-3.4.5 Solr:solr-4.2.1 原节点环境信息 主机名(IP)

solr 集群(SolrCloud 分布式集群部署步骤)

SolrCloud 分布式集群部署步骤 安装软件包准备 apache-tomcat-7.0.54 jdk1.7 solr-4.8.1 zookeeper-3.4.5 注:以上软件都是基于 Linux 环境的 64位 软件,以上软件请到各自的官网下载. 服务器准备 为搭建这个集群,准备三台服务器,分别为 192.168.0.2 -- master 角色192.168.0.3 -- slave 角色192.168.0.4 -- slave 角色 搭建基础环境 安装 jdk1.7 - 这个大家都会安装

170825、SolrCloud 分布式集群部署步骤

安装软件包准备 apache-tomcat-7.0.54 jdk1.7 solr-4.8.1 zookeeper-3.4.5 注:以上软件都是基于 Linux 环境的 64位 软件,以上软件请到各自的官网下载. 服务器准备 为搭建这个集群,准备三台服务器,分别为 192.168.0.2 -- master 角色192.168.0.3 -- slave 角色192.168.0.4 -- slave 角色 搭建基础环境 安装 jdk1.7 - 这个大家都会安装,就不费键盘了. 配置主机 /etc/h

Kafka单机环境的部署

前面说过Kafka集群环境的部署,现在主要说一下在本地测试中Kafka单机环境的部署,和前面一样首先保证zookeeper服务的正常运行,然后解压并释放kafka安装包,并放到指定位置: tar -xvzf kafka_2.9.2-0.8.2.2.tar.gz mkdir /usr/kafka mv kafka_2.9.2-0.8.2.2 /usr/kafka/ cd /usr/kafka/kafka_2.9.2-0.8.2.2 现在开始编辑配置文件server.properties,执行命令:

AntShares区块链的节点部署与搭建私有链

最近陆续体验常见的区块链开源项目,例如小蚁OnChain出的AntShares.AntShares跟其他开源区块链项目不一样,他们家是使用C#开发,基于.NET Core运行在Linux,期待未来出Go语言版.... 接下来会详细讲解如何部署AntShares和搭建私有链,本文使用virtualbox + ubuntu + AntSharesCore v1.4.,参考了官方文档. 第一步,安装.net core,如果提示安装失败,则多刷"sudo apt-get update"几次:

Openstack 网络服务 Neutron计算节点部署(十)

Neutron计算节点部署 安装组件,安装的服务器是192.168.137.12 1.安装软件包 yum install -y openstack-neutron-linuxbridge ebtables ipset 2.配置文件neutron.conf 因为neutron控制节点跟计算节点配置几乎一样,直接复制控制节点的文件到计算节点,将不同的部分进行修改. scp /etc/neutron/neutron.conf [email protected]:/etc/neutron 在neutro

RDO单节点部署openstack (Havana)

OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作.OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单.可大规模扩展.丰富.标准统一的云计算管理平台.OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成. OpenStack 是一个旨在为公共及私有云的建设与管理提供软件的开源项目.它的社区拥有超过130家企业及1350位开发者,这些机构与个人都将OpenStack作为基础设施即服务(简称I