SolrCloud(solr 雲)是 Solr 提供的分布式搜索方案,當你需要大規模,容錯,索引量很大,搜索請求並發很高時可以使用SolrCloud。它是基於 Solr 和Zookeeper的分布式搜索方案,它的主要思想是使用 Zookeeper作為集群的配置信息中心。它有幾個特色功能:
1)集中式的配置信息
2)自動容錯
3)近實時搜索
4)查詢時自動負載均衡
SolrCloud系統架構圖:
我們可以看到上面的結構圖是 4個solr組成一個solrcloud,每個solr里只有一個core,一個shard指向2個solr服務,一主一從,以zookeeper集群作為注冊中心。
【1】物理結構
4個 Solr 實例( 每個實例包括1個 Core 也可以多個),組成一個 SolrCloud。
【2】邏輯結構
索引集合包括兩個 Shard分片(shard1 和 shard2),shard1 和 shard2 分別由4個Core 組成,其中一個 Leader 兩個 Replication,Leader 是由 zookeeper 選舉產生,zookeeper 控制每個shard上的Core 的索引數據一致,解決高可用問題。用戶發起索引請求分別從 shard1 和 shard2 上獲取,解決高並發問題。
【2.1】Collection
Collection 在 SolrCloud 集群中是一個邏輯意義上的完整的索引結構。它常常被划分為一個或多個 Shard(分片),它們使用相同的配置信息。比如:針對商品信息搜索可以創建一個 collection。即: collection=shard1+shard2+....+shardX
【2.2】 Core
每個 Core 是 Solr 中一個獨立運行單位,提供索引和搜索服務。一個 shard 需要由一個Core 或多個 Core 組成。由於 collection 由多個 shard 組成所以 collection 一般由多個 core 組成。
【2.3】Master 或 Slave
Master 是 master-slave 結構中的主結點(通常說主服務器),Slave 是 master-slave 結構中的從結點(通常說從服務器或備服務器)。同一個 Shard 下 master 和 slave 存儲的數據是一致的,這是為了達到高可用目的。
【2.4】Shard
Collection 的邏輯分片。每個 Shard 被化成一個或者多個 replication,通過選舉確定哪個是 Leader。
安裝步驟
准備工作 1. 安裝好jdk和zookeeper 2. 在win上安裝好了solr 這些准備工作都可以在樓主的Linux入門安裝分類里面找到。
- 把配置好的solr復制成4份,修改每個tomcat的原運行端口8085 8080 8009 ,分別為
8105 8180 8109
8205 8280 8209
8305 8380 8309
8405 8480 8409
因為我們是偽集群所以要靠端口區分,如果是真實集群運行在不同服務器上,它們的ip不同,是不需要改tomcat端口的。
2. 我們是用zk作為solr的管理中心,所以要修改tomcat/bin/catalina.sh的運行參數。4個文件都一樣!
3. 修改4個solrhome的配置文件
4. 剛剛三步已經把所有的准備工作都做完了,接下來我們把solr全部署到服務器上面去。
4.1 創建文件夾 mkdir /usr/local/wulei/solrcloud 把,4個solr服務和solr原生文件全上傳到該文件夾里面,。
4.2 解壓這4個文件
unzip solr1.zip
unzip solr2.zip
unzip solr3.zip
unzip solr4.zip
5. 給4個solr分別指定solrhome的路徑, 我這里以第一個為例:
vim /usr/local/wulei/solrcloud/solr1/webapps/solr/WEB-INF/web.xml
6. 經過上面 5 步,solr就配置好了。為了讓zookeeper 統一管理配置文件。需要把剛剛mysolrhome/collection1/conf 目錄上傳到zookeeper中。(主要是solrCloud的核心配置文件solrconfig.xml和schema.xml),由於我們4個solr的solrhome都一樣,所以我們這里無論傳哪一個都一樣。當我們上傳到zk管理之后,solr本地的配置屬性就失效了,而是直接讀取zk的配置。我們下載solr時,它里面內置了工具上傳配置文件:solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh。我們剛剛上傳的solr-4.10.3.tgz.tgz就是做這個事的。
6.1 解壓 tar -zxvf solr-4.10.3.tgz.tgz
6.2 進入zkcli.sh所在目錄: cd /usr/local/wulei/solrcloud/solr-4.10.3/example/scripts/cloud-scripts
6.3 執行上傳命令: (必須保證連接的zookeeper已經啟動了)
./zkcli.sh -zkhost 192.168.25.100:2181,192.168.25.100:2182,192.168.25.100:2183 -cmd upconfig -confdir /usr/local/wulei/solrcloud/solr1/mysolrhome/collection1/conf -confname mysolrconf
6.4 分別啟動4個solr服務。(瀏覽器連接有點慢,樓主這里花了大概45秒)
【分片配置】
1. 創建新的 Collection 進行分片處理。 在瀏覽器輸入以下地址,可以按照我們的要求 創建新的Collection http://192.168.25.100:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2 參數: name:將被創建的集合的名字 numShards:分片的個數 replicationFactor:從節點的個數。
刪除分片規則 http://192.168.25.100:8280/solr/admin/collections?action=DELETE&name=collection1
【模擬集群異常測試】
(1)停止第一個tomcat節點,看查詢是否能正常工作 -- 能!因為還有從節點
(2)停止第三個tomcat節點,看看查詢能夠正常工作 -- 不能,因為整個一片數據全沒了,無法正常工作。
(3)恢復第三個tomcat節點,看看能否正常工作。恢復時間會比較長,大概2分半到3分鍾之間。請耐心等待。