天天看點

solrcloud replica collection core shard slice 概念講解

solr4.0 正式釋出有一段時間了,目前是beta版,從alpha版到beta新增加了collection的概念,本文就solr4.0中的多個索引相關概念再做詳細的說明。本文以beta版為基礎

solr4.0 的是以繼承lucene的分段索引方式,采用了多shard的方式以提高在分布式雲環境下的高性能要求的瓶頸。對于一個完整的文檔集,将被分布到多個shard中進行索引存儲,每個shard相對獨立,有自己獨立的indexwriter和searcher。shard是對完整文檔集索引 分片(塊)處理的展現,在solr的代碼裡每個shard都有一個solrcore對其維護管理。是以core是從solr代碼的層面上講的,而shard是從索引資料的分割角度來講的。目前solr隻允許一個core管理維護一個shard。

      core 作為一個執行個體負責管理一個整個索引中的一個shard,對該shard進行索引的增删查改(update)。core是solr對索引單元管理的最小機關。而一個shard也擁有完整的lucene索引檔案結構。幾個shard的索引加在一起組成文檔集的所有索引。

     slice 是一組具有相同資料的shard構成的集合。通常建議3個shard作為一個slice,其中3個shard資料完全相同,但分布在不同的伺服器上,以起到互相備份的作用,最終實作容災和高可靠性的要求。如下圖,一個兩個伺服器組成的solr 叢集。該叢集中隻有一個collection(collection one),該collection中有兩個slice,每個slice由2個shard構成。slice的兩個shard分布在不同的伺服器上以到達容災目的。

solrcloud replica collection core shard slice 概念講解

    collection是一個邏輯的概念,用來組織多個slice。一個collection包含整個文檔集的索引資料(完整)。collection的作用是為了實作多租戶的功能。即多個使用者(公司)要在一個solr叢集上索引各自的資料。這樣,各客戶間的資料不能交叉,因為a客戶的資料可能不希望讓b客戶通路。為了邏輯上和實體上隔離客戶間的資料,産生了collection。一個collection索引并存放一個客戶的資料。在一個collection裡面又有多個silce。多slice保證吞吐量的要求(每個slice都可以處理索引請求并提供search服務)。

    replica是shard的備份,目前1個shard就是一個replica。是以我們可以說每個slice有多個shard構成或者說多個replica構成。其中slice中的replica又有不同的職責,其中有且僅有一個作為主要的服務者,我們稱其為leader replica 其他的備份的作為普通的replica。普通replica以 leader replica馬首是瞻,保持與leader replica的同步。即普通replica索引的資料不能多于leader replica的索引。leader replica索引的增減直接影響普通replica的索引增減,普通 replica 向leader replica看齊,保持一緻。如果目前某個leader replica死掉,将引發新的選舉,産生新的leader replica,之後其他普通replica将向新的leader replica保持一緻。

下面以一個具體部署的執行個體的admin工具看到的graph為例說明:

   該叢集由3台server組成。 隻配置了1個collection(collection1),該collection 由 10 個slice組成。圖中 的shard1~10實際上應該稱作slice1~10 (該admin工具賦予的名稱容易誤導開發者)。而每個slice下面的每個圓圈表示一個replica,實心圓圈表示leader replica,空心為普通replica,灰色的圓圈表示死掉的replica(如伺服器down掉)。 目前從圖上可以看出,每個slice由3個replica 構成。(同個slice中的3個replica的資料相同,儲存在不同的伺服器上,起到備份作用)。

    從shard的角度講,1個replica裡儲存一份shard。1個slice中有一份唯一的shard(unique shard),但該shard有兩個備份,同 unique shard 内容相同。

   從core的角度講,每個replica又一個core維護管理。core負責處理索引請求和搜尋請求,以及該replica的索引檔案管理,如merge等。是以該例子中總共有30個core,30個replica(其中10個leader replica),10個slice。30個core平均分布在3太server上,每個server10個core。每個server為每個slice儲存了一份replica。 每個slice都有3份replica分别在不同的3個server上(x.x.x.251-253)。

繼續閱讀