首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

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

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

ZooKeeper(外部)实例 + SolrCloud(tomcat)实例
Solr学习(三) 单独ZooKeeper(外部)实例 + SolrCloud(tomcat)实例博客分类:

    ?JavaSolr Lucene

    完成目标:?

    单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的项目根目录(解压后的目录,尽量不要放在中文目录中)如下图


    ZooKeeper(外部)范例 + SolrCloud(tomcat)实例
    ?开始生产:

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

    Java代码??ZooKeeper(外部)范例 + SolrCloud(tomcat)实例
    1. tickTime=2000???
    2. initLimit=10??
    3. syncLimit=5??
    4. dataDir=D:/zookeeper-3.4.5/temp??
    5. clientPort=2181??

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

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

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

    Bat代码??ZooKeeper(外部)范例 + SolrCloud(tomcat)实例

    1. set?"CURRENT_DIR=%cd%"??
    2. if?not?"%CATALINA_HOME%"?==?""?goto?gotHome??
    改成?Bat代码??ZooKeeper(外部)范例 + SolrCloud(tomcat)实例
    1. set?"CURRENT_DIR2=%cd%"??
    2. if?not?"%CATALINA_HOME2%"?==?""?goto?gotHome???

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

    ?

    步骤4:

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


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

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

    ?

    步骤5:

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

    Java代码??ZooKeeper(外部)范例 + SolrCloud(tomcat)实例

    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. ???<Environment?name="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文件夹。???Xml代码??ZooKeeper(外部)范例 + SolrCloud(tomcat)实例
    1. <cores?adminPath="/admin/cores"?defaultCoreName="collection1"?host="localhost"?hostPort="8080"?hostContext="solr"?zkClientTimeout="${zkClientTimeout:15000}">??
    2. ????<core?name="collection1"?instanceDir="collection1"?/>??
    3. ??</cores>???

    Xml代码??ZooKeeper(外部)范例 + SolrCloud(tomcat)实例

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

    Bat代码??ZooKeeper(外部)范例 + SolrCloud(tomcat)实例

    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”的后半段。自己看清楚啦。

    Bat代码??ZooKeeper(外部)范例 + SolrCloud(tomcat)实例

    1. set?JAVA_OPTS=?-DzkHost=localhost:2181??
    ???只要指明zookeeper的路径位置即可。(如果你有很多个小弟。你其他小弟也这么配。)

    ?


    ?


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

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

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

    我的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的配置见:?http://blog.csdn.net/shenlan211314/article/details/6185176

    第一个启动的机器在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挂掉后才起作用

    追加的参数:

    ?

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


    ?

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

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

    如上图:

    我更改了-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知识也是你需要掌握的

    发表评论?文明上网,理性发言
  • 网友评论 (10)
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例张东昊?发表于 1年前好东西,收藏以后用评论此回帖
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例java10001?发表于 11个月前在使用solr服务内嵌的zookeeper集群时,但是我在逐一启动solr服务时,java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -DnumShards=2 -jar start.jar 发现控制台一直报错,说localhost:9983,localhost:8574,localhost:9900无法连接,但是实际上我如果按照集群方式启动,单独启动是没有问题的,启动命令如下:java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar
    其实这个例子是按照solr的wiki例子一步一步来的,不知道你这边出现过类似的情况吗?如果您知道原因请多多指教,谢谢评论此回帖
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例震秦?发表于 11个月前

    引用来自“java10001”的评论

    在使用solr服务内嵌的zookeeper集群时,但是我在逐一启动solr服务时,java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -DnumShards=2 -jar start.jar 发现控制台一直报错,说localhost:9983,localhost:8574,localhost:9900无法连接,但是实际上我如果按照集群方式启动,单独启动是没有问题的,启动命令如下:java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar
    其实这个例子是按照solr的wiki例子一步一步来的,不知道你这边出现过类似的情况吗?如果您知道原因请多多指教,谢谢

    我不喜欢让他内嵌Zookeeper运行,我启动单独的ZooKeeper实例,solrcloud是在tomcat中运行的.你需要在最先启动的solrcloud的tomcat的jvm参数加上 -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkHost=192.168.1.22:2181 -DnumShards=2运行.第二个solrcloud实例只需要-DzkHost=192.168.1.22:2181启动即可.打开浏览器访问cloud节点,你就能看到有2个shard节点了.评论此回帖
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例java10001?发表于 11个月前

    引用来自“震秦”的评论

    ?

    引用来自“java10001”的评论

    在使用solr服务内嵌的zookeeper集群时,但是我在逐一启动solr服务时,java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -DnumShards=2 -jar start.jar 发现控制台一直报错,说localhost:9983,localhost:8574,localhost:9900无法连接,但是实际上我如果按照集群方式启动,单独启动是没有问题的,启动命令如下:java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar
    其实这个例子是按照solr的wiki例子一步一步来的,不知道你这边出现过类似的情况吗?如果您知道原因请多多指教,谢谢

    我不喜欢让他内嵌Zookeeper运行,我启动单独的ZooKeeper实例,solrcloud是在tomcat中运行的.你需要在最先启动的solrcloud的tomcat的jvm参数加上 -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkHost=192.168.1.22:2181 -DnumShards=2运行.第二个solrcloud实例只需要-DzkHost=192.168.1.22:2181启动即可.打开浏览器访问cloud节点,你就能看到有2个shard节点了.

    ?

    是使用的外部zookeeper集群吗?评论此回帖
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例震秦?发表于 11个月前

    引用来自“java10001”的评论

    ?

    引用来自“震秦”的评论

    ?

    引用来自“java10001”的评论

    在使用solr服务内嵌的zookeeper集群时,但是我在逐一启动solr服务时,java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -DnumShards=2 -jar start.jar 发现控制台一直报错,说localhost:9983,localhost:8574,localhost:9900无法连接,但是实际上我如果按照集群方式启动,单独启动是没有问题的,启动命令如下:java -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar
    其实这个例子是按照solr的wiki例子一步一步来的,不知道你这边出现过类似的情况吗?如果您知道原因请多多指教,谢谢

    我不喜欢让他内嵌Zookeeper运行,我启动单独的ZooKeeper实例,solrcloud是在tomcat中运行的.你需要在最先启动的solrcloud的tomcat的jvm参数加上 -Dbootstrap_confdir=./solr/conf -Dcollection.configName=myconf -DzkHost=192.168.1.22:2181 -DnumShards=2运行.第二个solrcloud实例只需要-DzkHost=192.168.1.22:2181启动即可.打开浏览器访问cloud节点,你就能看到有2个shard节点了.

    ?

    是使用的外部zookeeper集群吗?

    ?

    是的。评论此回帖
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例clydqua?发表于 11个月前我也在尝试使用solr cloud +zookeeper, 但是点击solr index page/cloud/tree,发现错误“Loading of undefined failed with HTTP-Status 404“评论此回帖
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例震秦?发表于 11个月前

    引用来自“clydqua”的评论

    我也在尝试使用solr cloud +zookeeper, 但是点击solr index page/cloud/tree,发现错误“Loading of undefined failed with HTTP-Status 404“

    404说明你的web服务器启动成功了.ZooKeeper相互的访问不是用过IP,是通过机器名.所以你的在你的集群中每台计算机的hosts文件中写上对应的IP == hostname.评论此回帖
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例clydqua?发表于 11个月前

    引用来自“震秦”的评论

    ?

    引用来自“clydqua”的评论

    我也在尝试使用solr cloud +zookeeper, 但是点击solr index page/cloud/tree,发现错误“Loading of undefined failed with HTTP-Status 404“

    404说明你的web服务器启动成功了.ZooKeeper相互的访问不是用过IP,是通过机器名.所以你的在你的集群中每台计算机的hosts文件中写上对应的IP == hostname.

    ?

    我刚刚尝试使用其内嵌的zookeeper,发现也是同样的错误评论此回帖
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例流星划过的瞬间?发表于 10个月前哥们,在吗!有关zookeeper和solrcloud的方面的问题想请教一下能否透一下邮箱评论此回帖
  • ZooKeeper(外部)范例 + SolrCloud(tomcat)实例震秦?发表于 10个月前

    引用来自“流星划过的瞬间”的评论

    哥们,在吗!有关zookeeper和solrcloud的方面的问题想请教一下能否透一下邮箱

    zhzhenqin AT gmail.com?

热点排行