轉載自:http://blog.csdn.net/zhangketuan/article/details/49660037
轉載請出自出處:
http://eksliang.iteye.com/
一.內嵌啓動SolrCloud時端口默認分配
當 Solr 運行內嵌 zookeeper 服務時,默認使用 solr 端口+1000 作爲客戶端口,另外,solr 端口+1 作爲 zookeeper 服務端口,solr 端口+2 作爲主服務選舉端口。所以第一個例子中,Solr 運行在 8983端口,內嵌 zookeeper 使用 9983 作爲客戶端端口,9984 和 9985 作爲服務端口。
clientPort=9983
server.1=192.168.238.133:9984 :9985
這幾個端口就是對應配置裏面的這幾個端口
內嵌啓動的SolrCloud的例子點擊:http://wiki.apache.org/solr/SolrCloud
二. 通過集羣api 管理集羣(Core Admin)
1).創建接口(第一種自動分配)
http://192.168.66.128:8081/solr/admin/collections?action=CREATE&name=collection1&numShards=3&replicationFactor=2&maxShardsPerNode=2&collection.configName=myconf
http://192.168.66.128:8081/solr/admin/collections?action=CREATE&name=collection1&numShards=3&replicationFactor=2&maxShardsPerNode=2&collection.configName=myconf&createNodeSet=192.168.66.128:8083_solr,192.168.66.128:8081_solr,192.168.66.128:8082_solr
這樣會出來一個collection,它有3個shard,每個shard有1個數據節點,1個備份節點,即該collection共有6個core
參數:
name:將被創建的集合的名字
numShards:集合創建時需要創建邏輯碎片的個數
replicationFactor:分片的副本數。replicationFactor(複製因子)爲 3 意思是每個邏輯碎片將有 3 份副本。
maxShardsPerNode:默認值爲1,每個Solr服務器節點上最大分片數(4.2新增的)
注意三個數值:numShards、replicationFactor、liveSolrNode(當前存活的solr節點),一個正常的solrCloud集羣不容許同一個liveSolrNode上部署同一個shard的多個replic,因此當maxShardsPerNode=1時,numShards*replicationFactor>liveSolrNode時,報錯。因此正確時因滿足以下條件:numShards*replicationFactor<liveSolrNode*maxShardsPerNode
createNodeSet:如果不提供該參數,那麼會在所有活躍節點上面創建core,如果提供該參數就會在指定的solr節點上創建core
例如我現在在5臺tomcat上面創建3個片,1個副本,不提供該參數結果是這樣的
提供該參數例如:createNodeSet=192.168.66.128:8083_solr,192.168.66.128:8081_solr,192.168.66.128:8082_solr
結果是這樣的
collection.configName:用於新集合的配置文件的名稱。如果不提供該參數將使用集合名稱作爲配置文件的名稱。
創建接口2(手動分配)實例:通過下面多個鏈接進行創建(3個分片,每個節點上面一個備份)推薦使用,因爲這種方式你想創建多少次就多少次
http://192.168.66.128:8081/solr/admin/cores?action=CREATE&name=shard1_replica1&instanceDir=shard1_replica1&dataDir=data&collection=collection1&shard=shard1&collection.configName=myconf
http://192.168.66.128:8082/solr/admin/cores?action=CREATE&name=shard1_replica2&instanceDir=shard1_replica2&dataDir=data&collection=collection1&shard=shard1&collection.configName=myconf
http://192.168.66.128:8082/solr/admin/cores?action=CREATE&name=shard2_replica1&instanceDir=shard2_replica1&dataDir=data&collection=collection1&shard=shard2&collection.configName=myconf
http://192.168.66.128:8083/solr/admin/cores?action=CREATE&name=shard2_replica2&instanceDir=shard2_replica2&dataDir=data&collection=collection1&shard=shard2&collection.configName=myconf
http://192.168.66.128:8083/solr/admin/cores?action=CREATE&name=shard3_replica1&instanceDir=shard3_replica1&dataDir=data&collection=collection1&shard=shard3&collection.configName=myconf
http://192.168.66.128:8081/solr/admin/cores?action=CREATE&name=shard3_replica2&instanceDir=shard3_replica2&dataDir=data&collection=collection1&shard=shard3&collection.configName=myconf
參數含義:
name:新建core的名稱
創建的core的命名規則:
coreName_shardName_replicaN
例如:創建pscp的集合,2個分片,每個分片上面有兩個備份
則命名如下:
pscp_shard1_replica1
pscp_shard1_replica2
pscp_shard2_replica1
pscp_shard2_replica2
shard:指定一個分配id,這個core將掛在那個分片上(隨便寫,如果還沒有這個id,第一次會幫你創建)
collection.configName:從zookeeper中指定一份配置文件
instanceDir和dataDir:從下圖看出他的含義
命名規則:instanceDir與name的名稱相同,dataDir:統一建議命名爲data
總結一:在一個集羣中添加一個副本的兩種方式
http://192.168.66.128:8081/solr/admin/collections?action=ADDREPLICA&collection=collection1&shard=shard2&node=192.168.66.128:8085_solr
上面這句話的意思就是在collection1這個集合的shard2分片上添加一個副本,副本的地址在192.168.66.128:8085_solr臺機子上面
http://192.168.66.128:8083/solr/admin/cores?action=CREATE&name=shard3_replica1&instanceDir=shard3_replica1&dataDir=data&collection=collection1&shard=shard3&collection.configName=myconf
2).刪除接口
http://localhost:8983/solr/admin/collections?action=DELETE&name=mycollection
參數:
name:將被創建的集合別名的名字
collections:逗號分隔的一個或多個集合別名的列表
3).重新加載接口,這個時候,相應的core會重新加載配置文件
http://localhost:8983/solr/admin/collections?action=RELOAD&name=mycollection
參數:
name:將被重載的集合的名字
4).分割碎片接口
http://localhost:8983/solr/admin/collections?action=SPLITSHARD&collection=<collection_name>&shard=shardId
collection:集合的名字
shard:將被分割的碎片 ID
這個命令不能用於使用自定義哈希的集羣,因爲這樣的集羣沒有一個明確的哈希範圍。 它只用於具有plain 或 compositeid 路由的集羣。該命令將分割給定的碎片索引對應的那個碎片成兩個新碎片。通過將碎片範圍劃分成兩個相等的分區和根據新碎片範圍分割出它在父碎片(被分的碎片)中的文檔。新碎片將被命名爲 appending_0 和_1。例如:shard=shard1 被分割,新的碎片將被命名爲 shard1_0 和 shard1_1。一旦新碎片被創建,它們就被激活同時父碎片(被分的碎片)被暫停因此將沒有新的請求到父碎片(被分的碎片)。該特徵達到了無縫分割和無故障時間的要求。原來的碎片數據不會被刪除。使用新 API 命令重載碎片用戶自己決定。該特性發布始於 Solr4.3,由於 4.3 發佈版本發現了一些 bugs,所以要使用該特性推薦等待 4.3.1
三.通過命令行工具將文件上傳到Zookeeper進行管理
之所以能分佈式是因爲引入ZooKeeper來統一保存配置文件,故而需要將SolrCloud的配置文件上傳到ZooKeeper中,這裏演示命令行進行上傳
要使用命令行管理管理工具,必須要先有包,這些包就是solr.war裏面/WEB-INF/lib下面的所有jar包
第一步:新建文件夾
在可以和Zookeeper集羣通訊的任意一臺機子上面,新建兩個文件夾,例如如下是我的目錄
/usr/solrCloud/conf/files /usr/solrCloud/conf/lib
files:用來保存配置文件 lib:用來存放jar包
第二步:上傳需要使用的jar和配置文件
上傳jar到lib目錄,將solr發佈包下面的jar(solr-4.8.0\example\solr-webapp\webapp\WEB-INF\lib\ 和 solr-4.8.0\example\lib\ext\ 下面包都要)全部上傳到上面的lib目錄
將solr的配置文件上傳到上面的files目錄下面
第三步:將文件上傳Zookeeper進行統一管理
java -classpath .:/usr/solrCloud/conf/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 192.168.27.18:2181,192.168.27.18:2182,192.168.27.18:2183 -confdir /usr/solrCloud/conf/files -confname myconf
-cmd upconfig:上傳配置文件
-confdir:配置文件的目錄
-confname:指定對應的名稱
查看文件是否已經上傳到Zookeeper服務器:
sh zkCli.sh -server localhost:2181
ls /configs/myconf
第四步:將上傳到ZooKeeper中配置文件與collection相關聯
java -classpath .:/usr/solrCloud/conf/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection collection1 -confname myconf -zkhost 192.168.27.18:2181,192.168.27.18:2182,192.168.27.18:2183
-cmd linkconfig:爲指定collection"綁定"配置文件
-collection:上面指定的collection的名稱
-confname:zookeeper上面的配置文件名稱
上面這句代碼的意思就是:創建的core(collection1)將使用myconf這個配置文件
例如:執行下面這個請求將創建一個core爲collection1,那麼他使用的配置文件爲zookeeper中的myconf這個配置
http://localhost:8983/solr/admin/collections?action=CREATE&name=collection1&numShards=3&replicationFactor=1
話又說回來,如果zookeeper管理的集羣上面僅有一份配置,那麼創建的core都會用這份默認的配置。如果有多份,如果沒有執行第四步,隨便創建一個core將拋出異常,構建失敗!
例如執行:
http://192.168.66.128:8081/solr/admin/collections?action=CREATE&name=sdf&numShards=3&replicationFactor=1
將拋出:因爲上面有兩份配置,但是並沒有執行第四步,將配置與即將創建core(name=sdf)關聯起來
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">16563</int>
</lst>
<lst name="failure">
<str>
org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException:Error CREATEing SolrCore 'sdf_shard2_replica1': Unable to create core: sdf_shard2_replica1 Caused by: Could not find configName for collection sdf found:[conf1, myconf]
</str>
<str>
org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException:Error CREATEing SolrCore 'sdf_shard1_replica1': Unable to create core: sdf_shard1_replica1 Caused by: Could not find configName for collection sdf found:[conf1, myconf]
</str>
<str>
org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException:Error CREATEing SolrCore 'sdf_shard3_replica1': Unable to create core: sdf_shard3_replica1 Caused by: Could not find configName for collection sdf found:[conf1, myconf]
</str>
</lst>
</response>
當然了第四步也可以用下面替換,而且下面這個更靈活,推薦使用(有了這步,第四步完全可以省略)
http://192.168.66.128:8081/solr/admin/collections?action=CREATE&name=conf2&numShards=3&replicationFactor=1&collection.configName=myconf
collection.configName=myconf:爲創建的core指定一個在zookeeper中配置
文檔寫到這裏,下面來看下怎麼對上傳到zookeeper中的文件進行修改和刪除操作:
修改的常用做法就是:重新上傳,重新上傳會覆蓋上面的文件,從而達到修改的目的
刪除zookeeper中的文件或者目錄的方式如下:
[zk: 192.168.66.128:2181(CONNECTED) 7] delete /configs/conf1/schema.xml
[zk: 192.168.66.128:2181(CONNECTED) 10] ls /configs/conf1
[solrconfig.xml]
[zk: 192.168.66.128:2181(CONNECTED) 11]
將配置上傳到zookeeper,如果要讓正在運行的solr同步加載這些文件,只需要需要讓solr重新加載一下配置文件,在瀏覽器中輸入
http://192.168.27.18:8081/solr/admin/collections?action=RELOAD&name=collection1
參考文獻:
怎麼通過api來管理整個集羣的collection官網
https://cwiki.apache.org/confluence/display/solr/Collections+API
通過api來管理solr core 官網
http://wiki.apache.org/solr/CoreAdmin
SolrCloud在tomcat上面的部署 官網
http://wiki.apache.org/solr/SolrCloudTomcat
solr在tomcat上面部署 官網
http://wiki.apache.org/solr/SolrTomcat
值得參考的博客:
http://blog.csdn.NET/xyls12345/article/details/27504965
http://myjeeva.com/solrcloud-cluster-single-collection-deployment.html#deploying-solrcloud
http://blog.csdn.Net/woshiwanxin102213/article/details/18793271
http://blog.csdn.net/natureice/article/details/9109351
solrcloud名稱解釋
http://www.solr.cc/blog/?p=99
solr.xml解釋
http://www.abyssss.com/?p=415