开场白:
简单讲述如何配置独立的外部 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打开!防止乱码!)修改里头内容为(原本很多注释。都被我干掉了!因为哥有强迫症 +_+!!)
- 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 。
例如:
- set "CURRENT_DIR=%cd%"
- if not "%CATALINA_HOME%" == "" goto gotHome
- set "CURRENT_DIR2=%cd%"
- if not "%CATALINA_HOME2%" == "" goto gotHome
还有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服务器”那边拷贝过来)然后写入内容
- <?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>
步骤6:
打开“8080服务器”路径“E:\apache-tomcat-6.0.35\solrapp\solr”找到项目内的“sor.xml”打开找到“cores”节点。改为如下配置。
- <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”节点。改为如下配置
- <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打开,注意文件编码)在文件第二行加入
- 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的文件。)
- set JAVA_OPTS= -DzkHost=localhost:2181
此时完成了配置了。
测试阶段:
我们测试下!~首先打开zookeeper服务,再分别打开 8080 和 9090 tomcat 服务(注意要先打开zookeeper服务,后开tomcat)。之后IE里头输入 http://localhost:8080/solr
出现以上图就OK了。 完成~
此时我们关掉其中的一个服务。。 我关了8080服务(废了老大)。 此时我们打开 9090服务地址。
发现此时 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挂掉后才起作用
追加的参数:
|
好了.其他都没问题,我把hostPort改成8080,分布式搜索的时,该机器上服务注册的端口号还是8983,后来我才发现它并不是指定端口号的,真正起作用的jetty.port.我在tomcat的启动脚本加入-Djetty.port=8080.tomcat在8080上启动.一切OK.达到目的了.
如上图:
我更改了-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知识也是你需要掌握的
-
张东昊 发表于 1年前好东西,收藏以后用
-
clydqua 发表于 11个月前我也在尝试使用solr cloud +zookeeper, 但是点击solr index page/cloud/tree,发现错误“Loading of undefined failed with HTTP-Status 404“
-
震秦 发表于 11个月前
引用来自“clydqua”的评论
-
clydqua 发表于 11个月前
引用来自“震秦”的评论
引用来自“clydqua”的评论
-
流星划过的瞬间 发表于 10个月前哥们,在吗!有关zookeeper和solrcloud的方面的问题想请教一下能否透一下邮箱
-
震秦 发表于 10个月前
引用来自“流星划过的瞬间”的评论
相关推荐
### ZooKeeper实例与Solr(tomcat)集群部署详解 #### 一、部署背景与目的 在大数据处理和搜索引擎技术领域,ZooKeeper与Solr是两个不可或缺的技术组件。ZooKeeper作为分布式协调服务,提供了高可用性以及一致性保证...
ZooKeeper+dubbo+springMvc+Mybatis+Mysql实例,项目是由maven搭建的 整合Dubbo\spring\springMvc\Mybatis,整个压缩包中有两个项目分别是提供者和消费,启动方式是打成WAR形式放到tomcat中启动。
本实例源码涉及的核心技术栈包括ZooKeeper、dubbo、spring、springMvc和mybatis,这些组件共同构成了一个完整的微服务架构。下面将详细解析这些技术及其在项目中的应用。 首先,ZooKeeper是一个分布式的,开放源码...
《Tomcat+SolrCloud6.2整合Web项目详解》 在现代的互联网环境中,高效、精准的全文搜索引擎已经成为各种Web应用不可或缺的一部分。Solr,作为Apache Lucene的一个子项目,以其强大的搜索功能和易扩展性深受开发者...
它常用于负载均衡,可以将请求分发到多个后端服务器,如Tomcat实例,以提高整体服务的响应速度和可靠性。 Tomcat是Apache软件基金会的Java Servlet和JavaServer Pages(JSP)容器,它是许多Web应用的首选服务器,...
依次启动三个Tomcat实例,并通过浏览器访问`http://localhost:8080/solr`、`http://localhost:8081/solr`、`http://localhost:8082/solr`来验证配置是否正确。 在完成上述步骤后,你就成功地在Windows 7环境下搭建...
SolrCloud4.9.0+Tomcat7+Zookeeper3.4.6搭建教程 SolrCloud是Apache Lucene项目下的一个基于分布式搜索引擎,通过将多个Solr实例组合成一个集群,可以实现高可用性和高性能的搜索系统。Tomcat是Apache软件基金会的...
SolrCloud是一个分布式搜索引擎系统,基于Apache Solr...每个Tomcat实例都可以独立运行并处理Solr请求,Zookeeper负责协调和同步集群状态。这使得SolrCloud具有高可用性和可伸缩性,适合处理大数据量的搜索和分析任务。
总结来说,这个项目是一个典型的分布式微服务架构实例,展示了如何利用ZooKeeper进行服务治理,Dubbo实现服务间通信,SpringMVC处理Web请求,Mybatis完成数据库操作,以及Mysql作为数据存储。这样的架构设计有助于...
### SolrCloud 5.2.1 + Tomcat 7 + Zookeeper 3.4.6 搭建教程 #### 一、环境准备 **软件环境:** - **操作系统:** Windows 7 - **Tomcat 版本:** 7.0.56 - **Solr 版本:** 5.2.1 - **Zookeeper 版本:** 3.4.6 **...
- 对每个 Tomcat 实例重复上述配置步骤,确保 `zkHost` 设置指向相同的 ZooKeeper 服务器。 - **多台 ZooKeeper 服务器,多台 Solr 服务器**: - 这种情况下,你需要在每台 Solr 服务器和 ZooKeeper 服务器上...
4. **创建Zookeeper标识文件**:在每个Zookeeper节点的数据目录下创建一个名为`myid`的文件,用于唯一标识该Zookeeper实例。 - 示例命令: - `vi /home/myuser/zookeeper/data/myid` - 在文件中写入对应节点的ID...
在本案例中,我们有两个Tomcat实例,即tomcat8-1和tomcat8-2,它们分别作为后端应用服务器,承载实际的业务逻辑和处理由Nginx转发的请求。 搭建Nginx+Tomcat的负载均衡集主要涉及以下几个步骤: 1. 安装Nginx:在...
SolrCloud高可用集群搭建是实现大规模、分布式搜索引擎的关键步骤,它通过集成Zookeeper来管理和协调各个Solr节点,确保数据的一致性和可用性。在搭建过程中,我们需要遵循一定的步骤和配置,以下是一些关键的知识点...
一个用来测试dubbo与zookeeper整合的简单实例 本人没有整合框架,用的是自己写的servlet,更利于理解底层 提供者和消费者都可以用main方法启动,也都可以作为web项目用tomcat服务器启动 tomcat服务器启动前需先启动...
`<solrcloud>`标签内,设置`zkHost`属性为Zookeeper集群地址。 2. 分别启动每个Solr实例,通过命令行或启动脚本运行: ``` cd /opt/solr/myinstance bin/solr start -p 8983 -e cloud -z localhost:2181 ``` ...
- 创建`dataDir`目录并创建一个名为`myid`的文件,写入一个唯一的ID,代表当前Zookeeper实例的ID。 - 启动Zookeeper服务,运行`bin/zkServer.sh start`。 2. **配置Dubbo Admin**: - 解压`dubbo-admin-2.5.4-...
- 将部署好的Solr拷贝到四个Tomcat服务器,分别创建四个Tomcat实例,例如`/usr/local/solr-cloud/tomcat-1`到`/usr/local/solr-cloud/tomcat-4`。 - 将本地的SolrHome上传至Linux服务器,并创建`/usr/local/...
当我们谈论“Tomcat集群实例下载”时,这通常指的是通过设置多个Tomcat实例来构建一个集群,以实现负载均衡、高可用性和容错性。 集群是一种策略,将多个独立的服务器组织成一个逻辑单元,共同提供服务,从而提高...