最近有小伙伴找到我们说 Kibana 上添加不了 Remote Cluster,填完信息点 Save 直接跳回原界面了。具体页面,就和没添加前一样。

我们和小伙伴虽然隔着网线但还是进行了深入、详细的交流,梳理出来了如下信息:

  1. 两个集群:集群 A 和集群 B ,版本都是 7.10.0 ;

    1. 集群 A 没区分节点角色;
    2. 集群 B 设置了 独立的 master 节点、coordinator 节点和 data 节点,其中 data 节点还带 remote_cluster_client 角色;
  2. 在集群 A 的 Kibana 可以添加 集群 B 为远程集群;
  3. 在集群 B 添加 集群 A 就不行,Kibana 跳回之前的页面;
  4. 网络组确认已经放开策略,网络测试也正常;

翻看了 ES 和 Kibana 的日志, ES 日志中有连接失败的错误信息, Kibana 日志中无对应输出。

[2023-09-13T11:38:41,055][INFO ][o.e.c.s.ClusterSettings  ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,055][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,056][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,056][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,057][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,057][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,093][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,094][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,094][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,094][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:41,095][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.mode] from [SNIFF] to [sniff]
[2023-09-13T11:38:41,096][INFO ][o.e.c.s.ClusterSettings ] [710-1] updating [cluster.remote.test.seeds] from [[]] to [["127.0.0.1:7102"]]
[2023-09-13T11:38:51,099][WARN ][o.e.t.RemoteClusterService] [710-1] failed to connect to new remote cluster test within 10s
[2023-09-13T11:39:11,101][WARN ][o.e.t.SniffConnectionStrategy] [710-1] fetching nodes from external cluster [test] failed
org.elasticsearch.transport.ConnectTransportException: [][127.0.0.1:7102] handshake_timeout[30s]
at org.elasticsearch.transport.TransportHandshaker.lambda$sendHandshake$1(TransportHandshaker.java:73) ~[elasticsearch-7.10.2.jar:7.10.2]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:684) ~[elasticsearch-7.10.2.jar:7.10.2]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
at java.lang.Thread.run(Thread.java:832) [?:?]

已经测试过网络是通的,开始尝试把集群 B 的角色配置统统去掉再尝试。

嘿,添加成功了。

接下来为了找出问题,开始一步一步给每个节点再加回原来的角色。而且如果节点原来没有 remote_cluster_client 角色,这次也一并加上。

操作过程

  • 先从 data 节点开始,恢复角色,尝试添加远程集群,失败。
  • 接着 coordinate 节点 , 恢复角色且新增 remote_cluster_client 角色,尝试添加远程集群,失败。
  • 最后 master 节点,恢复角色且新增 remote_cluster_client 角色,尝试添加远程集群,成功。

最终直到所有节点都有 remote_cluster_client 角色后,才成功添加远程集群。

结论: ES 集群添加远程集群所有节点都必须拥有 remote_cluster_client 角色。

事情到这里,似乎没什么问题。但当我们对这个结论进行检验时,又有了新发现。

上面的场景忽视了一个因素 -- Kibana 。于是我们搭建了一个两个节点的集群,其中节点 A 是全角色节点,节点 B 只是 data 节点。让 Kibana 分别连接两个节点进行测试。

验证结果

  • 当 Kibana 连接节点 A 时,可以正常添加。
  • Kibana 连接节点 B 时,添加失败,跳回界面。

结论:ES 集群添加远程集群时,Kibana 连接的 ES 节点必须拥有 remote_cluster_client 角色。

很显然,这个结论更合理。

原因分析

我们是通过 Kibana 界面操作去添加远程集群的, Kibana 连接的节点就被当作 remote_client 。该节点要向远程集群发起连接并执行相关调用。但这一切有个前提,该节点必须有 remote_cluster_client 角色才能向远程集群发起连接。



引申

我们的 CCS 操作也必须发送到一个具有 remote_cluster_client 角色的节点,才能成功执行。





参考连接

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

ES 关于 remote_cluster 的一记小坑的更多相关文章

  1. mciSendString 的两个小坑

    刚刚修正了自己用的小闹钟的代码. 坑1:REPEAT 选项的作用范围 原来用得好好的,之后选择 .wav 文件,居然不出声音了…… 诶,MCI 肯定支持 .wav 的啊…… 仔细想想,我以前都是选 . ...

  2. 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式

    注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...

  3. C#中的Infinity有个小坑

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...

  4. 使用EMMET中的小坑

    使用EMMET写HTML的时候,是一个非常爽的事情.但是今天我使用时,发现一个小坑.以前倒也没有注意,不过需要非常的小心. form[action="/process" metho ...

  5. 关于CSS3中transform变换的小坑

    2017年6月30日15:05:46 今天在写一个demo的时候,发现CSS3中transform变换的一个特性. 首先,我先描述一下我发现的情况(问题再现): <div class=" ...

  6. Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理

    基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...

  7. go的变量redeclare的问题,golang的一个小坑

    go的变量声明有几种方式: 1 通过关键字 var 进行声明 例如:var i int   然后进行赋值操作 i = 5 2 最简单的,通过符号 := 进行声明和赋值 例如: i:=5 golang会 ...

  8. MySQL中字段类型为timestamp的小坑

    之前遇到过一个MySQL的字段为timestamp类型的小坑. MySQL中一个字段存储时间类型数据的时候,该字段的类型如果为timestamp类型的话,最多只能存储到2038-01-19 11:14 ...

  9. mysql url 连接配置的一个小坑。 工作中不会遇到。 学习的时候会

    <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> & ...

  10. 关于sniff函数的一个小坑

    最近在用scapy模块写一个关于WiFi的脚本时用到sniff函数,其中遇到了一个小坑,记录如下: sniff函数是在指定网卡上每次嗅探到一个数据包后然后将它传给prn指定的函数.

随机推荐

  1. 力扣564(java)-寻找最近的回文数(困难)

    题目: 给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身).如果不止一个,返回较小的那个. "最近的"定义为两个整数差的绝对值最小. 示例 1: 输入: n = ...

  2. 暑期集训 Day5 —— 模拟赛复盘

    ${\color{Green} \mathrm{Problem\ 1 :选数 }} $ 签到题,一眼二分,但是打模板时死循环了: while(L<R){ int mid=(L+R)>> ...

  3. SQL Server实战一:创建、分离、附加、删除、备份数据库

      本文介绍基于Microsoft SQL Server软件,实现数据库创建.分离.附加.删除与备份的方法. 目录 1 交互式创建数据库 2 Transact-SQL指定参数创建数据库 3 交互式分离 ...

  4. Serverless 架构下的 AI 应用开发:入门、实战与性能优化

    简介: 本章通过对 Serverless 架构概念的探索,对 Serverless 架构的优势与价值.挑战与困境进行分析,以及 Serverless 架构应用场景的分享,为读者介绍 Serverles ...

  5. [Caddy2] Caddyfile 指令

    以下是 Caddyfile 的标准指令. acme_server An embedded ACME server basicauth Enforces HTTP Basic Authenticatio ...

  6. 魔方OA 数据字典

    https://gitee.com/mojocube/mc-oa/blob/master/Data/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%84%9A%E6%9C%AC.sql ...

  7. Fast Walsh Transform 学习笔记 | FWT

    本文中使用 \(\cap\) 表示按位与,用 \(\cup\) 表示按位或 Part 1. 与/或 卷积 First. 问题引入 给定长度为 \(2^n\) 的数列 \(A,B\),求 \(C_i = ...

  8. Linux 备忘

    ls 通配符 匹配 ? 一个字符 * >=0个任意字符 [ai] a 或者 i [a-i] a/b/c/d...i [!a] 除了a cat cat -n test #加上行号 cat -b t ...

  9. Python 潮流周刊#49:谷歌裁员 Python 团队,微软开源 MS-DOS 4.0

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  10. docker、docker-compose 常用命令

    1.docker 常用命令 创建容器:docker create 启动容器:docker start [id] 停止容器:docker stop [id] 停止全部运行的容器:docker stop ...