Druid協(xié)調(diào)節(jié)點(diǎn)主要負(fù)責(zé)segment的管理和分配梁钾,它基于配置信息通知?dú)v史節(jié)點(diǎn)加載和刪除segments旦装。具體來(lái)說(shuō),協(xié)調(diào)節(jié)點(diǎn)的工作主要包括以下幾個(gè)方面:加載新segments信息,刪除過(guò)期segments信息峭拘,管理segment的復(fù)制操作和segment的負(fù)載均衡。
協(xié)調(diào)節(jié)點(diǎn)周期性的執(zhí)行操作狮暑,執(zhí)行間隔通過(guò)配置參數(shù)指定棚唆。與Broker和Historical節(jié)點(diǎn)類似,協(xié)調(diào)節(jié)點(diǎn)也會(huì)與ZK維持一個(gè)長(zhǎng)連接心例,在執(zhí)行相應(yīng)的動(dòng)作之前宵凌,協(xié)調(diào)節(jié)點(diǎn)會(huì)從ZK獲取集群當(dāng)前的狀態(tài)。同時(shí)協(xié)調(diào)節(jié)點(diǎn)也維持著與一個(gè)數(shù)據(jù)庫(kù)的鏈接止后,其中存儲(chǔ)著可用segments和規(guī)則的信息瞎惫。可用segments信息存儲(chǔ)在segment表里译株,其中列除了所有在集群中加載的segments瓜喇。規(guī)則信息存儲(chǔ)在規(guī)則表中,它指明了segments應(yīng)該被怎樣處理歉糜。
在一個(gè)新segment被分配至歷史節(jié)點(diǎn)前乘寒,所有可用的歷史節(jié)點(diǎn)會(huì)根據(jù)已存儲(chǔ)數(shù)據(jù)的大小進(jìn)行排序,存儲(chǔ)數(shù)據(jù)最少的節(jié)點(diǎn)有最高的優(yōu)先級(jí)被分配到新segment匪补,這種機(jī)制是為了節(jié)點(diǎn)之間存儲(chǔ)的均衡伞辛。協(xié)調(diào)節(jié)點(diǎn)不會(huì)直接同歷史節(jié)點(diǎn)進(jìn)行通信,分配segment的過(guò)程是通過(guò)在ZK中相應(yīng)的歷史節(jié)點(diǎn)路徑下創(chuàng)建臨時(shí)segment信息節(jié)點(diǎn)完成的夯缺。一旦該動(dòng)作被歷史節(jié)點(diǎn)獲知蚤氏,該segment就會(huì)被歷史節(jié)點(diǎn)加載,并使其可查詢踊兜。
Running
io.druid.cli.Main server coordinator
Rules
Segments基于一組機(jī)制能夠?qū)崿F(xiàn)從集群中動(dòng)態(tài)的加載和刪除
Cleaning Up Segments
每一次執(zhí)行時(shí)竿滨,協(xié)調(diào)節(jié)點(diǎn)將會(huì)對(duì)數(shù)據(jù)庫(kù)中存儲(chǔ)的可用segment信息和集群中當(dāng)前可用的segment信息做比較。集群中存在但數(shù)據(jù)庫(kù)中不存在的segments將會(huì)被標(biāo)記并加入待刪除隊(duì)列。對(duì)于那些版本已過(guò)期并且數(shù)據(jù)已被新的segments覆蓋的segments也會(huì)被刪除于游。注意毁葱,如果數(shù)據(jù)庫(kù)中所有的segments都被刪除了(或者被標(biāo)記為不可用),協(xié)調(diào)節(jié)點(diǎn)這時(shí)不會(huì)從集群中刪除segments贰剥。
Segment Availability
如果一個(gè)歷史節(jié)點(diǎn)由于重啟或者其他原因處于不可用狀態(tài)头谜,協(xié)調(diào)節(jié)點(diǎn)會(huì)通知一個(gè)歷史節(jié)點(diǎn)丟失,并將該歷史節(jié)點(diǎn)服務(wù)的segments全部置為dropped鸠澈。在一段時(shí)間后柱告,這些segments會(huì)被重新分配給集群中的其它節(jié)點(diǎn)。但是笑陈,并不是每個(gè)被刪除的segments信息馬上就會(huì)被集群清理际度,會(huì)有一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)刪除的segments和它們對(duì)應(yīng)的生命周期。在這個(gè)周期時(shí)間內(nèi)涵妥,協(xié)調(diào)節(jié)點(diǎn)不會(huì)重新分配這個(gè)刪除的segments乖菱。因此,當(dāng)一個(gè)歷史節(jié)點(diǎn)在很短的時(shí)間內(nèi)轉(zhuǎn)變?yōu)榭捎脿顟B(tài)時(shí)蓬网,它就能馬上啟動(dòng)并使本地cache中的segments可用窒所,同時(shí)避免了segments在集群節(jié)點(diǎn)中的從新分配過(guò)程。
Balancing Segment Load
為了保證segments在集群中盡可能地均勻分布帆锋,協(xié)調(diào)節(jié)點(diǎn)在每次運(yùn)行時(shí)會(huì)計(jì)算每個(gè)歷史節(jié)點(diǎn)所服務(wù)的所有segments的數(shù)據(jù)量情況吵取。在集群每一層的歷史節(jié)點(diǎn)中,協(xié)調(diào)節(jié)點(diǎn)會(huì)選出存儲(chǔ)利用率最高和最低的歷史節(jié)點(diǎn)锯厢,如果兩個(gè)節(jié)點(diǎn)之間的利用率差值超過(guò)了一定的閾值皮官,協(xié)調(diào)節(jié)點(diǎn)就會(huì)將一部分segments從最高利用率節(jié)點(diǎn)遷移到最低利用率節(jié)點(diǎn),能夠遷移的segments數(shù)量上限通過(guò)一個(gè)參數(shù)來(lái)限制实辑。對(duì)于需要遷移Segments的選擇是隨機(jī)的捺氢,并且只有遷移動(dòng)作真正能使利用率降低的情況下segments才會(huì)被遷移。
HTTP Endpoints
協(xié)調(diào)節(jié)點(diǎn)提供的接口(協(xié)調(diào)節(jié)點(diǎn)提供的接口很多剪撬,這里列舉幾個(gè)摄乒,詳情請(qǐng)參考官網(wǎng) 【HTTP Endpoints】小節(jié)):
GET
- /status
返回Druid的版本信息、加載擴(kuò)展残黑、使用內(nèi)存馍佑、全部?jī)?nèi)存和該節(jié)點(diǎn)其他有用的信息
Coordinator information
- /druid/coordinator/v1/leader
返回當(dāng)前集群主協(xié)調(diào)節(jié)點(diǎn) - /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
返回每個(gè)歷史節(jié)點(diǎn)加載和刪除segments的ID - /druid/coordinator/v1/loadqueue?simple
返回每個(gè)歷史節(jié)點(diǎn)加載和刪除segments的數(shù)目和及其加載和刪除的數(shù)據(jù)總量挤茄。 - /druid/coordinator/v1/loadqueue?full
返回每個(gè)歷史節(jié)點(diǎn)加載和刪除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列表及其存儲(chǔ)的meta信息冰木。 - /druid/coordinator/v1/metadata/datasources/{dataSourceName}
返回給定的datasource及其存儲(chǔ)的meta信息。 - /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments
返回一個(gè)給定datasource中的所有segments列表 - /druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments?full
返回一個(gè)給定datasource中的所有segments列表及其meta信息
Datasources information
- /druid/coordinator/v1/datasources
返回集群中查詢到的datasources列表 - /druid/coordinator/v1/datasources?simple
返回一個(gè)包括datasource名稱及其配置信息的json對(duì)象,對(duì)象中包含segments數(shù)量踊沸,segments數(shù)據(jù)總大小歇终、最小時(shí)間和最大時(shí)間
Rules
以json對(duì)象的形式返回集群中所有datasource包括默認(rèn)datasource包含的rules信息。
Intervals
- /druid/coordinator/v1/intervals
返回所有datasource的intervals信息逼龟,包括總大小和數(shù)量
DELETE
- /druid/coordinator/v1/datasources/{dataSourceName}
disable 一個(gè)給定的datasource