SolrCloud 分布式集群安装部署(solr4.8.1 + zookeeper +tomcat)
?SolrCloud 分布式集群安裝部署
安裝軟件包準備
· apache-tomcat-7.0.54 · jdk1.7 · solr-4.8.1 · zookeeper-3.4.5注:以上軟件都是基于 Linux環(huán)境的 64位軟件,以上軟件請到各自的官網(wǎng)下載。
服務器準備
為搭建這個集群,準備三臺服務器,分別為 192.168.0.112 --master 角色 192.168.0.113 -- slave 角色 192.168.0.114 -- slave 角色搭建基礎環(huán)境
1. 安裝 jdk1.7 -這個大家都會安裝,就不費鍵盤了。(記得配置環(huán)境變量) 2. 配置主機 /etc/hosts 文件 - 當然,如果內(nèi)部有內(nèi)部DNS解析,就不需要配置 hosts文件了。在 3 臺服務器的 /etc/hosts 中添加以下記錄 192.168.0.112 SOLR-CLOUD-001 192.168.0.113 SOLR-CLOUD-002 192.168.0.114 SOLR-CLOUD-003zookeeper 部署
Zookeeper 分布式服務框架是 Apache Hadoop的一個子項目,它主要是用來解決分布式應用中經(jīng)常遇到的一些數(shù)據(jù)管理問題,如:統(tǒng)一命名服務、狀態(tài)同步服務、集群管理、分布式應用配置項的管理等。
注:Zookeeper集群的機器個數(shù)推薦是奇數(shù)臺,半數(shù)機器掛掉,服務是可以正常提供的
首先以 192.168.0.112為例來搭建 zookeeper:
1.??????在軟件部署目錄下面部署 zookeeper,把下載的 zookeeper-3.4.5解壓到軟件部署目錄?/usr/local
注:為了統(tǒng)一部署,以及以后自動化方便,必須統(tǒng)一軟件部署目錄,目前我這邊是以 ``/usr/local```為軟件部署主目錄
2.?????建立 zookeeper的數(shù)據(jù)、日志以及配置文件目錄
mkdir -p /usr/local/data/zookeeper-data/mkdir -p /usr/local/data/zookeeper-data/logs/?
注:?/usr/local/data?是定義的統(tǒng)一存放數(shù)據(jù)的目錄
1.??????把?zookeeper?的 conf 目錄下面的?zoo_sample.cfg?修改成?zoo.cfg,并且對其內(nèi)容做修改
cp -av /usr/local/zookeeper-3.4.5/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.5/conf/zoo.cfg
?
修改?zoo.cfg?的內(nèi)容,主要是修改 dataDir 、dataLogDir和 server.1-3
# The number of millisecondsof each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here isjust # example sakes. dataDir=/usr/local/data/zookeeper-data dataLogDir=/usr/local/data/zookeeper-data/logsserver.1=SOLR-CLOUD-001:2888:3888 server.2=SOLR-CLOUD-002:2888:3888 server.3=SOLR-CLOUD-003:2888:3888 # the port at which the clients will connect clientPort=2181 # # Be sure to read the maintenance sectionof the # administrator guide before turning on autopurge. # #http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retainindataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" todisable auto purge feature #autopurge.purgeInterval=1注:
tickTime:這個時間是作為 Zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime時間就會發(fā)送一個心跳。
initLimit:這個配置項是用來配置 Zookeeper接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper服務器的客戶端,而是 Zookeeper服務器集群中連接到 Leader的 Follower服務器)初始化連接時最長能忍受多少個心跳時間間隔數(shù)。當已經(jīng)超過 10個心跳的時間(也就是tickTime)長度后 Zookeeper服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是52000=10秒。
syncLimit:這個配置項標識 Leader與 Follower之間發(fā)送消息,請求和應答時間長度,最長不能超過多少個 tickTime的時間長度,總的時間長度就是 22000=4秒
dataDir:顧名思義就是 Zookeeper保存數(shù)據(jù)的目錄,默認情況下,Zookeeper將寫數(shù)據(jù)的日志文件也保存在這個目錄里。
dataLogDir: Zookeeper的日志文件位置。
server.A=B:C:D:其中 A是一個數(shù)字,表示這個是第幾號服務器;B是這個服務器的 ip地址;C 表示的是這個服務器與集群中的 Leader服務器交換信息的端口;D表示的是萬一集群中的 Leader服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執(zhí)行選舉時服務器相互通信的端口。如果是偽集群的配置方式,由于 B都是一樣,所以不同的 Zookeeper實例通信端口號不能一樣,所以要給它們分配不同的端口號。
clientPort:這個端口就是客戶端連接 Zookeeper服務器的端口,Zookeeper會監(jiān)聽這個端口,接受客戶端的訪問請求。
1.??????同步 zookeeper的配置以及相關目錄到其他兩臺服務中
scp -r /usr/local/zookeeper-3.4.5 solr@192.168.0.113:/usr/local scp -r /usr/local/data/zookeeper-data solr@192.168.0.113:/usr/local/datascp -r /usr/local/zookeeper-3.4.5 solr@192.168.0.114:/usr/local scp -r /usr/local/data/zookeeper-data solr@192.168.0.114:/usr/local/data注:也可以采用命令 scp -r /usr/local/zookeeper-3.4.5 192.168.0.114:/usr/local 來同步(輸入密碼即可)1.??????創(chuàng)建 myid文件存儲該機器的標識碼,比如 server.1的標識碼就是 “1”,myid文件的內(nèi)容就一行: 1
192.168.0.112 echo"1" >> /usr/local/data/zookeeper-data/myid 192.168.0.113 echo"2" >> /usr/local/data/zookeeper-data/myid 192.168.3 echo"3" >> /usr/local/data/zookeeper-data/myid1.??????分別啟動三臺服務器的 zookeeper
cd /usr/local/zookeeper-3.4.5/bin
?
./zkServer.sh start
查看 zookeeper的狀態(tài)
[solr@SOLR-CLOUD-001 bin]$ ./zkServer.sh status JMX enabled by default Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg Mode: leader [solr@SOLR-CLOUD-002 bin]$ ./zkServer.sh status JMX enabled by default Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg Mode: follower [solr@SOLR-CLOUD-003 bin]$ ./zkServer.sh status JMX enabled by default Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg Mode: followerSolrcloud分布式集群搭建
1.??????解壓部署 tomcat -解壓部署后的目錄為?/usr/local/apache-tomcat-7.0.54
2.?????解壓 solr-4.8.1的壓縮包,并且把solr-4.8.1/example/webapps/solr.war解壓至 /usr/local/solr目錄下
3.?????把 solr-4.8.1\example\lib\ext下的 jar包放到solr\WEB-INF\lib下
4.?????以 192.168.0.112為例,創(chuàng)建以下目錄
mkdir -p /usr/local/solrcloud/config-files mkdir -p /usr/local/solrcloud/solr-lib1.??????把 solr/WEB-INF/lib下的所有 jar包拷貝到 /usr/local/solrcloud/solr-lib目錄
cp -av /usr/local/solr/WEB-INF/lib/*.jar /usr/local/solrcloud/solr-lib
1.??????solr/example/solr/collection1/conf下的所有文件拷貝到 /usr/local/solrcloud/config-files目錄
cp -av /usr/local/solr/example/solr/collection1/conf/*/usr/local/solrcloud/config-files/
1.??????將 /usr/local/solr目錄拷貝到 /usr/local/apache-tomcat-7.0.54/webapps目錄下面
cp -av /usr/local/solr /usr/local/apache-tomcat-7.0.54/webapps
1.??????創(chuàng)建 solr的數(shù)據(jù)目錄?/usr/local/solr-cores?并在該目錄下生成?solr.xml,這是?solr?的核心配置文件
原始的配置文件如下
<?xml version="1.0"encoding="UTF-8" ?> <solr persistent="true"> <logging enabled="true"> <watcher size="100"threshold="INFO" /> </logging> <cores defaultCoreName="collection1"adminPath="/admin/cores"host="${host:}"hostPort="8080"hostContext="${hostContext:solr}"zkClientTimeout="${zkClientTimeout:15000}"> </cores> </solr>1.??????創(chuàng)建/usr/local/apache-tomcat-7.0.54/conf/Catalina目錄和 /usr/local/apache-tomcat-7.0.54/conf/Catalina/localhost目錄
mkdir -p /usr/local/apache-tomcat-7.0.54/conf/Catalina mkdir -p /usr/local/apache-tomcat-7.0.54/conf/Catalina/localhost1.??????在 /usr/local/apache-tomcat-7.0.54/conf/Catalina/localhost下創(chuàng)建 solr.xml文件,此文件為 Solr/home的配置文件
<?xml version="1.0"encoding="UTF-8"?> <Context docBase="/usr/local/tomcat7/webapps/solr"debug="0"crossContext="true"> <Environment name="solr/home"type="java.lang.String"value="/usr/local/solr-cores"override="true"/> </Context>1.??????修改 tomcat/bin/cataina.sh ,加入以下內(nèi)容
CATALINA_OPTS="$CATALINA_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9060-Djava.rmi.server.hostname=`/sbin/ifconfig bond0 |grep -a "inet addr:" |awk -F":" '{print$2}' |egrep -o '([0-9]{1,3}\.?){4}'`" CATALINA_OPTS="$CATALINA_OPTS-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false" JAVA_OPTS="$JAVA_OPTS-DzkHost=GD6-SOLR-CLOUD-001:2181,GD6-SOLR-CLOUD-002:2181,GD6-SOLR-CLOUD-003:2181" JAVA_OPTS="$JAVA_OPTS -Xmx8192m -Xms8192m -Xmn4g -Xss256k-XX:ParallelGCThreads=24 -XX:+UseConcMarkSweepGC -XX:PermSize=256m-XX:MaxPermSize=256m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps-XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime-XX:+PrintHeapAtGC -Xloggc:/usr/local/logs/tomcat/gc`date +%Y%m%d%H%M%S`.log -XX:ErrorFile=\"/usr/local/logs/tomcat/java_error.log\""1.??????將以上配置同步到其他兩臺服務器
scp -r /usr/local/apache-tomcat-7.0.54 solr@192.168.0.113:/usr/local scp -r /usr/local/solrcloud solr@192.168.0.113:/usr/local scp -r /usr/local/solr-cores solr@192.168.0.113:/usr/localscp -r /usr/local/apache-tomcat-7.0.54 solr@192.168.0.114:/usr/local scp -r /usr/local/solrcloud solr@192.168.0.114:/usr/local scp -r /usr/local/solr-cores solr@192.168.0.114:/usr/local?
1.??????SolrCloud是通過 ZooKeeper集群來保證配置文件的變更及時同步到各個節(jié)點上,所以,需要將配置文件上傳到 ZooKeeper集群中:執(zhí)行如下操作(以下ip均可使用域名進行操作)
java -classpath .:/usr/local/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmdupconfig -zkhost192.168.0.112:2181,192.168.0.113:2181,192.168.0.114:2181 -confdir /usr/local/solrcloud/config-files/ -confname myconf1.??????校驗 zookeeper的配置文件
cd /usr/local/zookeeper-3.4.5/bin ./zkCli.sh -server 192.168.0.112:2181 [zk: 192.168.01.2:2181(CONNECTED)0] ls / [configs, collections, zookeeper] [zk: 192.168.01.2:2181(CONNECTED)1] ls /configs [myconf] [zk: 192.168.01.2:2181(CONNECTED)2] ls /configs/myconf [admin-extra.menu-top.html, currency.xml, protwords.txt,mapping-FoldToASCII.txt, solrconfig.xml, lang, stopwords.txt, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, scripts.conf, synonyms.txt, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, schema.xml] [zk: 192.168.01.2:2181(CONNECTED)3]1.??????啟動 tomcat,首先啟動 master 192.168.0.112上面的 tomcat
cd /usr/local/apache-tomcat-7.0.54/bin
./startup.sh
1.??????啟動 192.168.0.113和 192.168.0.114的 tomcat
2.?????訪問?http://192.168.0.112:8080/solr?可以看到下圖
??
創(chuàng)建 Collection及初始 Shard
?
curl 'http://192.168.0.112:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=1'curl 'http://192.168.0.113:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=1'curl 'http://192.168.0.114:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=1'?
?
?
?
配置IK分詞
1.????????進入目錄:cd /usr/local/solr-cores
創(chuàng)建lib目錄:mkdir lib 在lib中加入文件IKAnalyzer.cfg.xml、stopword.dic
?
2.????????進入目錄:cd /usr/local/tomcat7/webapps/solr/WEB-INF/lib
加入jar包:IKAnalyzer2012FF_u1.jar
?
3.??Cd /usr/local/solrcloud/config-files
打開schema.xml文件在最后添加如下內(nèi)容:
?<!--ik分詞-->
<fieldType name="text_ik"class="solr.TextField"> <analyzertype="index" isMaxWordLength="false"class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzertype="query" isMaxWordLength="true"class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>?
同樣可以加入數(shù)據(jù)庫定義字段:
例如:
<field name="title" type="text_ik"indexed="true" stored="true"/><fieldname="path" type="string" indexed="false"stored="true"/>
?
?
4. ?將以上配置同步到另外兩臺機器上
5.??最后將配置文件同步到zookeeper上
執(zhí)行命令:
java-classpath .:/usr/local/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmdupconfig -zkhost 192.168.0.112:2181,192.168.0.113:2181,192.168.0.114:2181-confdir /usr/local/solrcloud/config-files/ -confname myconf?
6.??重新啟動即可
?
?
?
注:
也可以完全自定義schema.xml文件,配置自己所需要的內(nèi)容(初學者最好不要這樣做)
<?xml version="1.0" encoding="UTF-8"?><schema name="zwx_solr" version="1.5"><fields><fieldname="_version_" type="long" indexed="true"stored="true"/><!--數(shù)據(jù)庫中的字段--><fieldname="id" type="string" indexed="true"stored="true" multiValued="false"required="true"/><fieldname="title" type="text_ik" indexed="true" stored="true"/><fieldname="path" type="string" indexed="false"stored="true"/><fieldname="content" type="text_ik" indexed="true"stored="true"/><fieldname="time" type="tdate" indexed="true"stored="true"/><fieldname="author" type="text_ik" indexed="true"stored="true"/><fieldname="fromsite" type="text_ik" indexed="true"stored="true"/><fieldname="url" type="string" indexed="true"stored="true"/></fields><uniqueKey>id</uniqueKey><types><fieldTypename="string" class="solr.StrField"sortMissingLast="true" /><fieldTypename="boolean" class="solr.BoolField"sortMissingLast="true"/><fieldTypename="int" class="solr.TrieIntField"precisionStep="0" positionIncrementGap="0"/><fieldTypename="float" class="solr.TrieFloatField"precisionStep="0" positionIncrementGap="0"/><fieldTypename="long" class="solr.TrieLongField"precisionStep="0" positionIncrementGap="0"/><fieldTypename="double" class="solr.TrieDoubleField"precisionStep="0" positionIncrementGap="0"/><fieldTypename="tint" class="solr.TrieIntField" precisionStep="8"positionIncrementGap="0"/><fieldTypename="tfloat" class="solr.TrieFloatField"precisionStep="8" positionIncrementGap="0"/><fieldTypename="tlong" class="solr.TrieLongField"precisionStep="8" positionIncrementGap="0"/><fieldTypename="tdouble" class="solr.TrieDoubleField"precisionStep="8" positionIncrementGap="0"/><fieldTypename="date" class="solr.TrieDateField"precisionStep="0" positionIncrementGap="0"/><fieldTypename="tdate" class="solr.TrieDateField" precisionStep="6"positionIncrementGap="0"/><fieldtypename="binary" class="solr.BinaryField"/><fieldTypename="random" class="solr.RandomSortField"indexed="true" /><fieldTypename="text_general" class="solr.TextField" positionIncrementGap="100"><analyzertype="index"><tokenizerclass="solr.StandardTokenizerFactory"/><filterclass="solr.StopFilterFactory" ignoreCase="true"words="stopwords.txt" /><filterclass="solr.LowerCaseFilterFactory"/></analyzer><analyzertype="query"><tokenizerclass="solr.StandardTokenizerFactory"/><filterclass="solr.StopFilterFactory" ignoreCase="true"words="stopwords.txt" /><filterclass="solr.SynonymFilterFactory" synonyms="synonyms.txt"ignoreCase="true" expand="true"/><filterclass="solr.LowerCaseFilterFactory"/></analyzer></fieldType><!--ik分詞--><fieldTypename="text_ik" class="solr.TextField"> <analyzertype="index" isMaxWordLength="false"class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzertype="query" isMaxWordLength="true"class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType><!--#號分詞 自定義分詞--><fieldTypename="text_xx" class="solr.TextField"> </fieldType></types></schema>
原文出自:http://blog.segmentfault.com/yexiaobai/1190000000595712
總結
以上是生活随笔為你收集整理的SolrCloud 分布式集群安装部署(solr4.8.1 + zookeeper +tomcat)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat 7 'javax.el.E
- 下一篇: hadoop2.5.1集群部署(完全分布