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

2019-03-27 01:19|来源: 网路

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

先说一下我为什么那么关心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挂掉后才起作用

追加的参数:

  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.达到目的了.

如上图:

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


转自:http://my.oschina.net/zhzhenqin/blog/84995

相关问答

更多
  • 配置hbase远程调试 打开/etc/hbase/conf/hbase-env.sh,找到以下内容: # Enable remote JDWP debugging of major HBase processes. Meant for Core Developers # export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8070" # ex ...
  • 在 /usr/local/hadoop/ 下面启动,找到是/opt/Hadoop/下面的hadoop安装包,是不是HADOOP_HOME环境变量配置的有问题。 可以到海牛部落交流,那里有好多学习hadoop的朋友
  • 你可以输入JPS查看一下进程 一般你的master上是namenode secondarynamenode 和jobtracker三个进程 你的slaves上 有各自的datanode 和tasktracker两个进程 你看看是不是有各自进程都启动起来了 启动起来了就是分布式 如果只有一台机子有进程 那你就重新把那些配置文件再设置一下
  • 现在的软件开发都讲究个"层"的意思. 分布式开发将一个系统分为三个层次:客户端应用程序,应用程序服务器,后台数据库。客户端提出请求,应用服务器接受请求并处理然后返回数据给客户端,后台数据库当然是提供数据。多半是用于WEB开发.这样的分层开发有很多 好处..我就不多说了...
  • 这个比较复杂,这个属于架构方面的,大概是指客户端和服务器端的关系。以前的程序的服务端比较集中在一块,分布式的服务器端可能分布在不同的地方,如云端等等。。。
  • 一、DFS为何物? DFS 即微软分布式文件系统的简称,系统管理员可以利用它来有效的整合网络资源,并把这些资源以单一的层次结构呈现给网络用户。管理员利用它可以把资源发布成一 个树形结构,这样大大简化了为用户进行资源配置和对资源管理的工作量。我们可以在不同的机器上调整和移动文件,这不会影响到用户的访问。 二、为什么要使用DES? 1、DFS使用了现有网络中的Share权限,管理员不必进行新的配置 2、通过一个DFS树形结构用户就可以访问多个网络资源,而不用再把远程驱动器映射到本地共享资源中。 3、DFS可以配 ...
  • 分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无复本、数据存于哪个站点以及事务在哪个站点上执行等。 故名思义,分布式 ...
  • 虽然我在这里遇到了一个老问题,但我迟到了一点。 答案是Solr Cloud在内部处理复制。 Solr Cloud wiki页面详细解释了这一点。 如果你设置了numShards = 2并添加更多的服务器(这样你总共有四个),分片将被复制到新的服务器 - 确保你的分片位于多个节点上。 直接回答你的问题; SolrCloud为你做了复制设置和逻辑,你应该让它做它自己的事情,而不是在混合中引入“手动”设置复制。 SolrCloud的重点在于隐藏复制和共享逻辑,允许您在可用时简单添加更多服务器。 当然,您可以创建逻 ...
  • 假设您的分片是: “localhost:8983 / solr”和“localhost:7574 / solr” 您可以使用solrj执行分布式搜索,例如: String shards = "localhost:8983/solr,localhost:7574/solr"; StringBuffer request = new StringBuffer(); request.append("&q=" + query); request.append("&shards=" + shards); SolrPar ...
  • 尽管在将来的发行版中有计划添加此功能,但在当前版本上无法在已创建的分布式对象上即时更改配置。 一旦创建,地图配置将停留在节点级别而不是集群级别。 只要你从配置中创建新的分布式映射,使用它并销毁它,你的方法应该没有任何问题。 Changing the configuration on the fly on an already created Distributed object is not possible with the current version though there is a plan t ...