liunx安裝集羣版solr

1.SolrCloud介紹
1.1.SolrCloud簡介
SolrCloud(solr 雲)是Solr提供的分佈式搜索方案,當你須要大規模,容錯,分佈式索引和檢索能力時使用 SolrCloud。當一個系統的索引數據量少的時候是不須要使用SolrCloud的,當索引量很大,搜索請求併發很高,這時須要使用SolrCloud來知足這些需求。
SolrCloud是基於Solr和Zookeeper的分佈式搜索方案,它的主要思想是使用Zookeeper做爲集羣的配置信息中心。
它有幾個特點功能:
1)集中式的配置信息
2)自動容錯
3)近實時搜索
4)查詢時自動負載均衡
1.2.Zookeeper簡介
Zookeeper直譯是 動物園管理員,他是用來管hadoop(大象)、Hive(蜜蜂)、pig(小豬)的管理員, Apache Hbase和 Apache Solr 的分佈式集羣都用到了zookeeper;zookeeper是一個分佈式的、開源的程序協調服務,是hadoop項目下的一個子項目。
1.3.Zookeeper功能
1.3.1.配置管理
在咱們的應用中除了代碼外,還有一些就是各類配置。好比數據庫鏈接等。通常咱們都是使用配置文件的方式,在代碼中引入這些配置文件。可是當咱們只有一種配置,只有一臺服務器,而且不常常修改的時候,使用配置文件是一個很好的作法,可是若是咱們配置很是多,有不少服務器都須要這個配置,並且還多是動態的話使用配置文件就不是個好主意了。這個時候每每須要尋找一種集中管理配置的方法,咱們在這個集中的地方修改了配置,全部對這個配置感興趣的均可以得到變動。好比咱們能夠把配置放在數據庫裏,而後全部須要配置的服務都去這個數據庫讀取配置。可是,由於不少服務的正常運行都很是依賴這個配置,因此須要這個集中提供配置服務的服務具有很高的可靠性。通常咱們能夠用一個集羣來提供這個配置服務,可是用集羣提高可靠性,那如何保證配置在集羣中的一致性呢? 這個時候就須要使用一種實現了一致性協議的服務了。Zookeeper就是這種服務,它使用Zab這種一致性協議來提供一致性。如今有不少開源項目使用Zookeeper來維護配置,好比在HBase中,客戶端就是鏈接一個Zookeeper,得到必要的HBase集羣的配置信息,而後才能夠進一步操做。還有在開源的消息隊列Kafka中,也使用Zookeeper來維護broker的信息。在Alibaba開源的SOA框架Dubbo中也普遍的使用Zookeeper管理一些配置來實現服務治理。
1.3.2.名字服務
名字服務這個就很好理解了。好比爲了經過網絡訪問一個系統,咱們得知道對方的IP地址,可是IP地址對人很是不友好,這個時候咱們就須要使用域名來訪問。可是計算機是不能識別域名的。怎麼辦呢?若是咱們每臺機器裏都備有一份域名到IP地址的映射,這個卻是能解決一部分問題,可是若是域名對應的IP發生變化了又該怎麼辦呢?因而咱們有了DNS這個東西。咱們只須要訪問一個你們熟知的(known)的點,它就會告訴你這個域名對應的IP是什麼。在咱們的應用中也會存在不少這類問題,特別是在咱們的服務特別多的時候,若是咱們在本地保存服務的地址的時候將很是不方便,可是若是咱們只須要訪問一個你們都熟知的訪問點,這裏提供統一的入口,那麼維護起來將方便得多了。
1.3.3.分佈式鎖
在第一簡介中已經介紹了Zookeeper是一個分佈式協調服務。這樣咱們就能夠利用Zookeeper來協調多個分佈式進程之間的活動。好比在一個分佈式環境中,爲了提升可靠性,咱們的集羣的每臺服務器上都部署着一樣的服務。可是,一件事情若是集羣中的每一個服務器都進行的話,那相互之間就要協調,編程起來將很是複雜。而若是咱們只讓一個服務進行操做,那又存在單點。一般還有一種作法就是使用分佈式鎖,在某個時刻只讓一個服務去幹活,當這臺服務出問題的時候鎖釋放,當即fail over到另外的服務。這在不少分佈式系統中都是這麼作,這種設計有一個更好聽的名字叫Leader Election(leader選舉)。好比HBase的Master就是採用這種機制。但要注意的是分佈式鎖跟同一個進程的鎖仍是有區別的,因此使用的時候要比同一個進程裏的鎖更謹慎的使用。
1.3.4.集羣管理
在分佈式的集羣中,常常會因爲各類緣由,好比硬件故障,軟件故障,網絡問題,有些節點會進進出出。有新的節點加入進來,也有老的節點退出集羣。這個時候,集羣中其餘機器須要感知到這種變化,而後根據這種變化作出對應的決策。好比咱們是一個分佈式存儲系統,有一箇中央控制節點負責存儲的分配,當有新的存儲進來的時候咱們要根據如今集羣目前的狀態來分配存儲節點。這個時候咱們就須要動態感知到集羣目前的狀態。還有,好比一個分佈式的SOA架構中,服務是一個集羣提供的,當消費者訪問某個服務時,就須要採用某種機制發現如今有哪些節點能夠提供該服務(這也稱之爲服務發現,好比Alibaba開源的SOA框架Dubbo就採用了Zookeeper做爲服務發現的底層機制)。還有開源的Kafka隊列就採用了Zookeeper做爲Consumer的上下線管理。
1.4.SolrCloud結構
SolrCloud爲了下降單機的處理壓力,須要由多臺服務器共同來完成索引和搜索任務。實現的思路是將索引數據進行Shard(分片)拆分,每一個分片由多臺的服務器共同完成,當一個索引或搜索請求過來時會分別從不一樣的Shard的服務器中操做索引。
SolrCloud須要Solr基於Zookeeper部署,Zookeeper是一個集羣管理軟件,因爲SolrCloud須要由多臺服務器組成,由zookeeper來進行協調管理。java

下圖是一個SolrCloud應用的例子:web

對上圖進行圖解,以下:數據庫

1.4.1.物理結構
三臺Solr物理機服務器( 每臺服務器包括兩個solr core(solr應用服務器 包括完整的索引和搜索)),組成一個SolrCloud。
1.4.2.邏輯結構
索引集合包括兩個Shard(shard1和shard2),shard1和shard2分別由三個Core(solr應用服務器(tomcat))組成,其中一個Leader兩個Replication,Leader是由zookeeper選舉產生,zookeeper控制每一個shard上三個Core的索引數據一致,解決高可用問題。用戶發起索引請求分別從shard1和shard2上獲取,解決高併發問題。編程

一、Collection
Collection在SolrCloud集羣中是一個邏輯意義上的完整的索引結構。它經常被劃分爲一個或多個Shard(分片),它們使用相同的配置信息。
好比:針對商品信息搜索能夠建立一個collection。
collection=shard1+shard2+....+shardXvim

二、Core
每一個Core是Solr中一個獨立運行單位,提供 索引和搜索服務。一個shard須要由一個Core或多個Core組成。因爲collection可由多個shard組成,因此collection通常由多個core組成。tomcat

三、Master/Slave
Master是master-slave結構中的主結點(一般說主服務器),Slave是master-slave結構中的從結點(一般說從服務器或備服務器)。同一個Shard下master和slave存儲的數據是一致的,這是爲了達到高可用目的。服務器

四、Shard
Collection的邏輯分片。每一個Shard被化成一個或者多個replication,經過選舉肯定哪一個是Leader。
2.SolrCloud搭建
2.1.搭建架構分析網絡

2.1.1.兩大組成部分
一、zookeeper集羣
a)zookeeper須要保證高可用,須要搭建集羣
b)zookeeper須要進行投票和選舉機制,最少須要三個節點
c)zookeeper的三個節點,注意修改端口號不同架構

二、Solr集羣
a)須要四個節點(solr應用服務器);
b)四臺tomcat部署4個 solr應用服務器
c)整個collection分紅兩個分片,每一個分片都由兩個服務器組成,master和slave
2.1.2.環境
Linux:CentOS6.5 32位
Jdk:1.7以上版本
2.2.zookeeper集羣搭建
2.2.1.複製併發

複製三份zookeeper

cd /root/software

解壓

tar -zvxf zookeeper-3.4.6.tar.gz

mkdir /usr/local/solr/solr-cloud/

cp -r zookeeper-3.4.6 /usr/local/solr/solr-cloud/zookeeper01 && cp -r zookeeper-3.4.6 /usr/local/solr/solr-cloud/zookeeper02 && cp -r zookeeper-3.4.6 /usr/local/solr/solr-cloud/zookeeper03

cd /usr/local/solr/solr-cloud/

2.2.2.配置
2.2.2.1.給每一個zookeeper建立data文件夾

對/usr/local/solr/solr-cloud目錄下的3個zookeeper建立data文件夾

mkdir zookeeper01/data && mkdir zookeeper02/data && mkdir zookeeper03/data

2.2.2.2.給每一個zookeeper建立myid文件

對/usr/local/solr/solr-cloud目錄下的3個zookeeper建立 myid 文件,並分別寫入1,2,3

vi zookeeper01/data/myid

對上述文件寫入數字 1

vim zookeeper02/data/myid

對上述文件寫入數字 2

vim zookeeper03/data/myid

對上述文件寫入數字 3

2.2.2.3.重命名每一個zookeeper配置文件

mv zookeeper01/conf/zoo_sample.cfg zookeeper01/conf/zoo.cfg
mv zookeeper02/conf/zoo_sample.cfg zookeeper02/conf/zoo.cfg
mv zookeeper03/conf/zoo_sample.cfg zookeeper03/conf/zoo.cfg

2.2.2.4.修改每一個zookeeper配置文件
修改dataDir(每一個zookeeper對應路徑;
如/usr/local/solr/solr-cloud/zookeeper01/data)

修改clientPort端口號(每一個不一樣三臺對應3181,3182,3183)

在三個配置文件底部都加上:
server.1=192.168.12.168:2881:3881
server.2=192.168.12.168:2882:3882
server.3=192.168.12.168:2883:3883

vim zookeeper01/conf/zoo.cfg
修改後效果以下:

vim zookeeper02/conf/zoo.cfg
修改後效果以下:

vim zookeeper03/conf/zoo.cfg
修改後效果以下:

2.2.3.啓動
zookeeper01/bin/zkServer.sh start
zookeeper02/bin/zkServer.sh start
zookeeper03/bin/zkServer.sh start
zookeeper01/bin/zkServer.sh start

zookeeper02/bin/zkServer.sh start

zookeeper03/bin/zkServer.sh start

若是啓動失敗,能夠在啓動命令以後添加start-foreground;查看啓動失敗日誌。
2.2.4.查看狀態
./zookeeper01/bin/zkServer.sh status
./zookeeper02/bin/zkServer.sh status
./zookeeper03/bin/zkServer.sh status
./zookeeper01/bin/zkServer.sh status

./zookeeper02/bin/zkServer.sh status

./zookeeper03/bin/zkServer.sh status

2.4.搭建solr集羣
按照上述搭建架構;須要4個solr應用服務器。
2.4.1.把solrhome複製到solr-cloud目錄下,複製4份
cd /usr/local/solr/

cp -r solrhome/ solr-cloud/solrhome01
cp -r solrhome/ solr-cloud/solrhome02
cp -r solrhome/ solr-cloud/solrhome03
cp -r solrhome/ solr-cloud/solrhome04

2.4.2.安裝(複製)4個tomcat

複製4個以前安裝的單機版的solr

cp -r tomcat/ solr-cloud/tomcat-solr01
cp -r tomcat/ solr-cloud/tomcat-solr02
cp -r tomcat/ solr-cloud/tomcat-solr03
cp -r tomcat/ solr-cloud/tomcat-solr04

2.4.3.修改tomcat端口號8081~8084
cd solr-cloud

server.xml須要修改3個地方的端口號(server port(第22行)、http port(第71行)、connector port(第93行));與其它tomcat的不衝突就好,端口依次能夠爲(8001,8081,8011;8002,8082,8012;8003,8083,8013;8004,8084,8014)

vi tomcat-solr01/conf/server.xml

以下圖第一個Tomcat爲例,修改三個端口號8001,8081,8011,其餘Tomcat相似(8002,8082,8012;8003,8083,8013;8004,8084,8014)

vi tomcat-solr02/conf/server.xml
vi tomcat-solr03/conf/server.xml
vi tomcat-solr04/conf/server.xml

2.4.4.修改每一個solr的web.xml
4個tomcat都要修改成對應的solrhome
vi tomcat-solr01/webapps/solr/WEB-INF/web.xml
vi tomcat-solr02/webapps/solr/WEB-INF/web.xml
vi tomcat-solr03/webapps/solr/WEB-INF/web.xml
vi tomcat-solr04/webapps/solr/WEB-INF/web.xml

修改第43行的solrhome路徑
例如 /usr/local/solr/solr-cloud/solrhome01
效果:

其它3個也相似修改。

2.4.5.修改每一個solrhome裏面的solr.xml
vi solrhome01/solr.xml

vi solrhome02/solr.xml
vi solrhome03/solr.xml
vi solrhome04/solr.xml

第32的host的內容修改成192.168.12.168【注意】原來的爲${host:}
第33行hostPort的內容修改成8081【注意】原來的爲${jetty.port:8983};另外修改的端口號應該對應每臺tomcat的端口號。

如solrhome01須要修改成8081,其餘的依次爲808二、808三、8084

修改前:

修改後:

其它3個solr.xml相似的修改。

2.4.6.上傳配置文件到zookeeper集羣

進入/usr/local/solr/solr-4.10.3/example/scripts/cloud-scripts,執行命令

cd /usr/local/solr/solr-4.10.3/example/scripts/cloud-scripts

下載安裝zip、unzip命令

yum install -y unzip zip

須要運行的如下命令,須要修改IP地址和修改solrcore的路徑地址

./zkcli.sh -zkhost 192.168.12.168:3181,192.168.12.168:3182,192.168.12.168:3183 -cmd upconfig -confdir /usr/local/solr/solr-cloud/solrhome01/collection1/conf -confname myconf

zookeeper是作配置文件的集中管理,
以上命令的做用是把配置文件上傳給zookeeper,由zookeeper管理配置文件
zookeeper把全部的solr集羣的配置文件進行統一管理

2.4.7.查看zookeeper配置文件

進入任意zookeeper,使用客戶端進行查看

cd /usr/local/solr/solr-cloud/zookeeper01/bin

./zkCli.sh -server 192.168.12.168:3181

執行上面命令後,使用ls命令查看zookeeper配置信息,再出來的界面分別輸入。。按ctrl+c退出

ls /

ls /configs

ls /configs/myconf

2.4.8.設置zookeeper的地址給tomcat

須要修改每一個Tomcat的bin/catalina.sh文件

cd /usr/local/solr/solr-cloud/

vi tomcat-solr01/bin/catalina.sh
vi tomcat-solr02/bin/catalina.sh
vi tomcat-solr03/bin/catalina.sh
vi tomcat-solr04/bin/catalina.sh

如tomcat01,其餘Tomcat都同樣設置,第235行添加JAVA_OPTS,即以下內容:

JAVA_OPTS="-DzkHost=192.168.12.168:3181,192.168.12.168:3182,192.168.12.168:3183"

2.4.9.啓動全部tomcat
cd /usr/local/solr/solr-cloud/
./tomcat-solr01/bin/startup.sh
./tomcat-solr02/bin/startup.sh
./tomcat-solr03/bin/startup.sh
./tomcat-solr04/bin/startup.sh

2.4.10.訪問solr集羣
訪問任意一個solr集羣的節點均可以

如http://192.168.12.168:8081/solr

2.4.11.集羣分片
集羣中有四個solr節點建立新集羣testSolrCloud(名字能夠自行取,不要原有的重複便可),將集羣分爲兩片,每片一個副本。
http://192.168.12.168:8081/solr/admin/collections?action=CREATE&name=pinyougou&numShards=2&replicationFactor=2

2.4.12.刪除原來的solrcore
http://192.168.12.168:8081/solr/admin/collections?action=DELETE&name=collection1

2.4.13.查看分片信息
索引分片後:同一個分片的solr的索引數目是相同的;在不一樣的分片的數據總數通常不相同,整個索引庫的數目是全部分片的數據總和。

8081/8084是一個分片的,它們的數據與8082/8083的分片數據不同

相關文章
相關標籤/搜索