Solrcloud是Apache关于Solr分布式搜索的一个解决方案.前面我介绍过Katta,测试发现了不少问题,我仍是不敢在公司的项目上使用,毕竟公司都是商业性质的,业务不是那么简单,压力也不小.恰好最近的Solr4.0通过2年Bata终于正式版了,我有理由试一试. html
先说一下我为何那么关心Katta,Solrcloud这样的分布式解决方案,由于咱们的索引大小已经5.86GB了,并且运行在单台机器上,没有索引备份,备份也是手工备份的.并且机器配置是16核心CPU,8G内存.上面还跑着一个Oracle,分给个人内存大小就在3-4G.咱们急须要一个分布式搜索的解决方案. node
solrcloud的安装和配置在洞庭散人的blog上有介绍: http://www.cnblogs.com/phinecos/archive/2012/02/10/2345634.html web
感谢洞庭散人,可是他也是在solr中携带的example上演示solrcloud的.下载solr后其中example使用jetty运行的.我总不至于必定要是用jetty吧,我在把例子放到tomcat中运行出现了问题.以下: bootstrap
个人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.我实在不爽,怎么办? tomcat
这个问题我也纠结了好久,看了不少Solr的源码,幸亏以前研究Katta也接触了不少Solr源码,发现了问题了. 服务器
下面是我成功解决上面的问题的一下配置说明.但愿对其余人对solrcloud入门有用.固然该配置也能够解决以其余方式运行的问题. 分布式
我先启动一个伪分布式的Zookeeper,端口号2181.ZooKeeper的配置见: http://blog.csdn.net/shenlan211314/article/details/6185176 测试
第一个启动的机器在start的脚本中添加: spa
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. 伪分布式的上面的就行了. .net
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知识也是你须要掌握的