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

扩展阅读-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新书已上线

相关文章:

扩展阅读-Elasticsearch 通过索引阻塞实现数据保护深入解析

目录 前言 1、索引阻塞的种类 2、什么时候使用阻塞&#xff1f; 场景1&#xff1a;进行系统维护场景。 场景2&#xff1a;保护数据不被随意更改场景。 场景3&#xff1a;优化资源使用的场景。 场景4&#xff1a;遵守安全规则场景。 3、添加索引阻塞API 4、解除设置 AP…...

SpringMVC重定向接口,参数暴露在url中解决方案!RedirectAttributes

OK&#xff0c;首先描述下业务场景&#xff0c;终端数量限制登录 1.首先访问项目login的get接口 2.输入账号密码点击登录后&#xff0c;会请求login的POST接口 3.后台对终端数量逻辑处理不允许登录跳回到登录页面 4.因代码原因需在后台进行多次重定向接口&#xff0c;最后跳…...

硬件学习笔记--46 电能表影响量试验梳理

目录 1.电流和电压电路中的谐波影响试验 1&#xff09;电流和电压电路中谐波——第5次谐波试验 2&#xff09;电流和电压电路中谐波——方顶波波形试验 3&#xff09;​​​​​​​电流和电压电路中谐波——尖顶波波形试验 4&#xff09;​​​​​​​电流和电压电路中谐…...

大数据技术之HBase操作归纳

HBase基本命令总结表(实际操作方式) 进入Hbase&#xff1a;hbase shell 方式一&#xff1a;命令行窗口来操作HBase 1.通用性命令 version 版本信息 status 查看集群当前状态 whoami 查看登入者身份 help 帮助2.HBase DDL操作(对象级操作) 2.1、namespace命名空间(相当…...

后端Java Stream数据流的使用=>代替for循环

API讲解 对比 示例代码对比 for循环遍历 package cn.ryanfan.platformback.service.impl;import cn.ryanfan.platformback.entity.Algorithm; import cn.ryanfan.platformback.entity.AlgorithmCategory; import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO; im…...

遗传算法与深度学习实战系列,自动调优深度神经网络和机器学习的超参数

遗传算法与深度学习实战系列文章 目录 进化深度学习生命模拟及其应用生命模拟与进化论遗传算法中常用遗传算子遗传算法框架DEAPDEAP框架初体验使用遗传算法解决N皇后问题使用遗传算法解决旅行商问题使用遗传算法重建图像遗传编程详解与实现粒子群优化详解与实现协同进化详解与…...

体验用ai做了个python小游戏

体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见&#xff0c;欢迎页面和结束页面背景是视频&#xff0c;游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…...

谷粒商城—分布式高级②.md

认证服务 1. 环境搭建 创建gulimall-auth-server模块,导依赖,引入login.html和reg.html,并把静态资源放到nginx的static目录下 2. 注册功能 (1) 验证码倒计时 //点击发送验证码按钮触发下面函数 $("#sendCode").click(function () {//如果有disabled,说明最近…...

阿里云ECS命名规则解析与规格选型实战指南

阿里云ECS实例的命名规则通常采用 “ecs.{实例族}.{规格大小}” 的结构,各部分含义如下: 命名字段说明ecs代表“弹性计算服务”(Elastic Compute Service)。{实例族}标识实例的用途和代次(如 g7、c7、r7),由字母+数字组成。{规格大小}表示实例的资源配置(如 large、2xl…...

Spring MVC 的核心以及执行流程

Spring MVC的核心 Spring MVC是Spring框架中的一个重要模块&#xff0c;它采用了经典的MVC&#xff08;Model-View-Controller&#xff09;设计模式。 MVC是一种软件架构的思想&#xff0c;它将软件按照模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;…...

ai json处理提示词

在解析JSON数据时&#xff0c;提示词的设计需要明确任务目标、输入格式以及期望的输出格式。以下是一些常用的提示词示例&#xff0c;适用于不同的JSON解析场景&#xff1a; 1. 提取特定字段 用于从JSON中提取特定字段的值。 示例&#xff1a; 从以下JSON数据中提…...

2025开源数据工程全景图

作者 | Alireza Sadeghi 译自Practical Data Engineering 2025年开源数据工程领域呈现蓬勃创新与生态重构的双重态势&#xff0c;九大技术赛道在实时化、轻量化与云原生架构驱动下加速演进。一份来自外网的2025年开源数据工程全景图全面地展示了这一领域的发展态势与走向&…...

438. 找到字符串中所有字母异位词(LeetCode 热题 100)

题目来源&#xff1a; 438. 找到字符串中所有字母异位词 - 力扣&#xff08;LeetCode&#xff09; 题目内容&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s &…...

c++标准io与线程,互斥锁

封装一个 File 类&#xff0c; 用有私有成员 File* fp 实现以下功能 File f "文件名" 要求打开该文件 f.write(string str) 要求将str数据写入文件中 string str f.read(int size) 从文件中读取最多size个字节&#xff0c; 并将读取到的数据返回 析构函数 #…...

java简单实现请求deepseek

1.deepseek的api创建 deepseek官网链接 点击右上API开放平台后找到API keys 创建APIkey&#xff1a; 注意&#xff1a;创建好的apikey只能在创建时可以复制&#xff0c;要保存好 2.java实现请求deepseek 使用springbootmaven 2.1 pom文件&#xff1a; <?xml version&…...

Ext系列文件系统 -- 磁盘结构,磁盘分区,inode,ext文件系统,软硬链接

目录 1.理解硬盘 1.1 磁盘、服务器、机柜、机房 1.2 磁盘物理结构 1.3 磁盘的存储结构 1.4 磁盘的逻辑结构 1.4.1 理解逻辑结构 1.4.2 真实过程 1.5 CHS地址和LBA地址的相互转换 2.引入文件系统 2.1 “块”概念 2.2 “分区”概念 2.3 “inode”概念 3.ext2文件系…...

PyTorch Tensor 形状变化操作详解

PyTorch Tensor 形状变化操作详解 在深度学习中&#xff0c;Tensor 的形状变换是非常常见的操作。PyTorch 提供了丰富的 API 来帮助我们调整 Tensor 的形状&#xff0c;以满足模型输入、计算或数据处理的需求。本文将详细介绍 PyTorch 中常见的 Tensor 形状变换操作&#xff0…...

文字识别软件cnocr学习笔记

• 安装 pip install cnocr • 基础的使用方法 首次运行会下载安装模型&#xff0c;如果没有梯子&#xff0c;会报错&#xff1a; 在网络上查找cnocr的模型资源&#xff0c;并下载到本地。https://download.csdn.net/download/qq_33464428/89514689?ops_request_misc%257B%2…...

本地部署DeepSeek R1 + 界面可视化open-webui【ollama容器+open-webui容器】

本地部署DeepSeek R1 界面可视化open-webui 本文主要讲述如何用ollama镜像和open-webui镜像部署DeepSeek R1&#xff0c; 镜像比较方便我们在各个机器之间快速部署。 显卡推荐 模型版本CPU内存GPU显卡推荐1.5B4核8GB非必需4GBRTX1650、RTX20607B、8B8核16GB8GBRTX3070、RTX…...

macOS部署DeepSeek-r1

好奇&#xff0c;跟着网友们的操作试了一下 网上方案很多&#xff0c;主要参考的是这篇 DeepSeek 接入 PyCharm&#xff0c;轻松助力编程_pycharm deepseek-CSDN博客 方案是&#xff1a;PyCharm CodeGPT插件 DeepSeek-r1:1.5b 假设已经安装好了PyCharm PyCharm: the Pyth…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...