当前位置: 首页 > news >正文

Elasticsearch:跨集群使用 ES|QL

警告:ES|QL 的跨集群搜索目前处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。

使用 ES|QL,你可以跨多个集群执行单个查询。

前提:

  • 跨集群搜索需要远程集群。要在 Elasticsearch Service 上设置远程集群,请参阅在 Elasticsearch Service 上配置远程集群。如果你在自己的硬件上运行 Elasticsearch,请参阅远程集群。
  • 要确保你的远程集群配置支持跨集群搜索,请参阅支持的跨集群搜索配置。
  • 要获得完整的跨集群搜索功能,本地和远程集群必须处于同一订阅级别。
  • 本地协调节点必须具有 remote_cluster_client 节点角色。
  • 如果你使用嗅探模式(sniff mode),则本地协调节点必须能够连接到远程集群上的种子节点和网关节点。
    • 我们建议使用能够充当协调节点的网关节点。种子节点(seed nodes)可以是这些网关节点的子集。
  • 如果你使用代理模式(proxy mode),则本地协调节点必须能够连接到配置的 proxy_address。此地址的代理必须能够将连接路由到远程集群上的网关和协调节点。
  • 跨集群搜索需要本地集群和远程集群上的不同安全权限。请参阅配置跨集群搜索和远程集群的权限。

如果你还不知道如何设置跨集群安全,请参考我之前的文章 “Elasticsearch:如何为 CCR 及 CCS 建立带有安全的集群之间的互信”。在那篇文章中,我有详细的步骤描述如何使得两个集群互信,并建立远程连接。

在 Ubuntu 机器上,我们可以创建一个与 mac 电脑的远程链接:

同样在 mac 机器上,我们可以建立一个与 Ubuntu 机器的远程连接:

安全模型

Elasticsearch 支持两种跨​​集群搜索 (CCS) 安全模型:

  • TLS certificate authentication
  • API key authentication

TLS 证书身份验证

TLS 证书身份验证使用双向 TLS 保护远程集群。当单个管理员完全控制两个集群时,这可能是首选模型。我们通常建议两个集群中的角色及其权限相同。

请参阅 TLS 证书身份验证,了解先决条件和详细设置说明。

API key authentication

注意:当使用基于 API 密钥的安全模型的 ES|QL 时,此版本不支持 ENRICH

以下信息涉及使用基于 API 密钥的安全模型跨集群使用 ES|QL。你需要按照该页面上的步骤获取完整的设置说明。此页面仅包含特定于 ES|QL 的其他信息。

基于 API 密钥的跨集群搜索 (CCS) 可以更精细地控制集群之间允许的操作。当你为不同的集群配备不同的管理员,并希望更好地控制谁可以访问哪些数据时,这可能是首选模型。在此模型中,集群管理员必须明确定义授予集群和用户的访问权限。

你需要:

  • 使用创建跨集群 API 密钥 API 或使用 Kibana API 密钥 UI 在远程集群上创建 API 密钥。
  • 将 API 密钥添加到本地集群上的密钥库,作为配置本地集群的步骤的一部分。来自本地集群的所有跨集群请求都受 API 密钥的权限约束。

使用基于 API 密钥的安全模型的 ES|QL 需要一些额外的权限,而使用基于传统查询 DSL 的搜索时可能不需要这些权限。以下示例 API 调用创建一个角色,该角色可以在使用基于 API 密钥的安全模型时使用 ES|QL 查询远程索引。

POST /_security/role/remote1
{"cluster": ["cross_cluster_search"], # 1"indices": [{"names" : [""], # 2"privileges": ["read"]}],"remote_indices": [ # 3{"names": [ "logs-*" ],"privileges": [ "read","read_cross_cluster" ], # 4 "clusters" : ["my_remote_cluster"] # 5}]
}
  • 本地集群需要 cross_cluster_search 集群权限。
  • 通常,用户将具有读取本地和远程索引的权限。但是,对于角色仅用于搜索远程集群的情况,仍需要本地集群的 read 权限。要提供对本地集群的读取访问权限,但不允许读取本地集群中的任何索引,names 字段可能为空字符串。
  • 索引允许对远程集群的读取访问权限。配置的 cross-cluster API key 还必须允许读取此索引。
  • 使用基于 API 密钥的安全模型跨集群使用 ES|QL 时,始终需要 read_cross_cluster 权限。
  • 这些权限适用的远程集群。必须为此远程集群配置 cross-cluster API key 并连接到远程集群,然后才能查询远程索引。使用 Remote cluster info 验证连接。

然后,你将需要一个具有上面创建的权限的用户或 API 密钥。以下示例 API 调用创建具有 remote1 角色的用户。

POST /_security/user/remote_user
{"password" : "<PASSWORD>","roles" : [ "remote1" ]
}

请记住,来自本地集群的所有跨集群请求都受跨集群 API 密钥的权限的约束,该权限由远程集群的管理员控制。

远程集群设置

配置安全模型后,你可以添加远程集群。

以下 cluster update settings  请求添加了三个远程集群:cluster_one、cluster_two 和 cluster_three。

PUT _cluster/settings
{"persistent": {"cluster": {"remote": {"cluster_one": {"seeds": ["35.238.149.1:9300"],"skip_unavailable": true},"cluster_two": {"seeds": ["35.238.149.2:9300"],"skip_unavailable": false},"cluster_three": {  "seeds": ["35.238.149.3:9300"]}}}}
}

由于 cluster_three 上未设置 skip_unavailable,因此它使用默认值 false。有关详细信息,请参阅 Optional remote clusters 部分。

跨多个集群查询

在 FROM 命令中,使用格式 <remote_cluster_name>:<target> 指定远程集群上的数据流和索引。例如,以下 ES|QL 请求查询名为 mac 的单个远程集群上的 twitter 索引:

步骤一

按照之前的文章 “Elasticsearch:如何为 CCR 及 CCS 建立带有安全的集群之间的互信” 配置两个互相的集群。我们使用如下的配置:

我们在 mac 电脑上打入如下的命令:

PUT twitter/_doc/1
{"content": "This is Xiaoguo from Elastic"
}

我们可以在的 Ubuntu 上可以做如下的查询:

POST _query?format=txt
{"query": """FROM mac:twitter| LIMIT 10"""
}

我们在 Ubuntu 电脑上也同时生成一个 twitter 索引:

PUT twitter/_doc/1
{"content": "This is the doc from Ubuntu machine"
}

那么我们可以在 Ubuntu 机器上使用如下命令来查询所有的文档:

POST _query?format=txt
{"query": """FROM twitter, *:twitter| LIMIT 10"""
}

跨集群丰富

ES|QL 中跨集群的丰富操作与本地丰富类似。如果丰富策略及其丰富索引在所有集群中都是一致的,则只需像没有远程集群一样编写丰富命令即可。在此默认模式下,ES|QL 可以在本地集群或远程集群上执行丰富命令,旨在最大限度地减少计算或集群间数据传输。确保策略在本地集群和远程集群上都存在且数据一致对于 ES|QL 产生一致的查询结果至关重要。

注意:当使用基于 API 密钥的安全模型的 ES|QL 时,此版本不支持跨集群丰富。

我们在 mac 电脑上执行如下的命令来创建 sample_data 索引:

PUT clientips
{"mappings": {"properties": {"client.ip": {"type": "keyword"},"env": {"type": "keyword"},"location": {"type": "keyword"}}}
}PUT sample_data/_bulk
{"index": {}}
{"@timestamp": "2023-10-23T12:15:03.360Z", "client.ip": "172.21.2.162", "message": "Connected to 10.1.0.3", "event.duration": 3450233}
{"index": {}}
{"@timestamp": "2023-10-23T12:27:28.948Z", "client.ip": "172.21.2.113", "message": "Connected to 10.1.0.2", "event.duration": 2764889}
{"index": {}}
{"@timestamp": "2023-10-23T13:33:34.937Z", "client.ip": "172.21.0.5", "message": "Disconnected", "event.duration": 1232382}
{"index": {}}
{"@timestamp": "2023-10-23T13:51:54.732Z", "client.ip": "172.21.3.15", "message": "Connection error", "event.duration": 725448}
{"index": {}}
{"@timestamp": "2023-10-23T13:52:55.015Z", "client.ip": "172.21.3.15", "message": "Connection error", "event.duration": 8268153}
{"index": {}}
{"@timestamp": "2023-10-23T13:53:55.832Z", "client.ip": "172.21.3.15", "message": "Connection error", "event.duration": 5033755}
{"index": {}}
{"@timestamp": "2023-10-23T13:55:01.543Z", "client.ip": "172.21.3.15", "message": "Connected to 10.1.0.1", "event.duration": 1756467}

我们在 Ubuntu 和 mac 机器上执行如下的命令:

PUT clientips
{"mappings": {"properties": {"client.ip": {"type": "keyword"},"env": {"type": "keyword"},"location": {"type": "keyword"}}}
}

我们在 Ubuntu 和 mac 机器上执行如下的丰富策略:

PUT /_enrich/policy/clientip_policy
{"match": {"indices": "clientips","match_field": "client.ip","enrich_fields": ["env", "location"]}
}
PUT /_enrich/policy/clientip_policy/_execute

我们在 Ubuntu 机器上执行如下的命令:

PUT clientips/_bulk
{ "index" : {}}
{ "client.ip": "172.21.0.5", "env": "Development", "location": "loc1" }
{ "index" : {}}
{ "client.ip": "172.21.2.113", "env": "QA", "location": "loc2" }
{ "index" : {}}
{ "client.ip": "172.21.2.162", "env": "QA", "location": "loc3" }
{ "index" : {}}
{ "client.ip": "172.21.3.15", "env": "Production", "location":"loc4" }
{ "index" : {}}
{ "client.ip": "172.21.3.16", "env": "Production", "location": "loc5" }

我们在 Ubuntu 机器上执行如下的查询:

POST _query?format=txt
{"query": """FROM mac:sample_data| KEEP client.ip, event.duration| EVAL client.ip = TO_STRING(client.ip)| ENRICH clientip_policy ON client.ip
"""
}

从上面我们可以看出我们对 env 及 location 进行了丰富。

相关文章:

Elasticsearch:跨集群使用 ES|QL

警告&#xff1a;ES|QL 的跨集群搜索目前处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。Elastic 将努力解决任何问题&#xff0c;但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。 使用 ES|QL&#xff0c;你可以跨多个集群执行单个查询。 前提&#xff1a; …...

学习笔记4:docker和k8s选择简述

docker和 k8s 占用资源 使用客户体量Docker 和 Kubernetes&#xff08;K8s&#xff09;都是流行的容器化技术&#xff0c;但它们在资源管理和使用上有一些不同。以下是关于两者资源占用和使用客户体量的详细比较&#xff0c;基于具体数据和信息&#xff1a; Docker 资源占用…...

关于锁策略

在Java中对于多线程来说&#xff0c;锁是一种重要且必不可少的东西&#xff0c;那么我们将如何使用以及在什么时候使用什么样的锁呢&#xff1f;请各位往下看 悲观锁VS乐观锁 悲观锁&#xff1a; 在多线程环境中&#xff0c;冲突是非常常见的&#xff0c;所以在执行操作之前…...

昇思25天学习打卡营第3天|基础知识-数据集Dataset

目录 环境 环境 导包 数据集加载 数据集迭代 数据集常用操作 shuffle map batch 自定义数据集 可随机访问数据集 可迭代数据集 生成器 MindSpore提供基于Pipeline的数据引擎&#xff0c;通过数据集&#xff08;Dataset&#xff09;和数据变换&#xff08;Transfor…...

C++11新特性——智能指针——参考bibi《 原子之音》的视频以及ChatGpt

智能指针 一、内存泄露1.1 内存泄露常见原因1.2 如何避免内存泄露 二、实例Demo2.1 文件结构2.2 Dog.h2.3 Dog.cpp2.3 mian.cpp 三、独占式智能指针:unique _ptr3.1 创建方式3.1.1 ⭐从原始(裸)指针转换&#xff1a;3.1.2 ⭐⭐使用 new 关键字直接创建&#xff1a;3.1.3 ⭐⭐⭐…...

“微软蓝屏”全球宕机,敲响基础软件自主可控警钟

上周五&#xff0c;“微软蓝屏”“感谢微软 喜提假期”等词条冲上热搜&#xff0c;全球百万打工人受此影响&#xff0c;共同见证这一历史性事件。据微软方面发布消息称&#xff0c;旗下Microsoft 365系列服务出现访问中断。随后在全球范围内&#xff0c;包括企业、政府、个人在…...

【Linux C | 网络编程】进程间传递文件描述符socketpair、sendmsg、recvmsg详解

我们的目的是&#xff0c;实现进程间传递文件描述符&#xff0c;是指 A进程打开文件fileA,获得文件描述符为fdA&#xff0c;现在 A进程要通过某种方法&#xff0c;传递fdA&#xff0c;使得另一个进程B&#xff0c;获得一个新的文件描述符fdB&#xff0c;这个fdB在进程B中的作用…...

高并发内存池(六)Page Cache回收功能的实现

当Page Cache接收了一个来自Central Cache的Span&#xff0c;根据Span的起始页的_pageId来对前一页所对应的Span进行查找&#xff0c;并判断该Span&#xff0c;是否处于使用状态&#xff0c;从而看是否可以合并&#xff0c;如果可以合并继续向前寻找。 当该Span前的空闲Span查…...

浅析JWT原理及牛客出现过的相关面试题

原文链接&#xff1a;https://kixuan.github.io/posts/f568/ 对jwt总是一知半解&#xff0c;而且项目打算写个关于JWT登录的点&#xff0c;所以总结关于JWT的知识及网上面试考察过的点 参考资料&#xff1a; Cookie、Session、Token、JWT_通俗地讲就是验证当前用户的身份,证明-…...

Spring AI (五) Message 消息

5.Message 消息 在Spring AI提供的接口中&#xff0c;每条信息的角色总共分为三类&#xff1a; SystemMessage&#xff1a;系统限制信息&#xff0c;这种信息在对话中的权重很大&#xff0c;AI会优先依据SystemMessage里的内容进行回复&#xff1b; UserMessage&#xff1a;用…...

【windows Docker desktop】在git bash中报错 docker: command not found 解决办法

【windows Docker desktop】在git bash中报错 docker: command not found 解决办法 1. 首先检查在windows中环境变量是否设置成功2. 检查docker在git bash中环境变量是否配置3. 重新加载终端配置4. 最后在校验一下是否配置成功 1. 首先检查在windows中环境变量是否设置成功 启…...

02.FreeRTOS的移植

文章目录 FreeRTOS移植到STM32F103ZET6上的详细步骤1. 移植前的准备工作2. 添加FreeRTOS文件3. 修改SYSTEM文件4. 修改中断相关文件5. 修改FreeRTOSConfig.h文件6. 可选步骤 FreeRTOS移植到STM32F103ZET6上的详细步骤 1. 移植前的准备工作 **基础工程&#xff1a;**内存管理部…...

【个人笔记】一个例子理解工厂模式

工厂模式优点&#xff1a;创建时类名过长或者参数过多或者创建很麻烦等情况时用&#xff0c;可以减少重复代码&#xff0c;简化对象的创建过程&#xff0c;避免暴露创建逻辑&#xff0c;也适用于需要统一管理所有创建对象的情况&#xff0c;比如线程池的工厂类Executors 简单工…...

【C语言】数组栈的实现

栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#…...

kafka 各种选举过程

一、kafka 消费者组协调器 如何选举 Kafka 中的消费者组协调器&#xff08;Group Coordinator&#xff09;是通过以下步骤选举的&#xff1a; 分区映射&#xff1a; Kafka 使用一个特殊的内部主题 __consumer_offsets 来存储消费者组的元数据。该主题有多个分区&#xff0c;每…...

树与二叉树【数据结构】

前言 之前我们已经学习过了各种线性的数据结构&#xff0c;顺序表、链表、栈、队列&#xff0c;现在我们一起来了解一下一种非线性的结构----树 1.树的结构和概念 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一…...

简单几步,把浏览器书签转换成导航网页

废话不多说直奔主题上干货 Step 1 下载浏览器书签 1&#xff0c;电脑浏览器点击下载Pintree Pintree 是一个开源项目&#xff0c;旨在将浏览器书签导出成导航网站。通过简单的几步操作&#xff0c;就可以将你的书签转换成一个美观且易用的导航页面。 2. 安装 Pintree B…...

Mac安装Hoomebrew与升级Python版本

参考 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装了Python 3.x版本&#xff0c;你可以使用以下命令来设置默认的Python版本&#xff1a; # 首先找到新安…...

代码审计:Bluecms v1.6

代码审计&#xff1a;Bluecms v1.6 漏洞列表如下(附Exp)&#xff1a; 未完待续… 1、include/common.fun.php->getip()存在ip伪造漏洞 2、ad_js.php sql注入漏洞 Exp:view-source:http://127.0.0.3/bluecms/ad_js.php?ad_id12%20UNION%20SELECT1,2,3,4,5,6,database() 3、…...

谷粒商城实战笔记-59-商品服务-API-品牌管理-使用逆向工程的前后端代码

文章目录 一&#xff0c; 使用逆向工程生成的代码二&#xff0c;生成品牌管理菜单三&#xff0c;几个小问题 在本次的技术实践中&#xff0c;我们利用逆向工程的方法成功地为后台管理系统增加了品牌管理功能。这种开发方式不仅能快速地构建起功能模块&#xff0c;还能在一定程度…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...