SolrCloud階段總結
| 開發類型 |
全文檢索相關開發 |
|
| Solr版本 |
4.2 |
|
| 文件內容 |
本文介紹SolrCloud的功能使用及相關注意事項 |
|
| 在代碼文本框中如有顯示不全的,請在文本框中按Ctrl+A再復制. |
||
| 版本 |
作者/修改人 |
日期 |
| V1.0 |
gzk |
2013-06-04 |
SolrCloud是基於Solr和Zookeeper的分布式搜索方案,是Solr4.X的核心組件之一,它的主要思想是使用Zookeeper作為集群的配置信息中心。
基本可以用上面這幅圖來概述,這是一個擁有4個Solr節點的集群,索引分布在兩個Shard里面,每個Shard包含兩個Solr節點,一個是Leader節點,一個是Replica節點,此外集群中有一個負責維護集群狀態信息的Overseer節點,它是一個總控制器。集群的所有狀態信息都放在Zookeeper集群中統一維護。從圖中還可以看到,任何一個節點都可以接收索引更新的請求,然后再將這個請求轉發到文檔所應該屬於的那個Shard的Leader節點,Leader節點更新同時把文檔轉發給同屬於一個Shard的所有replicas節點。
SolrCloud有幾個特色功能:
1)集中配置
2)自動容錯
3)負載均衡 。
SolrCloud的配置過程
這里為了方便建了4個bat文件並分別命名為對應的角色,先說一下配置的參數:
| 參數名 |
說明 |
| -Dbootstrap_confdir |
是上傳本地的配置文件上傳到zookeeper中去,作為整個集群共用的配置文件 |
| -Dcollection.configName |
是上傳的Solr配置在集群中的名了,如不指定默認為collection1 |
| -DzkRun |
啟動一個嵌入式的Zookeeper服務器,它會作為solr服務器的一部分 |
| -DnumShards |
指定了集群的邏輯分組數目 |
| -DzkHost |
是指明了Zookeeper集群所在位置 |
- SolrCloudServer-Master-Zookeeper-Host.bat
|
java -Dbootstrap_confdir=./solr/skyCore/conf -Dcollection.configName=myconf -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -DnumShards=2 -jar start.jar |
上面的意思是啟動一個主SolrCloud服務同時啟動內嵌的Zookeeper服務,並上傳本地的Solr配置文件到Zookeeper集群中,其中還配置了3個Zookeeper服務器組成一個集群,確保Solr集群信息的高可用性和容錯性。當Zookeeper服務為3個以上時,能夠更好的實現容災問題,當為3個Zookeeper服務時掛掉其中一個Zookeeper集群服務還會正常運行,當為5個Zookeeper服務時掛掉兩個還是可以正常運行,就像盤陣的Raid機制一樣.只有當所有配置的Zookeeper服務都啟動后整個服務才會繼續運行下去.
- SolrCloudServer-Slave-Zookeeper-Host-7574.bat
|
java -Djetty.port=7574 -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar |
上面的意思是啟動一個主SolrCloud服務同時啟動內嵌的Zookeeper服務,其中還配置了3個Zookeeper服務器地址.
- SolrCloudServer-Slave-Zookeeper-Host-8900.bat
|
java -Djetty.port=8900 -DzkRun -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar |
上面的意思是啟動一個主SolrCloud服務同時啟動內嵌的Zookeeper服務,其中還配置了3個Zookeeper服務器地址.
- SolrCloudServer.bat
|
java -Djetty.port=7500 -DzkHost=localhost:9983,localhost:8574,localhost:9900 -jar start.jar |
上面的意思是啟動一個主SolrCloud服務.並配置了Zookeeper服務器所在. 當服務啟動成功后可以在管理界面中SolrCloud情況,通過Cloud->Tree可以查看當前詳細的服務情況,如圖:
通過上面的圖我們可以看到當前有兩個shard,每個shard下面有兩個節點,還可以看到剛才配置中指定的myconf名稱,點開后就可以看到上傳的配置文件了,點擊下面第一個節點都可以看到
集群狀態json:
|
{"skyCore":{ "shards":{ "shard1":{ "range":"80000000-ffffffff", "state":"active", "replicas":{ "10.0.4.84:8983_solr_skyCore":{ "shard":"shard1", "state":"active", "core":"skyCore", "collection":"skyCore", "node_name":"10.0.4.84:8983_solr", "base_url":"http://10.0.4.84:8983/solr"}, "10.0.4.84:7500_solr_skyCore":{ "shard":"shard1", "state":"active", "core":"skyCore", "collection":"skyCore", "node_name":"10.0.4.84:7500_solr", "base_url":"http://10.0.4.84:7500/solr", "leader":"true"}}}, "shard2":{ "range":"0-7fffffff", "state":"active", "replicas":{ "10.0.4.84:7574_solr_skyCore":{ "shard":"shard2", "state":"active", "core":"skyCore", "collection":"skyCore", "node_name":"10.0.4.84:7574_solr", "base_url":"http://10.0.4.84:7574/solr"}, "10.0.4.84:8900_solr_skyCore":{ "shard":"shard2", "state":"active", "core":"skyCore", "collection":"skyCore", "node_name":"10.0.4.84:8900_solr", "base_url":"http://10.0.4.84:8900/solr", "leader":"true"}}}}, "router":"compositeId"}} |
SolrCloud集中式的配置信息
SolrCloud集群的所有的配置存儲在ZooKeeper. 一旦SolrCloud節點啟動時配置了Dbootstrap_confdir參數, 該節點的配置信息將發送到ZooKeeper上存儲. 基它節點啟動時會應用ZooKeeper上的配置信息,這樣當我們改動配置時就不用一個個機子去更改了.
SolrCloud容災備份
Shard Replica除了作為容災備份存在, 另外一個作用就是分散查詢請求, 提高整個集群對查詢的負載能力.
SolrCloud索引處理
索引文檔的更新在Shard和Replica之間是自動和實時的.把一個doc可以發送到任何一個SolrCloud, 然后由SolrCloud完成剩下的事情. SolrCloud會自動選擇一個Shard進行分發任務,當一個Shard的leader收到文檔后同時也會把doc分發給當前Shard所有的副本.
SolrCloud檢索方式
有三種不同的檢索方式:
- 在所有Shared上進行檢索一個Core的數據
|
http://localhost:8983/solr/skyCore/select?q=*%3A* |
- 在指定的Shared上進行檢索一個Core的數據
|
http://localhost:8983/solr/skyCore/select?q=*%3A*&shards=shard1,shard2 |
- 也可以使用shard的地址作為參數
|
http://localhost:8983/solr/skyCore/select?q=*%3A*&shards= localhost:8983/solr,localhost:7574/solr |
- 在指定地址的Shared上進行檢索,並支持負載一個Core的數據
|
http://localhost:8983/solr/skyCore/select?q=*%3A*&shards=localhost:8983/solr|localhost:8900/solr,localhost:7574/solr|localhost:7500/solr |
- 在所有Shared上進行檢索指定的Core,並合並結果
|
http://localhost:8983/solr/skyCore/select?q=*%3A*&collection=TestCore,skyCore |
- 當有shard沒有啟動時查詢是會報錯的.為了讓查詢能正常進行,在查詢時加入參數shards.tolerant=true就可以正常查詢了.
|
http://localhost:8983/solr/skyCore/select?q=*%3A*&shards.tolerant=true |
SolrCloud的集合(SolrCores)管理API
- 添加集合
|
http://localhost:8983/solr/admin/collections?action=CREATE&name=mycollection&numShards=1&replicationFactor=4 |
| 參數名 |
說明 |
| Name |
要創建的集合名稱 |
| numShards |
指定集合Shard的數量 |
| replicationFactor |
指定每個Shard副本數量 |
| maxShardsPerNode |
每個Solr服務器節點上最大Shard數量 |
| createNodeSet |
還不明白什么用 |
| collection.configName |
配置的名稱(必須已存儲在ZooKeeper)使用這個新的集合。如果沒有提供創建操作將默認配置名稱的集合名稱。 |
- 刪除集合
|
http://localhost:8983/solr/admin/collections?action=DELETE&name=mycollection |
- 重新加載
|
http://localhost:8983/solr/admin/collections?action=RELOAD&name=mycollection |
動態添加SolrCore示例
在服務運行時新添加的MyCore分布在3個Shared上面每個兩個節點
|
http://localhost:8983/solr/admin/collections?action=CREATE&name=MyCore&numShards=3&replicationFactor=2 |
