為了能夠在不影響線上服務(wù),無(wú)縫的升級(jí)Druid集群崔步,建議按照以下順序更新Druid節(jié)點(diǎn)。
- Historical
- Overlord
- Middle Manager
- Standalone Real-time
- Broker
- Coordinator
Historical
歷史節(jié)點(diǎn)一次更新一個(gè)缎谷,歷史節(jié)點(diǎn)啟動(dòng)的時(shí)候?qū)⑻峁┓?wù)的所有Segment加載映射到內(nèi)存中井濒,這可能只需要幾秒就能完成,也可能需要幾分鐘列林,取決于歷史節(jié)點(diǎn)的硬件條件瑞你,以及數(shù)據(jù)量。兩個(gè)歷史節(jié)點(diǎn)更新的時(shí)間間隔應(yīng)該大于一個(gè)歷史節(jié)點(diǎn)的啟動(dòng)時(shí)間希痴。
Overlord
Overlord節(jié)點(diǎn)也是一次更新一個(gè)者甲。然后逐個(gè)更新。
Middle Managers
Middle Manager節(jié)點(diǎn)運(yùn)行著批處理任務(wù)和時(shí)間索引任務(wù)砌创。如果想要在不影響任務(wù)的前提下升級(jí)Middle Managers節(jié)點(diǎn)虏缸,可以通過(guò)以下三種策略鲫懒。
Rolling restart (基于恢復(fù))
如果 Middle Managers節(jié)點(diǎn)配置了druid.indexer.task.restoreTasksOnRestart=true參數(shù)。如果配置了個(gè)該參數(shù)索引任務(wù)的狀態(tài)存儲(chǔ)在磁盤刽辙, Middle Manager節(jié)點(diǎn)重啟以后索引任務(wù)也會(huì)自動(dòng)重啟窥岩,而不會(huì)失敗。
Rolling restart (基于優(yōu)雅的終止)
Middle Manager節(jié)點(diǎn)可以通過(guò)"disable" API優(yōu)雅的終止宰缤。這種方式適合所有的任務(wù)颂翼,包括不可恢復(fù)的任務(wù)。
在打算升級(jí) Middle Manager節(jié)點(diǎn)時(shí)慨灭,首先向<MiddleManager_IP:PORT>/druid/worker/v1/disable發(fā)送post請(qǐng)求朦乏。這樣Overlord節(jié)點(diǎn)不再會(huì)發(fā)送新的任務(wù)到該 Middle Manager節(jié)點(diǎn)。等待當(dāng)前的任務(wù)運(yùn)行完成氧骤。節(jié)點(diǎn)狀態(tài)可以通過(guò)<MiddleManager_IP:PORT>/druid/worker/v1/enabled獲取呻疹。通過(guò)GET請(qǐng)求<MiddleManager_IP:PORT>/druid/worker/v1/tasks獲取當(dāng)前的所有任務(wù)。當(dāng)獲取的列表為空時(shí)语淘,你就可以安全的更新Middle Manager節(jié)點(diǎn)了诲宇。當(dāng)Middle Managers節(jié)點(diǎn)啟動(dòng)以后,它會(huì)自動(dòng)開(kāi)啟惶翻,接收任務(wù)姑蓝,可以通過(guò)向<MiddleManager_IP:PORT>/druid/worker/v1/enable發(fā)送post請(qǐng)求來(lái)開(kāi)啟。
Autoscaling-based replacement(自動(dòng)擴(kuò)容更新)
如果Overlord節(jié)點(diǎn)開(kāi)啟了自動(dòng)擴(kuò)容吕粗,Overlord節(jié)點(diǎn)可以啟動(dòng)大量新的Middle Manager節(jié)點(diǎn)纺荧,在當(dāng)老的Middle Manager節(jié)點(diǎn)上的任務(wù)完成以后,安全的關(guān)閉老的Middle Manager節(jié)點(diǎn)颅筋。這個(gè)過(guò)程可以通過(guò)druid.indexer.runner.minWorkerVersion=#{VERSION}來(lái)設(shè)置宙暇。每次更新overlord節(jié)點(diǎn),VERSION的值應(yīng)該遞增议泵,這樣將會(huì)有大量的新的Middle Manager節(jié)點(diǎn)啟動(dòng)占贫。druid.indexer.autoscale.workerVersion=#{VERSION}參宿也需要設(shè)置。
Standalone Real-time
Standalone Real-time節(jié)點(diǎn)也是一次更新一個(gè)先口。然后逐個(gè)更新型奥。
Broker
Broker節(jié)點(diǎn)也是一次更新一個(gè),然后逐個(gè)更新碉京。Broker節(jié)點(diǎn)啟動(dòng)后需要加載整個(gè)集群的健康狀態(tài)信息厢汹,所以兩個(gè)Broker節(jié)點(diǎn)的更新時(shí)間間隔應(yīng)該由一定的延遲。
Coordinator
Coordinator節(jié)點(diǎn)也是一次更新一個(gè)谐宙。然后逐個(gè)更新烫葬。