ES 關(guān)于 remote_cluster 的一記小坑
最近有小伙伴找到我們說 Kibana 上添加不了 Remote Cluster,填完信息點(diǎn) Save 直接跳回原界面了。具體頁面,就和沒添加前一樣。

我們和小伙伴雖然隔著網(wǎng)線但還是進(jìn)行了深入、詳細(xì)的交流,梳理出來了如下信息:
兩個(gè)集群:集群 A 和集群 B ,版本都是 7.10.0 ;
集群 A 沒區(qū)分節(jié)點(diǎn)角色;
集群 B 設(shè)置了 獨(dú)立的 master 節(jié)點(diǎn)、coordinator 節(jié)點(diǎn)和 data 節(jié)點(diǎn),其中 data 節(jié)點(diǎn)還帶 remote_cluster_client 角色;
在集群 A 的 Kibana 可以添加 集群 B 為遠(yuǎn)程集群;
在集群 B 添加 集群 A 就不行,Kibana 跳回之前的頁面;
網(wǎng)絡(luò)組確認(rèn)已經(jīng)放開策略,網(wǎng)絡(luò)測試也正常;
翻看了 ES 和 Kibana 的日志, ES 日志中有連接失敗的錯(cuò)誤信息, Kibana 日志中無對應(yīng)輸出。
已經(jīng)測試過網(wǎng)絡(luò)是通的,開始嘗試把集群 B 的角色配置統(tǒng)統(tǒng)去掉再嘗試。
嘿,添加成功了。
接下來為了找出問題,開始一步一步給每個(gè)節(jié)點(diǎn)再加回原來的角色。而且如果節(jié)點(diǎn)原來沒有 remote_cluster_client 角色,這次也一并加上。
操作過程
先從 data 節(jié)點(diǎn)開始,恢復(fù)角色,嘗試添加遠(yuǎn)程集群,失敗。
接著 coordinate 節(jié)點(diǎn) , 恢復(fù)角色且新增 remote_cluster_client 角色,嘗試添加遠(yuǎn)程集群,失敗。
最后 master 節(jié)點(diǎn),恢復(fù)角色且新增 remote_cluster_client 角色,嘗試添加遠(yuǎn)程集群,成功。
最終直到所有節(jié)點(diǎn)都有 remote_cluster_client 角色后,才成功添加遠(yuǎn)程集群。
結(jié)論: ES 集群添加遠(yuǎn)程集群所有節(jié)點(diǎn)都必須擁有 remote_cluster_client 角色。
事情到這里,似乎沒什么問題。但當(dāng)我們對這個(gè)結(jié)論進(jìn)行檢驗(yàn)時(shí),又有了新發(fā)現(xiàn)。
上面的場景忽視了一個(gè)因素 -- Kibana 。于是我們搭建了一個(gè)兩個(gè)節(jié)點(diǎn)的集群,其中節(jié)點(diǎn) A 是全角色節(jié)點(diǎn),節(jié)點(diǎn) B 只是 data 節(jié)點(diǎn)。讓 Kibana 分別連接兩個(gè)節(jié)點(diǎn)進(jìn)行測試。
驗(yàn)證結(jié)果
當(dāng) Kibana 連接節(jié)點(diǎn) A 時(shí),可以正常添加。
Kibana 連接節(jié)點(diǎn) B 時(shí),添加失敗,跳回界面。
結(jié)論:ES 集群添加遠(yuǎn)程集群時(shí),Kibana 連接的 ES 節(jié)點(diǎn)必須擁有 remote_cluster_client 角色。
很顯然,這個(gè)結(jié)論更合理。
原因分析
我們是通過 Kibana 界面操作去添加遠(yuǎn)程集群的, Kibana 連接的節(jié)點(diǎn)就被當(dāng)作 remote_client 。該節(jié)點(diǎn)要向遠(yuǎn)程集群發(fā)起連接并執(zhí)行相關(guān)調(diào)用。但這一切有個(gè)前提,該節(jié)點(diǎn)必須有 remote_cluster_client 角色才能向遠(yuǎn)程集群發(fā)起連接。

引申
我們的 CCS 操作也必須發(fā)送到一個(gè)具有 remote_cluster_client 角色的節(jié)點(diǎn),才能成功執(zhí)行。



參考連接
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/modules-node.html