***版權聲明:本文為博主原創文章,轉載請注明本文地址。http://www.cnblogs.com/o0Iris0o/p/5813856.html ***
內容介紹:
真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql數據庫、IK中文分詞器配置以及web項目中solr的應用(1)[本文內容]
1.搭建單機solr 2.搭建zookeeper 3.配置solrcloud
**真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql數據庫、IK中文分詞器配置以及web項目中solr的應用(2)
**
4.創建core和collection分片 5.配置IK Analyzer中文分詞 5.索引mysql 6.整合web項目(web中單機solr以及solrcloud的使用)
1.運行環境
基本環境:Mac OS X
虛擬機軟件:Parallels Desktop
其他環境:ubuntu14+jdk-1.7+solr-4.10.3+zookeeper-3.4.8+tomcat-7.0.70
三台ubuntu虛擬機:
192.168.1.1 master
192.168.1.2 tom
192.168.1.3 harry
2.solr單機的搭建
(單機solr先在一台虛擬機上配置即可,后期配置solrcloud之后再復制到所有虛擬機)
1.將apache-tomcat-7.0.70.tar.gz解壓到/opt/tomcat/下
由於opt下的操作需要root權限,因此需要命令行,我的操作是先解壓到桌面,在opt目錄下創建tomcat文件夾再將解壓后文件移動到/opt/tomcat/
2.將solr-4.10.3安裝壓縮包解壓,復制解壓文件夾中example/webapps中的solr.war解壓移動到tomcat的webapps中
即solr.war解壓后是一個完整的web項目,這樣做是為了將solr的這個web項目部署到tomcat服務器上

3.拷貝解壓后的solr-4.10.3文件夾中/example/lib/ext//下的jar文件到/opt/tomcat/apache-tomcat-7.0.70/webapps/solr/WEB-INF/lib/
4.拷貝解壓后的solr-4.10.3文件夾中/example/resources/log4j.properties文件到tomcat/webapps/solr/WEB-INF/classes下
如果沒有classes文件夾就新建一個名為classes的文件夾
5.創建solrhome文件夾,並將solr-4.10.3/example/solr中的數據拷貝到建立的solrhome文件夾中
solrhome是部署在此tomcat的單機solr的配置文件,當后面solrcloud基於zookeeper的集群搭建起來之后,會統一管理配置文件,即solrhome中的配置文件會上傳到zookeeper管理的solrcloud中作為solr的配置文件

**
**
6.編輯webapps/solr/WEB-INF/web.xml文件,指定solrhome
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/opt/tomcat/apache-tomcat-7.0.70/webapps/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
7.重啟tomcat,在瀏覽器輸入地址http://localhost:8080/solr/
這個時候還只是單機solr,沒有cloud那一欄,這個界面成功顯示代表着單機solr搭建成功
有了成功的單機solr,在此基礎上以繼續搭建solrcloud集群

3.Zookeeper完全分布式的搭建
注意!一定不要去掉或者注釋掉etc/hosts文件下的“ 127.0.0.1 localhost ”,不然會出異常,導致zookeeper不好使!
好早以前配hadoop集群的時候按照一篇教程注釋掉了localhost結果竟然導致zookeeper不好使!T_T。。。這問題藏的夠深
1.更改配置文件etc/hosts
etc/hosts文件內容:(注:更改此文件需要root權限,所以使用vim或者gedit更改不要忘記sudo哦)
127.0.0.1 localhost
192.168.1.230 master
192.168.1.231 tom
192.168.1.232 harry
2.創建目錄/opt/zookeeper/svr和/opt/zookeeper/data/zookeeper-data,將zookeeper-3.4.8.tar.gz解壓到/opt/zookeeper/svr下
3.進入conf文件夾,把zoo_sample.cfg改名為zoo.cfg並修改配置文件conf/zoo.cfg:

conf/zoo.cfg文件內容:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data/zookeeper-data
dataLogDir=/opt/zookeeper/data/zookeeper-data/logs
server.1=master:2888:3888
server.2=tom:2888:3888
server.3=harry:2888:3888
clientPort=2181
參數說明:
①tickTime:心跳時間,毫秒為單位。
②initLimit: 這個配置項是用來配置 Zookeeper 接受客戶端(這里客戶端不是用戶連接 Zookeeper服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 10*2000=20 秒。
③syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime時間長度,總時間長度就是 5*2000=10 秒。
④dataDir:存儲內存中數據庫快照的位置。
⑤clientPort:監聽客戶端連接的端口
⑥server.N= HostNameOrIP:Port1:Port2 :其中 N 是一個數字,表示這個是第幾號服務器;HostNameOrIP是這個服務器的 ip 地址或者etc/hosts中中已有的主機名;Port1 表示的是這個服務器與集群中的 Leader 服務器交換信息的端口;Port2 表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。如果是偽集群的配置方式,由於HostNameOrIP都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。
**4.將zookeeper復制到剩余兩台虛擬機的相同文件夾里
**
5.dataDir即/opt/zookeeper/data/zookeeper-data目錄下創建myid文件,將內容設置為上⑥中N值,用來標識不同的服務器
在節點配置的dataDir指定的目錄下面,創建一個myid文件,里面內容為一個數字
master中/opt/zookeeper/data/zookeeper-data文件夾下myid的內容為1,tom中myid的內容為2,harry中myid的內容為3
**
**
到此zookeeper配置完成~
6.啟動ZooKeeper集群
分別進入三台虛擬機的/opt/zookeeper/svr/zookeeper-3.4.8/bin目錄輸入命令 ./zkServer.sh start啟動集群**
**
a@master:/opt/zookeeper/svr/zookeeper-3.4.8/bin$ ./zkServer.sh start
a@tom:/opt/zookeeper/svr/zookeeper-3.4.8/bin$ ./zkServer.sh start
a@harry:/opt/zookeeper/svr/zookeeper-3.4.8/bin$ ./zkServer.sh start
./zkServer.sh status命令查看狀態,正常情況下
a@master:/opt/zookeeper/svr/zookeeper-3.4.8/bin$ ./zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper/svr/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower
注:一開始只啟動一台主機還沒有啟動其它兩台的時候日志中會出現異常,沒關系,等到三台虛擬機的zookeeper都啟動了之后就一切正常了~但如果這時候輸入./zkServer.sh status命令仍然如下面的狀態說明啟動失敗
a@master:/opt/zookeeper/svr/zookeeper-3.4.8/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/svr/zookeeper-3.4.8/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
連接失敗原因分析:
上面提到的注釋掉了localhost會導致這種情況,2181端口被占用(更改zoo.cfg中端口號即可)或zoo.cfg配置文件沒有正確配置(如:myid沒有更改對、IP地址沒有配置正確、網絡連接掉線等)也會導致這種情況的出現。
如果連接失敗想查詢具體異常原因,可以查看/opt/zookeeper/svr/zookeeper-3.4.8/bin/zookeeper.out文件具體查看異常信息

另:jps查看進程:QuorumPeerMain是zookeeper進程
zookeeper常用命令:
啟動:
./zkServer.sh start
查看狀態:
./zkServer.sh status
停止:
./zkServer.sh stop
重啟:
./zkServer.sh restart
連接服務器
./zkCli.sh -server HostNameOrIP:2181
3.SolrCloud配置
(注意將下面配置中的master、tom、harry更改成自己的主機名或IP地址,文件夾地址對應修改成相應的文件夾哦~)
1.solrcloud文件夾准備,solrcloud文件夾儲存的是打算上傳到zookeeper中統一管理的solr配置文件
創建solrcloud文件夾,可以在自己喜歡的位置,我的是/opt/tomcat/solrcloud
在solrcloud文件夾下創建solr-lib目錄和config-files目錄,即/opt/tomcat/solrcloud/solr-lib和/opt/tomcat/solrcloud/config-files
把 solr/WEB-INF/lib下的所有 jar包拷貝到/opt/tomcat/solrcloud/solr-lib目錄
把solr/example/solr/collection1/conf下的所有文件拷貝到/opt/tomcat/solrcloud/config-files目錄
2.把solrhome中的配置文件上傳到zookeeper集群
java -classpath .:/opt/tomcat/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost master:2181,tom:2181,harry:2181 -confdir /opt/tomcat/solrcloud/config-files/ -confname myconf
3.指定collection1使用myconf配置
java -classpath .:/opt/tomcat/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection collection1 -confname myconf -zkhost master:2181,tom:2181,harry:2181
4.更改tomcat配置文件catalina.sh
/opt/tomcat/apache-tomcat-7.0.70/bin/catalina.sh文件在第一行增加:
JAVA_OPTS="-DzkHost=master:2181,tom:2181,harry:2181"
5.更改solr.xml配置文件
注意:不要在其它系統創建更改之后再上傳到虛擬機,因為solr.xml文件在solrcloud分片等操作時會被更改,如果在其它系統創建更改后上傳系統權限不足或文件格式不對會導致系統無法對此文件進行操作,造成無法分片無法創建core等。
/opt/tomcat/apache-tomcat-7.0.70/webapps/solrhome/solr.xml文件內容如下:
<?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>
6.此處基本的solrcloud集群就搭建配置完畢,將配置好的包括solr項目的tomcat分別復制到其它兩台虛擬機
首先啟動zookeeper再啟動tomcat,進入瀏覽器輸入solr項目部署地址,出現如下界面則搭建成功(比單機版多了個cloud)
**
**
