【Druid】Coordinator Node

Druid協(xié)調(diào)節(jié)點主要負(fù)責(zé)segment的管理和分配,它基于配置信息通知歷史節(jié)點加載和刪除segments。具體來說,協(xié)調(diào)節(jié)點的工作主要包括以下幾個方面:加載新segments信息,刪除過期segments信息,管理segment的復(fù)制操作和segment的負(fù)載均衡。

協(xié)調(diào)節(jié)點周期性的執(zhí)行操作,執(zhí)行間隔通過配置參數(shù)指定。與Broker和Historical節(jié)點類似,協(xié)調(diào)節(jié)點也會與ZK維持一個長連接,在執(zhí)行相應(yīng)的動作之前,協(xié)調(diào)節(jié)點會從ZK獲取集群當(dāng)前的狀態(tài)。同時協(xié)調(diào)節(jié)點也維持著與一個數(shù)據(jù)庫的鏈接,其中存儲著可用segments和規(guī)則的信息。可用segments信息存儲在segment表里,其中列除了所有在集群中加載的segments。規(guī)則信息存儲在規(guī)則表中,它指明了segments應(yīng)該被怎樣處理。

在一個新segment被分配至歷史節(jié)點前,所有可用的歷史節(jié)點會根據(jù)已存儲數(shù)據(jù)的大小進(jìn)行排序,存儲數(shù)據(jù)最少的節(jié)點有最高的優(yōu)先級被分配到新segment,這種機(jī)制是為了節(jié)點之間存儲的均衡。協(xié)調(diào)節(jié)點不會直接同歷史節(jié)點進(jìn)行通信,分配segment的過程是通過在ZK中相應(yīng)的歷史節(jié)點路徑下創(chuàng)建臨時segment信息節(jié)點完成的。一旦該動作被歷史節(jié)點獲知,該segment就會被歷史節(jié)點加載,并使其可查詢。

Running

io.druid.cli.Main server coordinator

Rules

Segments基于一組機(jī)制能夠?qū)崿F(xiàn)從集群中動態(tài)的加載和刪除

Cleaning Up Segments

每一次執(zhí)行時,協(xié)調(diào)節(jié)點將會對數(shù)據(jù)庫中存儲的可用segment信息和集群中當(dāng)前可用的segment信息做比較。集群中存在但數(shù)據(jù)庫中不存在的segments將會被標(biāo)記并加入待刪除隊列。對于那些版本已過期并且數(shù)據(jù)已被新的segments覆蓋的segments也會被刪除。注意,如果數(shù)據(jù)庫中所有的segments都被刪除了(或者被標(biāo)記為不可用),協(xié)調(diào)節(jié)點這時不會從集群中刪除segments。

Segment Availability

如果一個歷史節(jié)點由于重啟或者其他原因處于不可用狀態(tài),協(xié)調(diào)節(jié)點會通知一個歷史節(jié)點丟失,并將該歷史節(jié)點服務(wù)的segments全部置為dropped。在一段時間后,這些segments會被重新分配給集群中的其它節(jié)點。但是,并不是每個被刪除的segments信息馬上就會被集群清理,會有一個數(shù)據(jù)結(jié)構(gòu)來存儲刪除的segments和它們對應(yīng)的生命周期。在這個周期時間內(nèi),協(xié)調(diào)節(jié)點不會重新分配這個刪除的segments。因此,當(dāng)一個歷史節(jié)點在很短的時間內(nèi)轉(zhuǎn)變?yōu)榭捎脿顟B(tài)時,它就能馬上啟動并使本地cache中的segments可用,同時避免了segments在集群節(jié)點中的從新分配過程。

Balancing Segment Load

為了保證segments在集群中盡可能地均勻分布,協(xié)調(diào)節(jié)點在每次運行時會計算每個歷史節(jié)點所服務(wù)的所有segments的數(shù)據(jù)量情況。在集群每一層的歷史節(jié)點中,協(xié)調(diào)節(jié)點會選出存儲利用率最高和最低的歷史節(jié)點,如果兩個節(jié)點之間的利用率差值超過了一定的閾值,協(xié)調(diào)節(jié)點就會將一部分segments從最高利用率節(jié)點遷移到最低利用率節(jié)點,能夠遷移的segments數(shù)量上限通過一個參數(shù)來限制。對于需要遷移Segments的選擇是隨機(jī)的,并且只有遷移動作真正能使利用率降低的情況下segments才會被遷移。

HTTP Endpoints

協(xié)調(diào)節(jié)點提供的接口(協(xié)調(diào)節(jié)點提供的接口很多,這里列舉幾個,詳情請參考官網(wǎng) 【HTTP Endpoints】小節(jié)):

GET

  • /status
    返回Druid的版本信息、加載擴(kuò)展、使用內(nèi)存、全部內(nèi)存和該節(jié)點其他有用的信息

Coordinator information

  • /druid/coordinator/v1/leader
    返回當(dāng)前集群主協(xié)調(diào)節(jié)點
  • /druid/coordinator/v1/loadstatus
    返回已加載在集群中的segments和所有應(yīng)加載segments的比率
  • /druid/coordinator/v1/loadstatus?simple
    返回未加載的segments和所有應(yīng)加載segments的比率,不包括segments副本
  • /druid/coordinator/v1/loadstatus?full
    返回未加載的segments和所有應(yīng)加載segments的比率,包括segments副本
  • /druid/coordinator/v1/loadqueue
    返回每個歷史節(jié)點加載和刪除segments的ID
  • /druid/coordinator/v1/loadqueue?simple
    返回每個歷史節(jié)點加載和刪除segments的數(shù)目和及其加載和刪除的數(shù)據(jù)總量。
  • /druid/coordinator/v1/loadqueue?full
    返回每個歷史節(jié)點加載和刪除segments的json序列化信息。

Metadata store information

  • /druid/coordinator/v1/metadata/datasources
    返回集群中所有可用的datasources列表
  • /druid/coordinator/v1/metadata/datasources?includeDisabled
    返回集群中所有可用的和不可用的datasources列表
  • /druid/coordinator/v1/metadata/datasources?full
    返回集群中所有可用的datasources列表及其存儲的meta信息。
  • /druid/coordinator/v1/metadata/datasources/{dataSourceName}
    返回給定的datasource及其存儲的meta信息。
  • /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments
    返回一個給定datasource中的所有segments列表
  • /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments?full
    返回一個給定datasource中的所有segments列表及其meta信息

Datasources information

  • /druid/coordinator/v1/datasources
    返回集群中查詢到的datasources列表
  • /druid/coordinator/v1/datasources?simple
    返回一個包括datasource名稱及其配置信息的json對象,對象中包含segments數(shù)量,segments數(shù)據(jù)總大小、最小時間和最大時間

Rules

以json對象的形式返回集群中所有datasource包括默認(rèn)datasource包含的rules信息。

Intervals

  • /druid/coordinator/v1/intervals
    返回所有datasource的intervals信息,包括總大小和數(shù)量

DELETE

  • /druid/coordinator/v1/datasources/{dataSourceName}
    disable 一個給定的datasource
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。