SolrCloud集羣部署

SolrCloud是基於Solr和Zookeeper的分佈式搜索方案,是正在開發中的Solr4.0的核心組件之一,它的主要思想是使用Zookeeper做爲集羣的配置信息中心。它有幾個特點功能:html

  1. 集中式的配置信息
  2. 自動容錯
  3. 近實時搜索
  4. 查詢時自動負載均衡

solr

  基本能夠用上面這幅圖來概述,這是一個擁有4個Solr節點的集羣,索引分佈在兩個Shard裏面,每一個Shard包含兩個Solr節點,一個是Leader節點,一個是Replica節點,此外集羣中有一個負責維護集羣狀態信息的Overseer節點,它是一個總控制器。集羣的全部狀態信息都放在Zookeeper集羣中統一維護。從圖中還能夠看到,任何一個節點均可以接收索引更新的請求,而後再將這個請求轉發到文檔所應該屬於的那個Shard的Leader節點,Leader節點更新結束完成,最後將版本號和文檔轉發給同屬於一個Shard的replicas節點。node

下載相關程序

一、下載Solr-4.x http://lucene.apache.org/solr/downloads.html
二、下載Tomcat http://tomcat.apache.org/download-70.cgi
三、下載Zookeeper http://zookeeper.apache.org/releases.html
web

安裝Zookeeper

單機zookeeperapache

#解壓
$ tar -zxvf zookeeper-3.4.5.tar.gz
#更改配置
$ cp zookeeper-3.4.5/conf/zoo_sample.cfg zookeeper-3.4.5/conf/zoo.cfg
#啓動服務
$ bin/zkServer.sh start
#驗證
$ bin/zkCli.sh -server host:port

zookeeper主要配置:json

# Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳
tickTime=2000
# 這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶鏈接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中鏈接到 Leader 的 Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 5*2000=10 秒
initLimit=10
# 這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 2*2000=4 秒
syncLimit=5
# Zookeeper 保存數據的目錄,默認狀況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏。
dataDir=/tmp/zookeeper
# 這個端口就是客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
clientPort=2181

zookeeper集羣
一、在zookeeper-3.4.5/conf/zoo.cfg追加server配置tomcat

server.1=192.168.10.14:2888:3888
server.2=192.168.10.12:2888:3888
server.3=192.168.10.16:2888:3888

二、在每一個Zookeeper保存數據的目錄下指定myid文件,對應服務名稱IDbash

#如server.id,則在myid文件中寫1便可
$ vi /tmp/zookeeper/myid

三、啓動zookeeper服務 bin/zkServer.sh start服務器

SolrCloud使用Zookeeper管理集羣的基本流程

第一臺Solr服務器啓動過程:
負載均衡

  1. 啓動第一臺zookeeper服務器,做爲集羣狀態信息的管理者
  2. 將本身這個節點註冊到/node_states/目錄下,同時將本身註冊到/live_nodes/目錄下
  3. 建立/overseer_elect/leader,爲後續Overseer節點的選舉作準備,新建一個Overseer
  4. 更新/clusterstate.json目錄下json格式的集羣狀態信息
  5. 本機從Zookeeper中更新集羣狀態信息,維持與Zookeeper上的集羣信息一致
  6. 上傳本地配置文件到Zookeeper中,供集羣中其餘solr節點使用,後面啓動solr則不會上傳配置文件,由於都是使用第一臺solr服務啓動上傳的配置文件爲準.
  7. 啓動本地的Solr服務器,Overseer會得知shard中有第一個節點進來,更新shard狀態信息,並將本機所在節點設置爲shard1的leader節點,並向整個集羣發佈最新的集羣狀態信息。
  8. 本機從Zookeeper中再次更新集羣狀態信息,第一臺solr服務器啓動完畢。

第二臺solr服務器的啓動過程:
分佈式

  1. 鏈接到集羣所在的Zookeeper
  2. 將本身這個節點註冊到/node_states/目錄下,同時將本身註冊到/live_nodes/目錄下
  3. 本機從Zookeeper中更新集羣狀態信息,維持與Zookeeper上的集羣信息一致
  4. 從集羣中保存的配置文件加載Solr所須要的配置信息
  5. 啓動本地solr服務器,將本節點註冊爲集羣中的shard,並將本機設置爲shard2的Leader節點
  6. 本機從Zookeeper中再次更新集羣狀態信息,第二臺solr服務器啓動完畢.

SolrCloud安裝配置

包含2個shard的集羣,每一個shard中有replica節點

solr

  1. 安裝Tomcat
  2. 安裝zookeeper集羣,啓動,我這裏就使用上面的zookeeper集羣
  3. 拷貝solr項目中的solr配置文件到指定路徑
    $ copy -r solr $TOMCAT_HOME1/conf
    $ copy -r solr $TOMCAT_HOME2/conf
    $ copy -r solr $TOMCAT_HOME3/conf
    $ copy -r solr $TOMCAT_HOME4/conf
  4. 更改第一臺tomcat的啓動腳本catalina.sh,添加solr_home及配置信息到JAVA_OPTS,添加到開頭就行,在catalina.sh指定solr_home,也能夠在solr.war包中的web.xml中配置solr
  5. 更改第二臺及其餘tomcat的啓動腳本catalina.shsolr
  6. 配置完全部的solr服務,則從第一臺開始啓動$TOMCAT_HOME1/bin/catalina.sh run

solr

備註

一、solr.xml配置文件解釋

<cores adminPath="/admin/cores" defaultCoreName="deals" host="${host:}" hostPort="${jetty.port:}" hostContext="${hostContext:}" leaderVoteWait="${leaderVoteWait:1000}">
    <core name="deals" instanceDir="deals" />
</cores>

hostContext:指定服務名稱
hostPort:指定端口
leaderVoteWait:選舉leader的等待時間ms


原文連接:http://demi-panda.com/2013/03/30/solr-cloud-install/

相關文章
相關標籤/搜索