Solr6.0.1概念和集群部署

簡介

SolrCloud的特色功能

集中式的配置

信息使用ZK進行集中配置。啟動時可以指定把Solr的相關配置文件上傳Zookeeper,多機器共用。這些ZK中的配置不會再拿到本地緩存,Solr直接讀取ZK中的配置信息。配置文件的變動,所有機器都可以感知到。另外,Solr的一些任務也是通過ZK作為媒介發佈的。目的是為了容錯。接收到任務,但在執行任務時崩潰的機器,在重啟後,或者集群選出候選者時,可以再次執行這個未完成的任務。

自動容錯

SolrCloud對索引分片,並對每個分片創建多個Replication。每個Replication都可以對外提供服務。一個Replication掛掉不會影響索引服務。更強大的是,它還能自動的在其它機器上幫你把失敗機器上的索引Replication重建並投入使用。

近實時搜索

立即推送式的replication(也支持慢推送)。可以在秒內檢索到新加入索引。

查詢時自動負載均衡

SolrCloud索引的多個Replication可以分佈在多臺機器上,均衡查詢壓力。如果查詢壓力大,可以通過擴展機器,增加Replication來減緩。

自動分發的索引和索引分片發送文檔到任何節點,它都會轉發到正確節點。

事務日誌

事務日誌確保更新無丟失,即使文檔沒有索引到磁盤。

索引存儲在HDFS上

索引的大小通常在G和幾十G,上百G的很少,這樣的功能或許很難實用。但是,如果你有上億數據來建索引的話,也是可以考慮一下的。我覺得這個功能最大的好處或許就是和下面這個"通過MR批量創建索引"聯合實用。

通過MR批量創建索引

有了這個功能,你還擔心創建索引慢嗎?

強大的RESTful API通常你能想到的管理功能,都可以通過此API方式調用。這樣寫一些維護和管理腳本就方便多了。

優秀的管理界面

主要信息一目瞭然;可以清晰的以圖形化方式看到SolrCloud的部署分佈;當然還有不可或缺的Debug功能。

solr6.0.1已經可以在界面管理集群的大部分功能了。

概念

Collection

在SolrCloud集群中邏輯意義上的完整的索引。它常常被劃分為一個或多個Shard,它們使用相同的Config Set。如果Shard數超過一個,它就是分佈式索引,SolrCloud讓你通過Collection名稱引用它,而不需要關心分佈式檢索時需要使用的和Shard相關參數。

Config Set

Solr Core提供服務必須的一組配置文件。每個config set有一個名字。最小需要包括solrconfig.xml (SolrConfigXml)和schema.xml (SchemaXml),除此之外,依據這兩個文件的配置內容,可能還需要包含其它文件。它存儲在Zookeeper中。Config sets可以重新上傳或者使用upconfig命令更新,使用Solr的啟動參數bootstrap_confdir指定可以初始化或更新它。

Core

也就是Solr Core,一個Solr中包含一個或者多個Solr Core,每個Solr Core可以獨立提供索引和查詢功能,每個Solr Core對應一個索引或者Collection的Shard,Solr Core的提出是為了增加管理靈活性和共用資源。在SolrCloud中有個不同點是它使用的配置是在Zookeeper中的,傳統的Solr core的配置文件是在磁盤上的配置目錄中。

Leader

贏得選舉的Shard replicas。每個Shard有多個Replicas,這幾個Replicas需要選舉來確定一個Leader。選舉可以發生在任何時間,但是通常他們僅在某個Solr實例發生故障時才會觸發。當索引documents時,SolrCloud會傳遞它們到此Shard對應的leader,leader再分發它們到全部Shard的replicas。

Replica

Shard的一個拷貝。每個Replica存在於Solr的一個Core中。一個命名為"test"的collection以numShards=1創建,並且指定replicationFactor設置為2,這會產生2個replicas,也就是對應會有2個Core,每個在不同的機器或者Solr實例。一個會被命名為test_shard1_replica1,另一個命名為test_shard1_replica2。它們中的一個會被選舉為Leader。

Shard

Collection的邏輯分片。每個Shard被化成一個或者多個replicas,通過選舉確定哪個是Leader。

Zookeeper

Zookeeper提供分佈式鎖功能,對SolrCloud是必須的。它處理Leader選舉。Solr可以以內嵌的Zookeeper運行,但是建議用獨立的,並且最好有3個以上的主機。

新特性

Solr 6.0發佈,新特性解析

SOLR-8831: allow version field to be retrievable via docValues

docValues看來是越來越成熟了,之前使用給性能造成不小的影響,這個有待測試;

繼地理信息檢索之後又一重大新特性,從描述上看是圖數據結構檢索。

SOLR-7543: Basic graph traversal query Example: {!graph from="node_id" to="edge_id"}id:doc_1

雖然join在分佈式模式下不建議使用,但無法避免很多時候還是需要;

SOLR-7584: Adds Inner and LeftOuter Joins to the Streaming API and Streaming Expressions

SOLR-8188: Adds Hash and OuterHash Joins to the Streaming API and Streaming Expressions

管理界面功能日漸完善,增加jdbc驅動支持,增加多個sql特性,門檻越來越低了,也開始貼近大數據分析需求。

集群部署

軟件需求

1、必須使用jdk1.8或更高版本

2、本次使用jdk1.8.0_92 + solr6.0.1 + zookeeper3.4.5集群模式

3、請先下載安裝zookeeper,本文沒寫zookeeper安裝

solr集群安裝

初始化zookeeper目錄

經測試必須先創建zookeeper目錄,否則會報錯,連接zookeeper創建/solr目錄:

# 進入zookeeper後臺命令,默認連接本地localhost:2181

./zookeeper/bin/zkCli.sh

# 創建目錄

create /solr "solr"

安裝solr自帶例子

下載

webget https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/6.1.0/solr-6.1.0.tgz

#解壓

tar zxvf solr-6.0.1.tgz

初始化solr例子配置文件

上傳solr自帶例子配置文件至zookeeper的/solr/configs目錄下:

./bin/solr zk -z localhost:2181/solr -upconfig -n solr -d example/example-DIH/solr/solr

參數說明

-upconfig to move a configset from the local machine to Zookeeper.

-n configName Name of the configset in Zookeeper that will be the destinatino of 'upconfig' and the source for 'downconfig'.

-d confdir The local directory the configuration will be uploaded from

-z zkHost Zookeeper connection string.

在Solr部署中,必須先將collection配置文件上傳至zookeeper中,後面才能創建collection。如果你不是新手,你也可以上傳你自己真正要使用的配置文件。

查看zk目錄:

./bin/zkCli.sh -server localhost:2181

Solr6.0.1概念和集群部署

以前的schema.xml換成了managed-schema文件,具體配置文檔:https://cwiki.apache.org/confluence/display/solr/Documents%2C+Fields%2C+and+Schema+Design

使用自帶的jetty啟動服務

進入solr-6.0.1目錄,啟動服務:

cd solr-6.0.1

./bin/solr start -c -m 1g -z localhost:2181/solr -p 8983

參數說明:

-c:cloud模式啟動

-m:最大內存使用

-z:zookeeper集群地址

-p:啟動服務端口

本次測試在一臺機器上裝三個solr示例,用端口區分(如多臺機器可以將solr複製過去直接啟動):

./bin/solr start -c -m 1g -z localhost:2181/solr -p 8984

./bin/solr start -c -m 1g -z localhost:2181/solr -p 8985

命令行操作參數參考:https://cwiki.apache.org/confluence/display/solr/Command+Line+Utilities

solr面板

Solr6.0.1概念和集群部署

創建collection並導入測試數據

在頁面創建collections集群

筆者服務器ip為:192.168.31.135,你們可以將下面ip換成自己的。

1、瀏覽器訪問http://192.168.31.135:8983,點擊collections,點擊Add Collection,示例如下:

Solr6.0.1概念和集群部署

具體參數描述在restful api接口中會說明。

2、注意有可能報"Connection to Solr lost"錯誤,不過沒關係,重新刷新瀏覽器即可:

Solr6.0.1概念和集群部署

使用restful api創建collections集群

剛才在頁面上創建collections集群是為了嚐鮮一下solr的新功能。在實際部署中建議還是採用restful api的方式創建(可以傳入更多參數)。

直接通過 REST 接口來創建 Collection,你也可以通過瀏覽器訪問下面地址,如下所示:

#先刪除剛才創建好的collections集群

curl 'http://192.168.31.135:8983/solr/admin/collections?action=DELETE&name=solr'

刪除後可以刷新瀏覽器確認是否刪除,確認後再執行下面操作。

#創建collections集群

curl 'http://192.168.31.135:8983/solr/admin/collections?action=CREATE&name=solr&numShards=3&replicationFactor=2&maxShardsPerNode=2'

上面鏈接中的幾個參數的含義,說明如下:

• name: 待創建Collection的名稱

• config set: collection在zookeeper中的配置目錄

• numShards: 分片的數量

• replicationFactor: 複製副本的數量

• maxShardsPerNode:默認值為1,注意三個數值:numShards、replicationFactor、liveSolrNode,一個正常的solrCloud集群不容許同一個liveSolrNode上部署同一個shard的多個replic,因此當maxShardsPerNode=1時,numShards*replicationFactor>liveSolrNode時,報錯。因此正確時因滿足以下條件:

numShards*replicationFactor<liveSolrNode*maxShardsPerNode

集群截圖如下:

Solr6.0.1概念和集群部署

導入測試數據

導入solr自帶的測試數據:

./bin/post -c solr example/exampledocs/*.xml

Solr6.0.1概念和集群部署

查詢數據

1、瀏覽器訪問http://192.168.31.135:8983,選擇solr

collection,點擊Query,示例如下:

Solr6.0.1概念和集群部署

集群管理

collection和replia管理:

Solr6.0.1概念和集群部署

schema管理:

Solr6.0.1概念和集群部署

總結

Solr6.0.1中頁面管理功能日漸完善,以及新的一些特性,docValues越來越成熟了,增加jdbc驅動支持,增加多個sql特性,門檻越來越低了,也開始貼近大數據分析需求。


分享到:


相關文章: