Elasticsearch 通过索引阻塞实现数据保护深入解析

目录

前言

1、索引阻塞的种类

2、什么时候使用阻塞?

场景1:进行系统维护场景。

场景2:保护数据不被随意更改场景。

场景3:优化资源使用的场景。

场景4:遵守安全规则场景。

3、添加索引阻塞API

4、解除设置 API

5、小结

6、参考


前言

Elasticsearch是一种强大的搜索和分析引擎,被广泛用于各种应用中,以其强大的全文搜索能力而著称。

不过,在日常管理 Elasticsearch 时,我们经常需要对索引进行保护,以防止数据被意外修改或删除,特别是在进行系统维护或者需要优化资源使用时。

Elasticsearch提供了一种名为“ 索引阻塞 (Index blocks)”的功能,让我们能够限制对某个索引的操作类型。

Elasticsearch的索引阻塞功能在早期版本中就已存在,用于管理对索引的访问和操作。随着 Elasticsearch 版本的更新,该功能也在不断得到改进和扩展。

参见官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-blocks.html

大白话 ——"索引阻塞"就是给我们的索引加把锁,防止别人随意修改。

1、索引阻塞的种类

Elasticsearch中的索引阻塞可以根据需要,限制对索引的读取、写入或元数据操作。

所谓的元数据,可以理解为索引的基本信息和设置,比如索引包含哪些字段,这些字段是什么类型的等等。

这些阻塞可以通过动态索引设置添加或移除,也可以通过专门的API来添加,这样做的好处是能确保在添加写入阻塞后,所有索引的分片都正确地应用了阻塞,比如确保在添加写入阻塞后,所有正在进行的写入操作都已完成。

以下是一些动态索引设置,用于确定索引上存在的阻塞类型:

  • index.blocks.read_only:设置为 true 使索引及索引元数据只读,设置为false则允许写入和元数据更改。

  • index.blocks.read_only_allow_delete:类似于index.blocks.read_only,但也允许删除索引以释放更多资源。

  • index.blocks.read:设置为 true 以禁用对索引的读取操作。

  • index.blocks.write:设置为 true 以禁用对索引的数据写入操作。与read_only不同,这个设置不影响元数据。例如,你可以调整带有写入阻塞的索引的设置,但不能调整带有read_only阻塞的索引的设置。

  • index.blocks.metadata:设置为true以禁用索引元数据的读写操作。

设置名称描述
index.blocks.read_only设置为 true 使索引及索引元数据只读,设置为 false 则允许写入和元数据更改。
index.blocks.read_only_allow_delete类似于 index.blocks.write ,但也允许删除索引以释放更多资源。磁盘基础的分片分配器可能会自动添加和移除这个阻塞。
index.blocks.read设置为 true 以禁用对索引的读取操作。
index.blocks.write设置为 true 以禁用对索引的数据写入操作。与 read_only 不同,这个设置不影响元数据。例如,你可以调整带有写入阻塞的索引的设置,但不能调整带有 read_only 阻塞的索引的设置。
index.blocks.metadata设置为 true 以禁用索引元数据的读写操作。

解释一下:index.blocks.read_only 和 index.blocks.write 区别 

如下设置了禁止写入,但是可以修改索引的设置,比如:副本数的调整,这个是允许的。

PUT test-001/_settings
{"blocks.write": true
}PUT test-001/_settings
{"number_of_replicas": 2
}

但是换成这样:

PUT test-002
PUT test-002/_settings
{"blocks.read_only": true
}PUT test-002/_settings
{"number_of_replicas": 2
}

如上的 read_only 设置后,如果再进行修改索引设置的设置就会报错。

{"error": {"root_cause": [{"type": "cluster_block_exception","reason": "index [test-002] blocked by: [FORBIDDEN/5/index read-only (api)];"}],"type": "cluster_block_exception","reason": "index [test-002] blocked by: [FORBIDDEN/5/index read-only (api)];"},"status": 403
}

简而言之,index.blocks.write 允许你保护索引内容的稳定性,同时仍然可以调整索引的配置来应对不同的需求或进行优化。而 index.blocks.read_only 则是一种更为严格的保护,确保索引在某段时间内完全不被更改。

2、什么时候使用阻塞?

场景1:进行系统维护场景。

比如,当你需要升级系统或者做一些关键的维护工作时,可能不希望在这期间有任何索引结构的变化。

通过阻止别人修改索引的元数据,确保索引的设置保持不变,维护索引设置的稳定性。

场景2:保护数据不被随意更改场景。

举例:如果咱们的业务数据是非常关键的,比如已经归档的日志或者历史记录,这些数据通常是不允许被更改的。

防止关键数据被随意更改或删除,确保数据的完整性和准确性。

场景3:优化资源使用的场景。

举例:有时候某个索引可能占用了太多资源,你可能暂时不想让它继续增长。

通过控制索引的读写操作,帮助管理系统资源,避免因为资源过度使用而导致系统变慢或崩溃。

场景4:遵守安全规则场景。

举例:对于一些敏感数据,可能要求严格的访问控制,不希望随便被读取或更改。

对于需要严格控制的敏感数据,通过设置阻塞来限制数据的访问和修改,保障数据安全。

3、添加索引阻塞API

使用范例参考:

PUT /<index>/_block/<block>
  • <index>:(可选,字符串)逗号分隔的索引名列表或通配符表达式,用于限制请求。

  • <block>:(必需,字符串)要添加到索引的阻塞类型。

举例,如下 API 用于给索引添加一个 阻塞 写入。

PUT /my-index-000001/_block/write

设置禁止写入后,如果再写入就会报错。

"reason": "index [my-index-000001] blocked by: [FORBIDDEN/8/index write (api)];"

通过执行 PUT /my-index-000001/_block/write命令,我们可以向名为my-index-000001的索引添加一个写入阻塞。成功执行此命令后,任何试图写入该索引的操作都将被阻止,直到该阻塞被显式移除。

除此之外,最常用的一个锁叫做 blocks.metadata。当我们把这个设置开启(设置为true)后,别人就不能修改索引的元数据了。

举个例子,如果你在管理一个多租户的SaaS应用,每个租户都有自己独特的索引设置和映射。你肯定不希望有一天突然有人改变了这些设置,导致系统运行不正常。这时候,就可以使用 blocks.metadata 这个锁来防止索引的元数据被修改。

PUT testPUT test/_settings
{"blocks.metadata": true
}

如下的所有操作都会报错:

GET  test
GET  test/_settings
GET  test/_mappingPUT test/_doc/1
{"title": "1111"
}

但是,如下检索是可以正常进行的。

GET test/_search
{"query": {"match_all": {}}
}

4、解除设置 API

要解除已经设置的索引阻塞,可以将相应的阻塞设置修改为false或使用 null来移除特定的阻塞。例如,要移除索引的 read_only阻塞,可以使用以下命令:

PUT /<index>/_settings 
{ "index.blocks.read_only": false }

请注意,在进行此操作之前,确保已经解决了导致设置阻塞的原因,如磁盘空间不足等。

5、小结

Elasticsearch的索引阻塞功能为数据提供了一层额外的保护,确保数据能够按照预期安全、正确地被处理和访问。

这套功能在系统维护、数据保护、资源优化和安全增强等方面特别有用。

通过熟悉Elasticsearch提供的各种索引阻塞设置,可以有效管理对索引的访问,保障数据完整性,高效利用资源,并加强数据的安全性。正确使用这些强大的工具需要深入理解它们的作用和应用场景。

6、参考

https://kulekci.medium.com/elasticsearch-index-blocks-a-deep-dive-into-data-protection-b2ecc4b780c8

7 年+积累、 Elastic 创始人Shay Banon 等 15 位专家推荐的 Elasticsearch 8.X新书已上线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274130.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达机器学习笔记 十八 制定一个性能评估标准 学习曲线 高偏差 高方差

一个模型的好坏的评估基准可以从下面几个方面考虑&#xff1a; 1.考虑人类在这个问题上的表现 2.对比竞争算法的表现 3.根据经验猜测 判断是高偏差还是高方差 训练样本数量越多&#xff0c;越难完美地拟合每个样本&#xff0c;因此 J_train 会逐渐增大一点点&#xff0c;但泛…

原创检测工具,高效了解文章质量

原创检测工具&#xff0c;高效了解文章质量&#xff01;想要知道一篇文章的质量怎么样&#xff0c;我们可以通过了解文章的原创度高低来分析&#xff0c;那么文章的原创度高低我们又是如何来知晓的呢&#xff1f;那当然是用原创检测工具去查询出来的。虽然我们可以把文章内容放…

20240309web前端_第一周作业_豆瓣电影

作业四&#xff1a;豆瓣电影 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0…

Word转PDF保持图片原有清晰度

目录 1、需要的软件 2、配置Acrobat PDFMaker 3、配置Acrobat Distiller 4、更改Acrobat PDFMaker中的首选项 5、将word转换成pdf 1、需要的软件 利用Adobe Acrobat DC工具。 打开word&#xff0c;选择Acrobat的插件&#xff0c;选择首选项。 如果没有出现Acrobat插件也…

C++的类与对象(三):构造函数、析构函数、对象的销毁顺序

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 对象的销毁顺序​​​​​​​​​​​​​​ 类的6个默认成员函数 问题&#xff1a;一个什么成员都没的类叫做空类&#xff0c;空类中真的什么都没有吗&#xff1f; 基本概念&#xff1a;任何类在什么都不…

2024年最便宜的阿里云服务器购买图文教程,2核2G61元,2核4G99元

2024年&#xff0c;阿里云推出了多款价格非常便宜的云服务器和轻量应用服务器&#xff0c;其中轻量应用服务器2核2G3M带宽50G系统盘只要61元/1年&#xff0c;2核4G4M带宽60G系统盘只要165元/1年。云服务器2核2G3M带宽40G系统盘只要99元/1年&#xff0c;2核4G5M带宽80G系统盘只要…

功能测试转自动化测试好不好转型?

手工测试做了好多年&#xff0c;点点点成了每天必须做的事情。但是随着自动化测试趋势的日渐明显&#xff0c;以及受到薪资、技能的双重考验&#xff0c;掌握自动化测试成为了必备技能。 手工转自动化测试&#xff0c;不是一蹴而就的。“预先善其事&#xff0c;必先利其器”&a…

FTP,SFTP,FTPS,SSL,TSL简介,区别,联系,使用场景说明

文章目录 简介FTPFTPSSFTP加密场景选择FTPS还是SFTPFTP、SFTP、FTPS区别、联系和具体使用场景如何使用FTP、SFTP和FTPSSSLTLSSSL和TLS区别和联系&#xff0c;以及使用场景SSL和TLS技术上的区别一些问题隐式的TLS&#xff08;FTPS/SSL&#xff09;或者显式的TLS&#xff08;FTPS…

LeetCode 707. 设计链表 (JAVA)

1.题目 2. 思路分析 1.我们要设置一个虚拟头节点&#xff0c;因为这个虚拟头节点对于增加节点操作和删除节点操作都很方便。 2.仔细读题&#xff0c;题目中说链表中的节点下标是从0开始的。也就是说第一个节点下标为0。 3.增加节点和删除节点的操作我们都要获取到它前一个的节…

洗衣洗鞋店小程序对接水洗唛打印,一键预约,支付无忧

随着社会的进步和科技的发展&#xff0c;我们的生活幸福感与日俱增。为了让我们从琐碎中解脱出来&#xff0c;干洗店洗鞋店行业也日新月异。今天&#xff0c;我为大家推荐这款优秀的干洗店小程序系统&#xff0c;让您的洗衣洗鞋服务体验更上一层楼。 干洗店管理系统是一款专为洗…

HTML静态网页成品作业(HTML+CSS)——家乡漳州介绍设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

css clip-path polygon属性实现直角梯形

2024.3.8今天我学习了如何用css实现直角梯形的效果&#xff0c; 效果&#xff1a; 具体实现原理&#xff1a; 一、需要三个div&#xff1a; 外面一个大的div&#xff0c;里面左右两个小的div 我们需要先把第一个div变成直角梯形&#xff1a; 大概是这样&#xff0c;设置好之…

conda PackagesNotFoundError

参考&#xff1a;https://wenku.csdn.net/answer/3u2f0vgdaj 报错&#xff1a;Solving environment: failed PackagesNotFoundError: The following packages are not available from current channels: 解决方法 ##添加channels conda config --add channels anaconda conda …

【CV论文阅读】【计算机视觉中的Transformer应用综述】(1)

0.论文摘要 摘要——自然语言任务的Transformer model模型的惊人结果引起了视觉社区的兴趣&#xff0c;以研究它们在计算机视觉问题中的应用。在它们的显著优点中&#xff0c;与递归网络例如长短期记忆&#xff08;LSTM&#xff09;相比&#xff0c;Transformer能够模拟输入序…

golang学习随便记16-反射

为什么需要反射 下面的例子中编写一个 Sprint 函数&#xff0c;只有1个参数&#xff08;类型不定&#xff09;&#xff0c;返回和 fmt.Fprintf 类似的格式化后的字符串。实现方法大致为&#xff1a;如果参数类型本身实现了 String() 方法&#xff0c;那调用 String() 方法即可…

C++ 有哪些流行的开发框架或库?

这是我在知乎上回答的一个问题&#xff0c;不到两周收藏数超过 500&#xff0c;点赞还不到 100&#xff0c;看来 C 程序员还是不少&#xff0c;且大家都想进步。 不过从“收藏”就是“学过”的这种风气来看&#xff0c;大概率只是扫一眼&#xff0c;然后放到收藏里吃灰了。 下面…

《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)

1.简介 本文主要介绍两个在测试过程中可能会用到的功能&#xff1a;Actions类中的拖拽操作和Actions类中的划取字段操作。例如&#xff1a;需要在一堆log字符中随机划取一段文字&#xff0c;然后右键选择摘取功能。 2.拖拽操作 鼠标拖拽操作&#xff0c;顾名思义就是&#xff…

CubeMX使用教程(5)——定时器PWM输出

本篇我们将利用CubeMX产生频率固定、占空比可调的两路PWM信号输出 例如PA6引脚输出100Hz的PWM&#xff1b;PA7引脚输出500Hz的PWM&#xff0c;双路同时输出 我们还是利用上一章定时器中断的工程进行学习&#xff0c;这样比较方便 首先打开CubeMX对PA6、PA7进行GPIO配置 注&a…

SpringMVC03、HelloSpring

3、HelloSpring 3.1、配置版 新建一个Moudle &#xff0c; springmvc-02-hello &#xff0c; 添加web的支持&#xff01; 确定导入了SpringMVC 的依赖&#xff01; 配置web.xml &#xff0c; 注册DispatcherServlet <?xml version"1.0" encoding"UTF-8…

Linux操作系统-07-Linux安装应用

一、使用rpm安装应用&#xff08;不推荐&#xff09; 先下载到本地&#xff0c;以.rpm文件名结尾&#xff0c;下载完成后&#xff0c;再安装 rpm -qa | grep mysql #查询当前系统是否有下载过mysql包 先上传mysql的rpm安装包到linux的opt目录 安装 rpm -ivh …