說明: 本篇所有
curl
操作是在終端中進行的, 當然可以省去curl
和url
中的引號, 直接在瀏覽器的地址欄中發起HTTP請求, 效果更明顯.
1 創建Collection、Core
1.1 創建collection
直接在瀏覽器的URL地址欄進行操作, 命令如下:
http://localhost:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=3&replicationFactor=4
或者: 直接在終端的命令行中操作(注意curl之后的內容需要加單引號或雙引號):
curl 'http://localhost:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=3&replicationFactor=4'
上述方式創建的Collection中, Shard和Replica由Solr自動分配, 不能手動選擇具體的數據存放路徑、實例存放路徑.
1.2 創建core
手動指定實例存放路徑和數據存放路徑:
curl 'http://localhost:8080/solr/admin/cores?action=CREATE&name=my_collection-shard1-replica1&instanceDir=/usr/solr/my_collection-shard1-replica1&dataDir=/data_solr/my_collection-shard1-replica1&collection=my_collection&shard=shard1'
curl 'http://localhost:8080/solr/admin/cores?action=CREATE&name=my_collection-shard1-replica2&instanceDir=/usr/solr/my_collection-shard1-replica2&dataDir=/data_solr/my_collection-shard1-replica2&collection=my_collection&shard=shard1'
這樣可以創建出一個collection, 並自己指定該collection的shard和replica的所有配置項.
1.3 創建操作中的參數
(1) action: 要操作動作的名稱;
(2) name: 要創建的集合名稱;
(3) numShards: 集合分片的個數;
(4) replicationFactor(副本因子): 每個分片配備的副本數, 包括Leader和Replica;
(5) collection.configName: 創建新集合時所使用的配置文件的名稱, 如果不指定, 就會默認使用name作為配置文件的名稱.
(6) createNodeSet: 如果不提供該參數, 創建操作會將Replica分布到所有活躍的Solr節點上. 這個參數用於創建分片和副本的節點集合, 格式為: createNodeSet=node1:8081_solr,node2:8082_solr,node3:8083_solr
(7) maxShardsPerNode: 指定每個Node可以創建的Shard數, 默認為1.
a) 創建操作將生成
numShards * replicationFactor
個副本, 並盡可能均勻地分布在所有活躍的Node上;
b) 為了保證高可用, 同一個Solr節點上不能存在同一Shard的多個副本;
c) 如果maxShardsPerNode * nodeNum < numShards * replicationFactor
, CREATE操作將失敗, 報錯信息如下:org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Cannot create collection mycollection. Value of maxShardsPerNode is 3, and the number of live nodes is 3. This allows a maximum of 9 to be created. Value of numShards is 3 and value of replicationFactor is 4. This requires 12 shards to be created (higher than the allowed number)
2 刪除Collection、Core、Shard
(1) 刪除collection:
collections的API不支持UNLOAD操作;
刪除操作將直接刪除指定的collection, 包括其目錄文件.
curl 'http://localhost:8080/solr/admin/collections?action=DELETE&name=collection1&indent=true'
name: 將被刪除的集合的名稱;
indent=true: 格式化(有縮進)顯示響應結果.
(2) 卸載core:
cores的API不支持DELETE操作;
卸載操作將卸載指定的collection_shard_replica, 並不會刪除目錄文件.
curl 'http://localhost:8080/solr/admin/cores?action=UNLOAD&core=collection1_shard1_replica2&deleteIndex=true&indent=true'
(3) 刪除shard:
這個操作一般配合切分分片(SPLITSHARD)來使用: 切分分片后, 刪除被切分的分片.
curl 'http://localhost:8080/solr/admin/collections?action=DELETESHARD&shard=shard1&collection=collection1'
刪除操作並不會刪除對應Shard的目錄文件, 但是會刪除其存放index文件的目錄, 並將記錄core信息的文件標記為已卸載:
core.properties.unloaded
, 內容如下:
3 加載Collection、Core
(1) 重新加載collection:
collections的API不支持LOAD操作;
被卸載了的core並不會被RELOAD進來.
curl 'http://localhost:8080/solr/admin/collections?action=RELOAD&name=collection1&indent=true'
name: 將被重新加載的集合的名稱.
(2) 加載core:
cores的API不支持RELOAD操作;
可以LOAD某一個collection, 但被卸載了的core不能被LOAD進來;
可以LOAD某一個指定的core, 但被卸載了的core也不能被LOAD進來.
curl 'http://localhost:8080/solr/admin/cores?action=LOAD&core=collection1_shard1_replica2&indent=true'
4 查看集群狀態
(1) 查看集群的Cloud data:
此操作亦可通過瀏覽器的URL查看, 格式化響應結果, 更加清晰:
curl 'http://localhost:8080/solr/zookeeper?wt=json&detail=true&path=/clusterstate.json'
(2) 查看集群中的所有core:
curl 'http://localhost:8080/solr/admin/collections?action=LIST'
(3) 查看集群的健康狀況:
curl 'http://localhost:8080/solr/admin/collections?action=CLUSTERSTATUS'
可以查看到Shard的路由、活躍狀態、副本狀態等信息.
5 添加副本(ADDREPLICA)
如果服務器配置優良, 為了提高檢索性能, 我們可以通過為分片添加副本.
如果要在指定的節點中創建副本, 則可以指定節點名稱 —— 可以在http://localhost:8080/solr/#/~cloud?view=tree
中的live_nodes
下查看活躍的節點, 一般格式都是:
/live_nodes
172.16.10.11:8080_solr
172.16.10.12:8080_solr
172.16.10.13:8080_solr
(1) 使用方式:
http://localhost:8080/solr/admin/collections?action=ADDREPLICA&collection=collection1&shard=shard1&node=nodeName
①
collection
: 集合的名稱;
shard: 要添加副本的分片, 如果不指定, 就要指定_route_參數 —— 如果無法確定分片名, 就可以傳遞該_route_值, 系統會識別這個_route_所屬的分片, 然后完成相關操作;
②node
: 應該創建副本的節點的名稱, 必須活躍, 必須是活躍節點, 可不指定, Solr會自動進行負載均衡;
③instanceDir
: 將被創建的核心的instanceDir, 可不指定;
④dataDir
: 應在其中創建核心的目錄, 可不指定;
⑤type
: 要創建的副本的類型, 有以下幾種: (可不指定)nrt: NRT類型維護事務日志並在本地更新其索引, 這是默認的, 也是最常用的;
tlog: TLOG類型維護事務日志, 但只通過復制更新其索引;
pull: PULL類型不維護事務日志, 只通過復制更新其索引. 這種類型沒有資格成為Leader.
(2) 使用示例:
http://localhost:8080/solr/admin/collections?action=ADDREPLICA&collection=test&shard=shard1&node=172.16.10.11:8080_solr
操作成功后的響應信息為:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1496</int>
</lst>
<lst name="success">
<lst>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1407</int>
</lst>
<!-- 添加成功后的副本名稱 -->
<str name="core">test_shard1_replica2</str>
</lst>
</lst>
</response>
6 切割分片(SPLITSHARD)
(1) 切割示例:
curl 'http://localhost:8080/solr/admin/collections?action=SPLITSHARD&collection=mycollection&shard=shard2&indent=true'
collection: 集合的名稱;
shard: 將被切割的分片ID, 必須存在, 且當前Collection的shard個數必須大於1個(已驗證).
(2) 該特性發布於Solr4.3, 測試結果如圖:
①
SPLITSHARD
命令不能用於使用了自定義哈希的集群, 因為這樣的集群沒有一個明確的哈希范圍 —— 它只用於具有plain或compositeid路由的集群;
② 該命令將指定的shard的切割成 兩個新的具有相同數據的分片, 並根據新分片的路由范圍切割父分片 (被切割的shard) 中的文檔;
③ 新的分片將被命名為shardx_0
和shardx_1
—— 表明是從shardx
上分裂得到的新Shard;
④ 一旦新分片被成功創建, 它們就會被立即激活, 同時父分片也將被暫停 —— 新的讀寫請求就不會被發送到父分片中了, 而是直接路由到新的切割生成的新分片中;
④ 該特征能夠保證無縫切割和無故障時間: 父分片數據不會被刪除, 在切割操作完成之前, 父分片將繼續提供讀寫請求, 直到切割完成.
(3) 使用注意事項:
① 切割分片后, 再使用
DELETESHARD
命令刪除被切割的原始Shard, 就能保證數據不冗余, 當然也可以通過UNLOAD
命令卸載被切割的Shard;
② 原Shard目錄下的配置文件會變成core.properties.unloaded
, 也就是加了個卸載標示;data
目錄下保存索引數據的index
目錄被刪除 —— 從側面印證了數據完成了切分和遷移;
③ SolrCloud不支持對索引到其他Shard上的數據的動態遷移, 可以通過切割分片實現SolrCloud的擴容, 這只會對 切割操作之后、路由的哈希范圍仍然屬於原分片的數據 進行擴容.
7 操作集合別名(操作成功, 但未查出區別)
Solr允許用戶創建獨立的指向一個或多個真實集合的虛擬集合, 可以在運行時修改別名.
(1) 創建或修改別名:
curl 'http://localhost:8080/solr/admin/collections?action=CREATEALIAS&name=alias&collections=collection1&indent=true'
用來修改的別名應該只映射一個獨立的集合, 讀取的別名能映射一個或多個集合.
(2) 移除存在的別名:
curl 'http://localhost:8080/solr/admin/collections?action=DELETEALIAS&name=alias&indent=true'
8 更新集群的配置
集群會發生變化的就是collection的配置, 因此當配置文件發生變化后就應該使用命令更新ZooKeeper中的配置信息. 對此, Solr提供了很好的運維工具:
8.1 將配置文件上傳到ZooKeeper中
需要的jar包:
$SOLR_HOME/example/lib/ext/*
以及 Solr項目的WEB-INF/lib/*
, 這里已經將ext下的jar包拷貝到了WEB-INF/lib
目錄下, 便捷很多.
cd /data/solr-cloud/tomcat/display/solr/WEB-INF/lib
下述一長串是一條命令, 為了便於查看, 使用了反斜杠(\)來斷句, 如果使用中出現問題, 可將反斜杠(\)刪除, 並刪除所有的換行, 然后回車執行.
# 注意本地路徑, 以及../classes/log4j.properties文件的路徑 java -classpath .:* \ -Dlog4j.configuration=file:../classes/log4j.properties \ org.apache.solr.cloud.ZkCLI -cmd upconfig \ -zkhost 10.0.20.50:2181,10.0.20.51:2181,10.0.20.52:2181 \ -confdir /data/solr-cloud/tomcat/solrhome/collection1/conf \ -confname myconf2
建議: 將配置文件單獨存放, 比如: 我這里將整個example/solr/collection1/conf
存放至/data/solr-cloud/tomcat
下, 之后執行配置文件的更新:
java -classpath .:* \
-Dlog4j.configuration=file:../classes/log4j.properties \
org.apache.solr.cloud.ZkCLI -cmd upconfig \
-zkhost 10.0.20.50:2181,10.0.20.51:2181,10.0.20.52:2181 \
-confdir /data/solr-cloud/tomcat/conf \
-confname myconf
8.2 將ZooKeeper中的配置文件與Collection相關聯
cd /data/solr-cloud/tomcat/display/solr/WEB-INF/lib
java -classpath .:* \
-Dlog4j.configuration=file:../classes/log4j.properties \
org.apache.solr.cloud.ZkCLI -cmd linkconfig \
-collection mycollection -confname myconf \
-zkhost 10.0.20.50:2181,10.0.20.51:2181,10.0.20.52:2181
注意: 配置文件若被刪除, 將會導致ZooKeeper中的配置文件被同步刪除, 從而在建立collection時將出現問題.
可關閉Tomcat服務與ZooKeeper服務, 刪除ZooKeeper目錄下的配置文件的版本信息, 然后再次啟動ZooKeeper更新配置文件, 最后啟動Tomcat服務繼續測試.
參考資料
版權聲明
出處: 博客園 馬瘦風的博客(https://www.cnblogs.com/shoufeng)
感謝閱讀, 如果文章有幫助或啟發到你, 點個[好文要頂👆] 或 [推薦👍] 吧😜
本文版權歸博主所有, 歡迎轉載, 但 [必須在文章頁面明顯位置標明原文鏈接], 否則博主保留追究相關人員法律責任的權利.