Linux搭建solr集羣

1   Solr集羣

1.1  什麼是SolrCloud

 

SolrCloud(solr 雲)是Solr提供的分佈式搜索方案,當你需要大規模,容錯,分佈式索引和檢索能力時使用 SolrCloud。當一個系統的索引數據量少的時候是不需要使用SolrCloud的,當索引量很大,搜索請求併發很高,這時需要使用SolrCloud來滿足這些需求。

 SolrCloud是基於Solr和Zookeeper的分佈式搜索方案,它的主要思想是使用Zookeeper作爲集羣的配置信息中心。

它有幾個特色功能:

1)集中式的配置信息

2)自動容錯

3)近實時搜索

4)查詢時自動負載均衡

 

1.1.1   zookeeper是個什麼玩意?

顧名思義zookeeper就是動物園管理員,他是用來管hadoop(大象)、Hive(蜜蜂)、pig(小豬)的管理員, Apache Hbase和 Apache Solr 的分佈式集羣都用到了zookeeper;Zookeeper:是一個分佈式的、開源的程序協調服務,是hadoop項目下的一個子項目。

 

1.1.2   Zookeeper可以幹哪些事情

1、配置管理

在我們的應用中除了代碼外,還有一些就是各種配置。比如數據庫連接等。一般我們都是使用配置文件的方式,在代碼中引入這些配置文件。但是當我們只有一種配置,只有一臺服務器,並且不經常修改的時候,使用配置文件是一個很好的做法,但是如果我們配置非常多,有很多服務器都需要這個配置,而且還可能是動態的話使用配置文件就不是個好主意了。這個時候往往需要尋找一種集中管理配置的方法,我們在這個集中的地方修改了配置,所有對這個配置感興趣的都可以獲得變更。比如我們可以把配置放在數據庫裏,然後所有需要配置的服務都去這個數據庫讀取配置。但是,因爲很多服務的正常運行都非常依賴這個配置,所以需要這個集中提供配置服務的服務具備很高的可靠性。一般我們可以用一個集羣來提供這個配置服務,但是用集羣提升可靠性,那如何保證配置在集羣中的一致性呢?這個時候就需要使用一種實現了一致性協議的服務了。Zookeeper就是這種服務,它使用Zab這種一致性協議來提供一致性。現在有很多開源項目使用Zookeeper來維護配置,比如在HBase中,客戶端就是連接一個Zookeeper,獲得必要的HBase集羣的配置信息,然後纔可以進一步操作。還有在開源的消息隊列Kafka中,也使用Zookeeper來維護broker的信息。在Alibaba開源的SOA框架Dubbo中也廣泛的使用Zookeeper管理一些配置來實現服務治理。

2、名字服務

名字服務這個就很好理解了。比如爲了通過網絡訪問一個系統,我們得知道對方的IP地址,但是IP地址對人非常不友好,這個時候我們就需要使用域名來訪問。但是計算機是不能是別域名的。怎麼辦呢?如果我們每臺機器裏都備有一份域名到IP地址的映射,這個倒是能解決一部分問題,但是如果域名對應的IP發生變化了又該怎麼辦呢?於是我們有了DNS這個東西。我們只需要訪問一個大家熟知的(known)的點,它就會告訴你這個域名對應的IP是什麼。在我們的應用中也會存在很多這類問題,特別是在我們的服務特別多的時候,如果我們在本地保存服務的地址的時候將非常不方便,但是如果我們只需要訪問一個大家都熟知的訪問點,這裏提供統一的入口,那麼維護起來將方便得多了。

3、分佈式鎖

其實在第一篇文章中已經介紹了Zookeeper是一個分佈式協調服務。這樣我們就可以利用Zookeeper來協調多個分佈式進程之間的活動。比如在一個分佈式環境中,爲了提高可靠性,我們的集羣的每臺服務器上都部署着同樣的服務。但是,一件事情如果集羣中的每個服務器都進行的話,那相互之間就要協調,編程起來將非常複雜。而如果我們只讓一個服務進行操作,那又存在單點。通常還有一種做法就是使用分佈式鎖,在某個時刻只讓一個服務去幹活,當這臺服務出問題的時候鎖釋放,立即fail over到另外的服務。這在很多分佈式系統中都是這麼做,這種設計有一個更好聽的名字叫Leader Election(leader選舉)。比如HBase的Master就是採用這種機制。但要注意的是分佈式鎖跟同一個進程的鎖還是有區別的,所以使用的時候要比同一個進程裏的鎖更謹慎的使用。

4、集羣管理

在分佈式的集羣中,經常會由於各種原因,比如硬件故障,軟件故障,網絡問題,有些節點會進進出出。有新的節點加入進來,也有老的節點退出集羣。這個時候,集羣中其他機器需要感知到這種變化,然後根據這種變化做出對應的決策。比如我們是一個分佈式存儲系統,有一箇中央控制節點負責存儲的分配,當有新的存儲進來的時候我們要根據現在集羣目前的狀態來分配存儲節點。這個時候我們就需要動態感知到集羣目前的狀態。還有,比如一個分佈式的SOA架構中,服務是一個集羣提供的,當消費者訪問某個服務時,就需要採用某種機制發現現在有哪些節點可以提供該服務(這也稱之爲服務發現,比如Alibaba開源的SOA框架Dubbo就採用了Zookeeper作爲服務發現的底層機制)。還有開源的Kafka隊列就採用了Zookeeper作爲Cosnumer的上下線管理。

1.2  Solr集羣的結構


1.3 Solr集羣的搭建

本教程的這套安裝是單機版的安裝,所以採用僞集羣的方式進行安裝,如果是真正的生產環境,將僞集羣的ip改下就可以了,步驟是一樣的。

SolrCloud結構圖如下:


需要三個zookeeper節點

四個solr節點。

 共7臺服務器

使用僞分佈式實現solr集羣。需要三個zookeeper實例,4個tomcat實例,可以在一臺虛擬機上模擬。建議虛擬機1G以上內存。

1.1  Zookeeper集羣的搭建

1.1.1   前提條件

三個zookeeper實例。Zookeeper也是java開發的所以需要安裝jdk。

1、Linux系統

2、Jdk環境。

3、Zookeeper。

 

1.1.2   Zookeeper的安裝步驟

第一步:把zookeeper的安裝包上傳到服務器

第二步:解壓縮。

[root@bogon ~]# tar -zxfzookeeper-3.4.6.tar.gz

[root@bogon ~]#

第三步:在/usr/local/目錄下創建一個solrcloud目錄。把zookeeper解壓後的文件夾複製到此目錄下三份。分別命名爲zookeeper1、2、3

[root@bogon ~]# mkdir /usr/local/solrcloud

[root@bogon ~]# mv zookeeper-3.4.6/usr/local/solrcloud/zookeeper1

[root@bogon ~]# cd /usr/local/solrcloud

[root@bogon solrcloud]# ll

total 4

drwxr-xr-x. 10 1000 1000 4096 Feb 20  2014 zookeeper1

[root@bogon solrcloud]# cp -r zookeeper1/zookeeper2

[root@bogon solrcloud]# cp -r zookeeper1/zookeeper3

[root@bogon solrcloud]#

第四步:配置zookeeper。

1、在每個zookeeper文件夾下創建一個data目錄。

2、在data文件夾下創建一個文件名稱爲myid,文件的內容就是此zookeeper的編號1、2、3

[root@bogon data]# echo 1 >> myid

[root@bogon data]# ll

total 4

-rw-r--r--. 1 root root 2 Sep 17 23:43myid

[root@bogon data]# cat myid

1

[root@bogon data]#

 

在zookeeper2、3文件夾下分別創建data目錄和myid文件

[root@bogon solrcloud]# mkdir zookeeper2/data

[root@bogon solrcloud]# echo 2 >> zookeeper2/data/myid

[root@bogon solrcloud]# ll zookeeper2/data

total 4

-rw-r--r--. 1 root root 2 Sep 17 23:44 myid

[root@bogon solrcloud]# cat zookeeper2/data/myid

2

[root@bogon solrcloud]# mkdir zookeeper3/data        

[root@bogon solrcloud]# echo 3 >> zookeeper3/data/myid

[root@bogon solrcloud]#

3、把zookeeper1下conf目錄下的zoo_sample.cfg文件複製一份改名爲zoo.cfg

4、修改zoo.cfg的配置,zookeeper2、zookeeper3同樣需要配置

第五步:啓動全部zookeeper。進入zookeeper1/bin目錄下。

啓動zookeeper:./zkServer.sh start

關閉:./zkServer.shstop

查看狀態:./zkServer.shstatus

[root@bogon solrcloud]#zookeeper1/bin/zkServer.sh status

JMX enabled by default

Using config:/usr/local/solrcloud/zookeeper1/bin/../conf/zoo.cfg

Mode: follower

[root@bogon solrcloud]#zookeeper2/bin/zkServer.sh status

JMX enabled by default

Using config:/usr/local/solrcloud/zookeeper2/bin/../conf/zoo.cfg

Mode: leader

[root@bogon solrcloud]#zookeeper3/bin/zkServer.sh status

JMX enabled by default

Using config: /usr/local/solrcloud/zookeeper3/bin/../conf/zoo.cfg

Mode: follower

[root@bogon solrcloud]# 


1.1  Solr實例的搭建

第一步:創建4個tomcat實例,修改其端口。8080-8083

第二步:解壓solr-4.10.3.tar.gz壓縮包。從壓縮包中複製solr.war到tomcat。

第三步:啓動tomcat解壓war包。把solr-4.10.3目錄下example目錄下的關於日誌相關的jar包添加到solr工程中。

第四步:創建solrhome。修改web.xml指定solrhome的位置。

 (實際上是創建4個單機版solr 不懂的童鞋看這個鏈接  http://blog.csdn.net/xzk821648509/article/details/78093970

1.2  solr集羣的搭建

1.2.1   第一步

把solrhome中的配置文件上傳到zookeeper集羣。使用zookeeper的客戶端上傳。

客戶端命令位置:/root/solr-4.10.3/example/scripts/cloud-scripts

 

./zkcli.sh -zkhost 192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183 -cmd upconfig -confdir /usr/local/solrcloud/solrhome1/collection1/conf -confname myconf

 

查看配置文件是否上傳成功:

[root@bogon bin]# cd /usr/local/solrcloud/zookeeper1/bin

[root@bogon bin]# ./zkCli.sh

Connecting to localhost:2181

[zk: localhost:2181(CONNECTED) 0] ls /

[configs, zookeeper]

[zk: localhost:2181(CONNECTED) 1] ls/configs

[myconf]

[zk: localhost:2181(CONNECTED) 2] ls/configs/myconf (myconf這文件是上zookeep上傳配置文件時創建的)

[admin-extra.menu-top.html, currency.xml,protwords.txt, mapping-FoldToASCII.txt, _schema_analysis_synonyms_english.json,_rest_managed.json, solrconfig.xml, _schema_analysis_stopwords_english.json, stopwords.txt,lang, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt,synonyms.txt, scripts.conf, update-script.js, velocity, elevate.xml,admin-extra.menu-bottom.html, clustering, schema.xml]

[zk: localhost:2181(CONNECTED) 3]

1.2.2   第二步

修改solrhome下的solr.xml文件,指定當前實例運行的ip地址及端口號。

1.2.3   第三步

修改每一臺solr的tomcat 的 bin目錄下catalina.sh文件中加入DzkHost指定zookeeper服務器地址:

JAVA_OPTS="-DzkHost=192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"


(可以使用vim的查找功能查找到JAVA_OPTS的定義的位置,然後添加)

 

1.2.4   第四步

重新啓動tomcat。


一個主節點多個備份節點,集羣只有一片。

 

1.2.5   第五步

創建一個兩片的collection,每片是一主一備。

 

使用以下命令創建:

http://192.168.25.154:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2


1.2.6   第六步

刪除collection1.

http://192.168.25.154:8080/solr/admin/collections?action=DELETE&name=collection1



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章