Trino418版本動(dòng)態(tài)加載catalog不需要重啟集群修改思路及實(shí)現(xiàn)
(資料圖片)
①啟動(dòng)后只有Coordinator節(jié)點(diǎn)能夠正常的加載catalog目錄,node節(jié)點(diǎn)啟動(dòng)的時(shí)候無法加載catalog目錄。這部分是因?yàn)?官方的DynamicCatalogManagerModule 功能并不完整,只實(shí)現(xiàn)了Coordinator的部分的功能,下面的 Worker的加載功能并沒有實(shí)現(xiàn),這部分需要新增Worker加載Catalog目錄功能、以及實(shí)現(xiàn)CatalogManager接口。
②Restful Api接口來新增catalog時(shí)候,Worker節(jié)點(diǎn)沒有成功加載catalog: 這個(gè)是我實(shí)現(xiàn)過程中花了時(shí)間最長,但是又最不需要修改的地方。網(wǎng)上有方案修改DiscoveryNodeManager在檢測心跳的時(shí)候去新增這個(gè)Catalog,但是我測試了下在比較新的Trino版本并沒有作用。 另外的做定時(shí)刷新,這個(gè)可能是有用,但是并不符合我的想法,我想只有在新增的catalog時(shí)API接口觸發(fā)下就行,而且立馬就可以用,不需要等刷新時(shí)間。 實(shí)現(xiàn)方案:其實(shí)ServerMainModule里注入了RestfulAPI后,就相當(dāng)于Coordinator 跟 Worker 都實(shí)現(xiàn)了這些API,并不是只有Coordinator才有這些功能,所以這一步只要通過/v1/node 獲取到所有的node節(jié)點(diǎn), 通過對應(yīng)的地址去注冊Catalog就行,根本就不需要去做多余的額外實(shí)現(xiàn)。(為了這個(gè)不需要修改的功能搞了2個(gè)星期,最后發(fā)現(xiàn)不需要改也能實(shí)現(xiàn),崩潰。。。。。)實(shí)踐效果:1.獲取node節(jié)點(diǎn)
2.新增catalog
Coordinator:
Worker:
不需要重啟查詢:
刪除某個(gè)catalog:
到這里基本就完成了不重啟自動(dòng)加載Catalog目錄的功能,但是仍然有一點(diǎn)小問題,經(jīng)過測試同樣名稱的catalog新增后刪除后,再新增仍然使用同樣的名稱跟連接器,會(huì)導(dǎo)致跟前面加載進(jìn)去的同名連接器沖突,但是這個(gè)可以讓程序上就源頭上規(guī)避掉,使用過的catalog名稱就不然再使用。在數(shù)據(jù)庫里面把名稱設(shè)為主鍵,刪除catalog只修改狀態(tài)不刪除記錄。
目前這個(gè)是我實(shí)現(xiàn)的方案,如果有更好的想法老鐵歡迎留言一起交流,關(guān)于Coordinator同步了能自動(dòng)同步到Worker節(jié)點(diǎn)的功能,網(wǎng)上關(guān)于這個(gè)修改的資料比較少。
關(guān)鍵詞:


