SolrCloud查詢路由和讀取容錯

2018-12-26 14:14 更新
SolrCloud在讀取和寫入中具有高度的可用性和容錯性。

讀取側(cè)容錯

在SolrCloud集群中,每個單獨的節(jié)點負載平衡在集合中的所有副本之間平衡讀取請求。您仍然需要一個與集群交談的“外部”負載平衡器,或者您需要一個智能客戶端,了解如何讀取ZooKeeper中的Solr元數(shù)據(jù)并與其交互,并只請求ZooKeeper集合的地址開始發(fā)現(xiàn)它應(yīng)該到達哪個節(jié)點發(fā)送請求。(Solr提供了一個稱為CloudSolrClient的智能Java SolrJ客戶端。)

即使在集群中的某些節(jié)點處于離線狀態(tài)或無法訪問,Solr 節(jié)點也能夠正確響應(yīng)搜索請求,只要它可以與每一個碎片的至少一個副本進行通信,或每個相關(guān)碎片的一個副本,如果用戶碎片通過shards或_route_參數(shù)限制搜索。每個分片越多的副本,Solr集群就越有可能在發(fā)生節(jié)點故障時處理搜索結(jié)果。

zkConnected

只要Solr節(jié)點能夠與所知道的每個碎片的至少一個副本進行通信,就會返回搜索請求的結(jié)果,即使它在收到請求時不能與ZooKeeper進行通信。從容錯的角度來看,這通常是首選的行為,但如果對該節(jié)點尚未通過ZooKeeper通知的集合結(jié)構(gòu)有重大更改,則可能會導(dǎo)致過時或不正確的結(jié)果(即碎片可能已被添加或刪除,或分割成分片)

每個搜索響應(yīng)中都包含一個zkConnected標題,指示處理請求的節(jié)點是否與ZooKeeper在以下時間連接:

Solr響應(yīng)與部分結(jié)果

{
  "responseHeader": {
    "status": 0,
    "zkConnected": true,
    "QTime": 20,
    "params": {
      "q": "*:*"
    }
  },
  "response": {
    "numFound": 107,
    "start": 0,
    "docs": [ "..." ]
  }
}

shards.tolerant

如果查詢的一個或多個碎片完全不可用,則Solr的默認行為是使請求失敗。但是,有很多用例可以接受部分結(jié)果,所以Solr提供了一個布爾shards.tolerant參數(shù)(默認值false)。

如果shards.tolerant=true,那么部分結(jié)果可能會被返回。如果返回的響應(yīng)不包含所有合適的碎片的結(jié)果,那么響應(yīng)頭部包含一個稱為partialResults的特殊的調(diào)用標志。

客戶端可以指定shards.info以及shards.tolerant參數(shù)以檢索更多 fine-grained 的詳細信息。

將partialResults標志設(shè)置為“true”的示例響應(yīng):

Solr響應(yīng)與部分結(jié)果:

{
  "responseHeader": {
    "status": 0,
    "zkConnected": true,
    "partialResults": true,
    "QTime": 20,
    "params": {
      "q": "*:*"
    }
  },
  "response": {
    "numFound": 77,
    "start": 0,
    "docs": [ "..." ]
  }
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號