首页 > 其他分享 >ZooKeeper(外部)实例 + SolrCloud(tomcat)实例

ZooKeeper(外部)实例 + SolrCloud(tomcat)实例

时间:2023-08-11 15:36:49浏览次数:48  
标签:zookeeper 8080 tomcat SolrCloud ZooKeeper 实例 服务器 solr


Solr学习(三) 单独ZooKeeper(外部)实例 + SolrCloud(tomcat)实例


博客分类:


solr4.2.0 ZooKeeper Solr SolrCloud 



开场白:

简单讲述如何配置独立的外部 ZooKeeper 集群管理组件来管理 solr集群(多实例solr)

本章建立在 Solr学习(一)  、Soer学习(二)基础上进行配置。

 声明:描述的比较笼统繁琐,有偏差的地方请大家毫不留情的拍砖

完成目标: 

单zookeeper(独立)实例 + 多solr-4.2.0(tomcat)实例集群管理。

 

前期准备: 

1、下载ZooKeeper-3.4.5.tar.gz解压。

2、完成Solr-4.2.0+Tomcat6.0环境部署(如果为完成请参考Solr学习一

 

名词解释:

8080服务器:下文统称端口为8080的Tomcat6.0服务器。

9090服务器:下文统称端口为9090的Tomcat6.0服务器。

ZooKeeper:下文指ZooKeeper的项目根目录(解压后的目录,尽量不要放在中文目录中)如下图


 开始生产:

    步骤1:在 ZooKeeper目录“D:\zookeeper-3.4.5\conf”找到“zoo_sample.cfg”文件(将其备份一下),改名为“zoo.cfg”,打开它(最好用UE打开!防止乱码!)修改里头内容为(原本很多注释。都被我干掉了!因为哥有强迫症 +_+!!)

1. initLimit=10
2. syncLimit=5
3. dataDir=D:/zookeeper-3.4.5/temp  
4. clientPort=2181

这里我们要改的是第四个配置 “dataDir”(数据文件的路径)自己设定吧。我是放在ZooKeeper下新建一个文件夹“temp”。

步骤2:

找到“ZooKeeper\\bin”目录的“zkServer.cmd”文件。 双击启动。。。。启动没有报错,说明OK。 

步骤3:

现在开始搞多个solr 实例配置,(分别有多个tomcat 每个tomcat带起1个solr实例)

之前我们配置过tomcat6.0下启动单一solr实例(详见:solr学习一),目前配置多实例(solr+tomcat)  就要解决TOMCAT端口冲突问题。 这里我不多做介绍。我的做法是打开tomcat的startup.bat 文件。  把里头的所有变量都加上2 。

例如: 

1. set "CURRENT_DIR=%cd%"
2. if not "%CATALINA_HOME%" == ""

改成 


1. set "CURRENT_DIR2=%cd%"
2. if not "%CATALINA_HOME2%" == ""


还有server.xml 里头的端口,我这里把常用的 8080改成 9090了,8443改成 9443  反正各种变9.  只要不冲突!只要你记得你改了多少就成!这里自己折腾吧。

 

步骤4:

    偷懒!把原先“8080服务器”根目录下的solrapp文件夹拷贝到“9090服务器”根目录下。(如果没看之前文章的朋友,这里解释一下“solrapp”是solr-work目录,是我们后来自己建立的文件夹。详见:solr学习一 )

同样,把“8080服务器下”“webapps”里头的“solr ”文件夹也拷贝到 “9090服务器”的同样目录 “webapps”里。 

 

步骤5:

    此时要在“9090服务器”上建立jndi指引文件,到“E:\apache-tomcat-6.0.35.9090\conf\Catalina\localhost”下新建“solr.xml”文件(也可以直接去“8080服务器”那边拷贝过来)然后写入内容

 



1. <?xml version="1.0" encoding="UTF-8"
2. <Context docBase="E:/apache-tomcat-6.0.35.9090/webapps/solr.war" debug="0" crossContext="true"
3. "solr/home" type="java.lang.String" value="E:/apache-tomcat-6.0.35.9090/solrapp/solr" override="true"
4. </Context>

  XML注意: docBase 与 value 两个值根据自己的路径不同做改变, 前者是war包的位置,后者是刚刚自己建立的solrapp目录位置的solr文件夹。

步骤6:

    打开“8080服务器”路径“E:\apache-tomcat-6.0.35\solrapp\solr”找到项目内的“sor.xml”打开找到“cores”节点。改为如下配置。 


    1. <cores adminPath="/admin/cores" defaultCoreName="collection1" host="localhost" hostPort="8080" hostContext="solr" zkClientTimeout="${zkClientTimeout:15000}">
    2. <core name="collection1" instanceDir="collection1" />
    3. </cores>


        (同上)打开“9090服务器”路径“E:\apache-tomcat-6.0.35\solrapp\solr”找到项目内的“sor.xml”打开找到“cores”节点。改为如下配置

    1. <cores adminPath="/admin/cores" defaultCoreName="collection1" host="localhost" hostPort="9090" hostContext="solr" zkClientTimeout="${zkClientTimeout:15000}">
    2. <core name="collection1" instanceDir="collection1" />
    3. </cores>


    上注意面2个solr.xml 并不是  tomcat\conf\Catalina\localhost目录下的。而是在 \solrapp\solr目录下的。请别弄错了。 xml中defaultCoreName值如果你之前有改变solr的配置,请自行更改,否则照抄我代码, host是ip地址,hostPort则为端口,2个tomcat的端口不一样。注意!

     

    步骤7:

          既然是集群,要选举一个默认的solr老大对吧。(关于zookeeper选举老大的原则后续在说) 

    哈哈。 我指定“8080服务器”的“solr”服务为默认老大。

    打开“8080服务器”目录下的bin目录,“E:\apache-tomcat-6.0.35\bin”找到文件“catalina.bat”编辑它(再次建议用UE打开,注意文件编码)在文件第二行加入

     


      1. Set JAVA_OPTS=-Dbootstrap_confdir=../solrapp/solr/collection1/conf -Dcollection.configName=clusterconf -DzkRun -DzkHost=localhost:2181 -DnumShards=1


      注意黄色字体部分。需要根据个人情况不同做不同配置。  

      “../solrapp/solr/collection1/conf”这个就是 “E:/apache-tomcat-6.0.35.8080/solrapp/solr/collection1/conf”的后半段。自己看清楚啦。

       然后开始分配小弟(目前刚做老大,只有一个小弟跟着)“9090服务器”是小弟“catalina.bat”文件。第二行加入(别弄错了是9090的文件。)

       



      1. set JAVA_OPTS= -DzkHost=localhost:2181

          只要指明zookeeper的路径位置即可。(如果你有很多个小弟。你其他小弟也这么配。)


       

       

      此时完成了配置了。

       

      测试阶段:

      我们测试下!~首先打开zookeeper服务,再分别打开 8080 和 9090 tomcat 服务(注意要先打开zookeeper服务,后开tomcat)。之后IE里头输入 http://localhost:8080/solr


       

       

      出现以上图就OK了。  完成~

      此时我们关掉其中的一个服务。。 我关了8080服务(废了老大)。 此时我们打开 9090服务地址。

      http://localhost:9090/solr


       发现此时 8080已经 gone了。   现在9090暂时变成了老大

       

      目前为止。 单zookeeper和多solr的配置已经完成了。

       

      小贴士(加入你在启动时候发现,只看到一个solr服务。说明配置有问题,此时修改配置后,需要删除zookeeper的数据文件。  还记得吗? 数据文件地址在  X:\zookeeper-3.4.5\conf 下的zoo.cfg里头写着呢。   打开看看吧。  其实zookeeper是可以自动横向扩容的。 只是这里没配置。  )

       

       

       

       

       


      分布式搜索Solrcloud启动配置详解

      震秦 发布于 1年前,共有 10 条评论


      Solrcloud是Apache关于Solr分布式搜索的一个解决方案.前面我介绍过Katta,测试发现了很多问题,我还是不敢在公司的项目上使用,毕竟公司都是商业性质的,业务不是那么简单,压力也不小.刚好最近的Solr4.0经过2年Bata终于正式版了,我有理由试一试.

      先说一下我为什么那么关心Katta,Solrcloud这样的分布式解决方案,因为我们的索引大小已经5.86GB了,而且运行在单台机器上,没有索引备份,备份也是手工备份的.而且机器配置是16核心CPU,8G内存.上面还跑着一个Oracle,分给我的内存大小就在3-4G.我们急需要一个分布式搜索的解决方案.

       

      solrcloud的安装和配置在洞庭散人的blog上有介绍: 

      感谢洞庭散人,但是他也是在solr中携带的example上演示solrcloud的.下载solr后其中example使用jetty运行的.我总不至于一定要是用jetty吧,我在把例子放到tomcat中运行出现了问题.如下:

      我的Tomcat运行在8080端口上,分布式搜索总是在8983端口.造成搜索出现error

      好吧,我改端口号8983,然后启动,发现分布式搜索的时使用solr的web实例,而我更改了项目solrl为dsolr了.他没有按照我想要的实例去运行

      好吧,我也改成solr运行后,搜索发现他使用nowledgedata-u1:8983/solr这web地址去搜索,不是使用的IP:192.168.1.*:8983/solr去搜索的.机器的hosts文件没有加上IP对应机器名的配置,还是搜索不了…


       

      我把上面的配置都更改了一遍,启动了.也能搜索了.但是就是端口号8983,运行的web实例为solr.我实在不爽,怎么办?

      这个问题我也纠结了很久,看了很多Solr的源码,幸好之前研究Katta也接触了很多Solr源码,发现了问题了.

      下面是我成功解决上面的问题的一下配置说明.希望对其他人对solrcloud入门有用.当然该配置也可以解决以其他方式运行的问题.

      我先启动一个伪分布式的Zookeeper,端口号2181.ZooKeeper的配置见: 

      第一个启动的机器在start的脚本中添加:

       

      JAVA_OPTS="$JAVA_OPTS -Xmx512m -Xms512m -Xmn320m -XX:MaxPermSize=128m -XX:PermSize=128m -Dbootstrap_confdir=/data/solr4.0/solrcloud2/collection1/conf -Dcollection.configName=myconf -DzkHost=192.168.1.20:2181 -DnumShards=2"


      该服务器启动前必须启动ZooKeeper, 多个zookeeper组成的集群在 -DzkHost=localhost:9983,localhost:8574,localhost:9900. 伪分布式的上面的就好了.

      bootstrap_confdir:把该地址下的文件上传到zookeeper集群让所有node共享.

      collection.configName:配置的名称,可以随意,符合基本标示符就可以了

      numShards:默认为1. 集群中shard的个数,shard才是真正分布式搜索的服务,否则该集群中启动多少台服务器,都是replica, replica只是在该shard挂掉后才起作用

      追加的参数:

       

      1. host:是注册到zookeeper集群的机器名.默认是机器名,可以改成机器的IP,那样就免去了更改系统hosts文件了.
      2. hostPort:注册到zookeeper集群的访问该服务的端口号.默认8983
      3. hostContext:注册到zookeeper集群的访问该服务器的web实例名.默认是solr



       

      好了.其他都没问题,我把hostPort改成8080,分布式搜索的时,该机器上服务注册的端口号还是8983,后来我才发现它并不是指定端口号的,真正起作用的jetty.port.我在tomcat的启动脚本加入-Djetty.port=8080.tomcat在8080上启动.一切OK.达到目的了.


      ZooKeeper(外部)实例 + SolrCloud(tomcat)实例_java

      如上图:

      我更改了-Dhost=nowladgedata-n1 -Djetty.port=8080 -DhostPort=8080 -DhostContext=dsolr参数后,每次注册到ZooKeeper的配置不一样[因为不是一次改就造成的],造成了很多节点.其实它是一个节点改变了一些信息再次注册后的

      可追加关于ZooKeeper的参数:

      zkRun:运行单独的ZooKeeper,并且该机器是leader

      zkHost:使用该参数则表明需要连接到其他的Zookeeper集群

      zkClientTimeout:允许client连接ZooKeeper集群最大的超时时间,也就是说当超过这个时间没有连接上Zookeeper集群,则该Zookeeper集群异常了.

      ShardId:默认是shard1,shard2…shard N.当指定该值则注册到ZooKeeper集群使用指定的shardId

       

      好了.Solrcloud分布式搜索就这么简单,后边的问题就是你怎样维护ZooKeeper集群了,同样Solr/Lucene知识也是你需要掌握的



      标签:zookeeper,8080,tomcat,SolrCloud,ZooKeeper,实例,服务器,solr
      From: https://blog.51cto.com/u_16087105/7048332

      相关文章

      • Linux文件服务器搭建与使用实例
        1.1 NFS是什么?NFS 是网络文件系统 Network FileSystem 的 简称 ,最早是由 Sun 公司 开发 出来 的,目的是想 让 不同的 机器、不同的 操作 系統可以 共享文件。 在 Unix/Linux类的 操作系统 中 可以 用 NFS 来搭建文件服务器。 对于一个真实的运行环境而言......
      • [数据分析与可视化] Python绘制数据地图5-MovingPandas绘图实例
        MovingPandas是一个基于Python和GeoPandas的开源地理时空数据处理库,用于处理移动物体的轨迹数据。关于MovingPandas的使用见文章:MovingPandas入门指北,本文主要介绍三个MovingPandas的绘图实例。MovingPandas官方仓库地址为:movingpandas。MovingPandas官方示例代码仓库地址为:movin......
      • KubeSphere 部署 Zookeeper 实战教程
        前言知识点定级:入门级如何利用AI助手辅助运维工作单节点Zookeeper安装部署集群模式Zookeeper安装部署开源应用选型思想实战服务器配置(架构1:1复刻小规模生产环境,配置略有不同)主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.9148501......
      • 跟我一起学写jQuery插件开发方法(附完整实例及下载)
        跟我一起学写jQuery插件开发方法(附完整实例及下载) 更新时间:2010年04月01日23:37:51 作者:  jQuery如此流行,各式各样的jQuery插件也是满天飞。你有没有想过把自己的一些常用的JS功能也写成jQuery插件呢?如果你的答案是肯定的,那么来吧!和我一起学写jQuery插件吧! 很多公司......
      • SolrCloud相关资料
        Thispageisnotnecessarilykeptuptodate-forthelatestSolrClouddocumentationsee https://cwiki.apache.org/confluence/display/solr/SolrCloud ContentsSolrCloudAlittleaboutSolrCoresandCollectionsGettingStartedExampleA:Simpletwoshardclus......
      • 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
        简介:Zookeeper分布式服务框架是ApacheHadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本文将从使用者角度详细介绍Zookeeper的安装和配置文件中各个配置项的意义,以及分析Zo......
      • 安卓APP开发实例中的优势分析
        随着移动互联网的迅速发展,安卓APP已经成为人们日常生活不可或缺的一部分。在这个蓬勃发展的领域中,许多优秀的安卓app开发实例脱颖而出,展现出了独特的优势和特点。本文将从几个典型的安卓app开发实例中,分析其所具有的优势。1.创新性功能满足用户需求优秀的安卓APP往往能够准确捕捉......
      • docker-compose 安装MySQL(单实例)
        需求场景:在开发和测试环境中,或者研究型的环境,对于数据库的安全和稳定性可以稍低一些,那么我们可以通过docker快速部署MySQL服务,降低部署的时间成本。 vimdocker-compose.ymlversion:'3'services:mysql:restart:alwaysprivileged:trueimage:mysql:8.0......
      • 字符设备驱动-11.mmap机制-实例分析
        1mmap驱动要做的事情确定物理地址确定属性:是否使用cache、buffer建立映射关系参考Linux驱动源文件代码:我们要验证mmap功能,在驱动程序中申请一个8K的buffer,让APP通过mmap能直接访问。2mmap驱动代码示例分析linux内核中常用的内存申请方式:函数名说明......
      • python积累--读写文本文件实例
        读写文件是最常见的IO操作。我们经常从文件读取输入,将内容写到文件。读文件在Python中,读文件主要分为三个步骤:打开文件读取内容关闭文件一般使用形式如下:try:f=open('/path/to/file','r')#打开文件data=f.read()#读取文件内容fina......