有簡單介紹 Solr 的細節和目錄結構以及如何配置單一節點的 Solr 並啟動 Solr 服務
也說明如何在單一節點上建立一個新的 core,接下來就介紹 Solr Cloud 分佈式的設定和一些簡單範例
分佈式(Cloud)
叢集的效果就很像 Hadoop/HDFS 的樣子,資料是分佈式儲存,並透過 Zookeeper 來作協同管理,一個節點(Node)失效並不會造成資料遺失等問題,在 Solr 文件中都稱為 "SolrCloud"
以下範例同樣是以 Solr 跟目錄下的 example 為例
- 如何啟動
$ cd solr-4.10.2
$ cp -r example/ shard1/
$ cd shard1
$ rm -r solr/collection1/data/
以上的動作會在 solr 跟目錄下建立一個 shard1 目錄,內容跟 example 目錄相仿
接下來在 shard1目錄下執行以下 command
$ java -DzkRun -DnumShards=2 -Dcollection.configName=collection1
-Dbootstrap_confdir=./solr/collection1/conf
-jar start.jar
這裡先解釋一下,通常在實際上我們並不會這樣啟動一個 Solr Cloud,不過為了教學方便這裡先將就
以上指令
-DzkRun 表示了要用 Embed 的模式將 Zookeeper 啟動在目前這台機器上
-DnumShards 表示了 Solr Cloud 擁有最大的 Shards(分片)數
通常在啟動 Solr Cloud 以上兩個會常用,接下來的兩個是因為教學原因才額外加上的
-Dbootstrap_confdir 指定了 Collection 的 Conf 路徑,啟動時,Zookeeper 會將
conf 底下的東西上傳到Zookeeper 底下做管理
-Dcollection.configName=指定了你目前需要初始化的 Collection 名稱
啟動完成之後在 http://localhost:8983/solr 點擊頁面左邊的 Cloud 標籤
你會看到 有一個 node 是 Active 另外一個是 Close 的
你會看到 有一個 node 是 Active 另外一個是 Close 的
接下來就是依照先前的步驟再做一個 node 出來,因為沒有兩台機器,
所以你可以直接在 Solr 跟目錄下再建一個 shard2 的目錄,且內容跟 shard1 一樣。
$ cd solr-4.10.2
$ cp -r shard1/ shard2
$ cd shard2
$ rm -r solr/collection1/data
$ java -DzkHost=localhost:9983 -Djetty.port=8984 -jar start.jar
在最後面的指令中,我又在本機上再啟動一個 Solr 服務,有幾個參數需注意
-DzkHost 這是告訴 Solr 目前 Zookeeper 在哪台機器上,在剛才我們已經在本機建立一個 Embed 的
ZooKeeper,而 port 是 9983(這是 Solr預設)
-Djetty.port 則是指定這個 Solr 服務的 port,因為剛才我們已經在本機開過一個 Solr 服務在 8983 了
所以你必須更換一個沒再用的 port 否則會啟動失敗
完成後,你就可以進入 http://localhost:8984/solr 了
如果你有兩台機器的話,你同樣可以在另外一台機器上下載 Solr,
並且把剛剛建立的 shard2 資料夾放到那台機器上的 Solr 根目錄下,
並且在執行一次,且需注意 Zookeeper 的位址,需改成 node1 的IP,不能再用 localhost
$ java -DzkHost={node1-ip}:9983 -jar start.jar
以上因為教學介紹的關係,所以分享了這樣的 Solr Cloud 的啟動與配置方式
你可能注意到這樣的啟動方式,如果我要再額外建立另一個 Collection 到 Cloud 上
就要關掉並且把 conf 目錄擺好後再透過指令重新 bootstrap
所以在 Solr Cloud 中,Solr 有提供一些 script 可以讓你將 conf 目錄
上傳到 Zookeeper ,以成為一個新的 configuration name
之後使用者就可以透過 API 或是 RESTful 的方式,進立一個新的 collectioon 並且指定該 configuraion name
下一篇就來介紹一下 Solr Cloud 中的 configuration 是什麼,以及建立 Collection 的方式
hi, 想請教您
回覆刪除在第一次啟動,collection的data都是空的情形需要下 -Dcollection.configName和-Dbootstrap_confdir這兩個參數
那我關閉後,之後再重新啟動,還需要這兩個參數嗎?
謝謝^^