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知識也是你須要掌握的