设为首页 收藏本站
查看: 408|回复: 0

[经验分享] ZooKeeper(外部)实例 + SolrCloud(tomcat)实例

[复制链接]

尚未签到

发表于 2017-1-30 07:27:30 | 显示全部楼层 |阅读模式
Solr学习(三) 单独ZooKeeper(外部)实例 + SolrCloud(tomcat)实例
博客分类:
     
  • Java
  • Solr Lucene
solr4.2.0ZooKeeperSolrSolrCloud 

  开场白:
简单讲述如何配置独立的外部 ZooKeeper 集群管理组件来管理 solr集群(多实例solr)
本章建立在 Solr学习(一)  、Soer学习(二)基础上进行配置。
 声明:描述的比较笼统繁琐,有偏差的地方请大家毫不留情的拍砖 DSC0000.gif
  完成目标: 
单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的项目根目录(解压后的目录,尽量不要放在中文目录中)如下图
  
DSC0001.jpg
 开始生产:
      步骤1:在 ZooKeeper目录“D:\zookeeper-3.4.5\conf”找到“zoo_sample.cfg”文件(将其备份一下),改名为“zoo.cfg”,打开它(最好用UE打开!防止乱码!)修改里头内容为(原本很多注释。都被我干掉了!因为哥有强迫症 +_+!!)
Java代码   DSC0002.png


  • tickTime=2000   
  • initLimit=10  
  • syncLimit=5  
  • dataDir=D:/zookeeper-3.4.5/temp  
  • 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 。
例如: 
Bat代码  


  • set "CURRENT_DIR=%cd%"  
  • if not "%CATALINA_HOME%" == "" goto gotHome  

改成 Bat代码  


  • set "CURRENT_DIR2=%cd%"  
  • if not "%CATALINA_HOME2%" == "" goto gotHome   

还有server.xml 里头的端口,我这里把常用的 8080改成 9090了,8443改成 9443  反正各种变9.  只要不冲突!只要你记得你改了多少就成!这里自己折腾吧。
 
  步骤4:
      偷懒!把原先8080服务器根目录下的solrapp文件夹拷贝到9090服务器根目录下。(如果没看之前文章的朋友,这里解释一下solrappsolr-work目录,是我们后来自己建立的文件夹。详见:solr学习一 

DSC0003.jpg

同样,把8080服务器下webapps里头的solr 文件夹也拷贝到 9090服务器的同样目录 webapps里。 
 
  步骤5:
      此时要在9090服务器上建立jndi指引文件,到“E:\apache-tomcat-6.0.35.9090\conf\Catalina\localhost下新建solr.xml文件(也可以直接去8080服务器那边拷贝过来)然后写入内容
 
Java代码  


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

  XML注意: docBase 与 value 两个值根据自己的路径不同做改变, 前者是war包的位置,后者是刚刚自己建立的solrapp目录位置的solr文件夹。   
步骤6:
    打开“8080服务器”路径“E:\apache-tomcat-6.0.35\solrapp\solr”找到项目内的“sor.xml”打开找到“cores”节点。改为如下配置。 
Xml代码  


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

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


  • <cores adminPath="/admin/cores" defaultCoreName="collection1" host="localhost" hostPort="9090" hostContext="solr" zkClientTimeout="${zkClientTimeout:15000}">  
  •     <core name="collection1" instanceDir="collection1" />  
  •   </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打开,注意文件编码)在文件第二行加入

 
Bat代码  


  • 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的文件。)
 
Bat代码  


  • set JAVA_OPTS= -DzkHost=localhost:2181  

   只要指明zookeeper的路径位置即可。(如果你有很多个小弟。你其他小弟也这么配。) 
  此时完成了配置了。
测试阶段:
我们测试下!~首先打开zookeeper服务,再分别打开 8080  9090 tomcat 服务(注意要先打开zookeeper服务,后开tomcat)。之后IE里头输入 http://localhost:8080/solr

DSC0004.jpg
 
 
出现以上图就OK了。  完成~
此时我们关掉其中的一个服务。。 我关了8080服务(废了老大)。 此时我们打开 9090服务地址。
http://localhost:9090/solr

DSC0005.jpg
 发现此时 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上有介绍: http://www.cnblogs.com/phinecos/archive/2012/02/10/2345634.html
  感谢洞庭散人,但是他也是在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的配置见: 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集群的访问该服务的端口号.默认8983
  • hostContext:注册到zookeeper集群的访问该服务器的web实例名.默认是solr


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

  如上图:
  我更改了-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)
  • DSC0007.jpg 张东昊 发表于 1年前
    好东西,收藏以后用
    评论此回帖

  • DSC0008.jpg 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例子一步一步来的,不知道你这边出现过类似的情况吗?如果您知道原因请多多指教,谢谢
    评论此回帖

  • DSC0009.jpg 震秦 发表于 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节点了.
    评论此回帖

  • 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集群吗?
    评论此回帖

  • 震秦 发表于 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集群吗? 

    是的。
    评论此回帖

  • DSC00010.gif clydqua 发表于 11个月前
    我也在尝试使用solr cloud +zookeeper, 但是点击solr index page/cloud/tree,发现错误“Loading of undefined failed with HTTP-Status 404“
    评论此回帖

  • 震秦 发表于 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.
    评论此回帖

  • 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,发现也是同样的错误
    评论此回帖

  • DSC00011.jpg 流星划过的瞬间 发表于 10个月前
    哥们,在吗!有关zookeeper和solrcloud的方面的问题想请教一下能否透一下邮箱
    评论此回帖

  • 震秦 发表于 10个月前
    引用来自“流星划过的瞬间”的评论
    哥们,在吗!有关zookeeper和solrcloud的方面的问题想请教一下能否透一下邮箱

    zhzhenqin AT gmail.com
     


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-335089-1-1.html 上篇帖子: 在tomcat的访问日志配置:awstats 下篇帖子: tomcat中server.xml常用配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表