Wisher 2014-07-18
公司的solr线上服务器,分成差不多10个core给不同的部门不同的业务需求来使用。我接手以来,问题多多,烦扰多多。有不少问题亟待解决,首当其冲的是搜索准确度、数据同步。搜索准确度已经通过改用ansj分词器和不断优化的个人词库和停用词库来解决,这是个不断优化的过程,需要长时间的跟进才有明显效果。第二个数据同步问题,其实包括了快捷新建搜索core、搜索性能负载、数据同步和宕机恢复等。以前是各种分散的处理方案。数据同步我自己写了个rest的webservice接口来分别实现,宕机恢复甚至只能手工处理,性能负载是IT运维部门来解决。现在大部分弃用,直接上solrcloud!
花了差不多一周的时间,搞定了solrcloud。其实搭建起来一两个小时就OK了,时间都花在理解原理和进阶使用上,各种问题,头疼,这周也加了不少班,真心很艰辛!有时候想想真是nozuonodie,其实旧有的方案完全是可以用的,而且是自己辛苦写成的,现在要推翻重来,而且要深入理解,随便一个问题都能焦头烂额,我好歹也是搞过nutch、hadoop的人,现在在solrcloud上头疼的程度却是前所未有。solrcloud+zookeeper网上资料可谓多矣,可惜一万篇都可以合成一篇,基本上都是写如何搭建,然后就没了,各种抄袭,各种点到为止。这也是中文开源界的一个不好的现象,大家都反复分享已经有的技术;有难度的技术,大家又不愿意分享。结果找资料,百度上翻了几十页,内容都大差不差。蛋疼的谷歌上不了。WIKI文档又多数是英文的,很少有翻译的,在此要感谢一些把solrcloud的wiki翻译过来的兄弟。啰啰嗦嗦说了好多,其实最终还是想劝告做开发的,多做些原创的东西,多看文档,多理解原理而不是人云亦云。好了,下来写写我开发过程中的心得和教训吧!
1,zookeeper安装。单机分布式均可,网上资料多多,这个也比hadoop搭建容易,以后有兴趣准备写个脚本,一键安装zookeeper服务。
2,solr安装。注意在linux上安装时候,solr.xml不要在window上编辑再上传!!!这是很小的事情,但是很容易造成不明所以的bug.血的教训,zookeeper同步数据会重写solr.xml,因为window和linux各种不同的东东,会让在linux上无法重写!导致slor服务重启后无法装载solr的core,一直处于Down的状态。如果你的solrcloud里某个solr物理节点状态是down,请visolr.xml,看里面是否是很多~M(经常用linux的人懂的)。另外建议把solr.xml里的注释全部去掉!不需要在solr.xml里创建core,我们有强大的zookeeper,`(*∩_∩*)′
3,上传core的配置文件。这里说下理解性的东西,一旦理解就一切好说。zookeeper上的文件系统类似HDFS。./zkCli.sh-serverlocalhost:2181
可以查看zookeeper分布式上的文件结构,所有的core配置文件在confs里,所有的core(cloud里用的是collection这个概念)在collections里。上传配置文件命令如下:
java-classpath.:/usr/local/tomcat7/webapps/solr/WEB-INF/lib/*org.apache.solr.cloud.ZkCLI-cmdupconfig-zkhosthadoop34:2181,hadoop36:2181-confdir/usr/local/soft/solr-space/alpha_wenuser/conf-confnamealpha_wenuser
这里把alpha_wenuser集合(core)的配置文件上传到两台分布式机器下。如果你的配置里有dataimport相关的,在这里或者以后创建core(集合)时候会报错,需要把dataimport相关的jar放在tomcat下的solr的lib里,而不是之前单机solr那样放在solr_home的dist下。
4,创建集合。一旦配置文件上传OK了,你可以随心所欲的创建集合了,不需要本机蛋疼的操作,一条命令就够了。命令如下
curl'http://hadoop36/solr/admin/collections?action=CREATE&name=alpha_wenuser&numShards=1&replicationFactor=1&collection.configName=alpha_wenuser'
具体含义,百度一下,大家都知道的,就不罗嗦了。
5,宕机测试。上面OK了solrcloud就OK了。什么,你说怎么会这么简单,好吧,就是这么简单。难的是此起彼伏的bug。如果你认真看我上面的操作,基本上所有的bug都可以避免了。现在随便关掉一台solr机器,测试下leader是否切换成功,再重启solr机器,看这solr节点是down还是Active,如果是down,好吧兄弟,去查看solr.xml吧,必然有我刚才说的问题,解决方法就是删掉,直接换成example里的solr.xml吧。然后删掉集合,命令如下
curl'http://hadoop36/solr/admin/collections?action=DELETE&name=alpha_wenuser'
再重复步奏4,步奏5。
上面说的很乱,其实本文不是告诉你搭建solrcloud的详细方法,而是搭建和使用过程中可能出现的问题以及万万要注意的地方。
BUG修补区:
1,java.lang.UnsupportedOperationException
解决方案是,检查scheam.xml下的_version字段是不是没有设置成long类型,新版的solr的_version不使用string类型,如果继续使用,会报这类错误!
参考资料:
http://shiyanjun.cn/archives/100.html
这个步奏很靠谱,信得过,当然也要自己理解了先,他也漏了一些东西
http://blog.csdn.net/natureice/article/details/9109351
这个同上,也很值得参考
http://www.cnblogs.com/guozk/p/3498844.html
这个有各种操作命令,蛮详细的
感谢这几位分享的经验,互联网真好!