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

Elasticsearch:集群管理

在今天的文章中,我们应该学习如何管理我们的集群。 备份和分片分配是我们应该能够执行的基本任务。

分片分配过滤

Elasticsearch 将索引配到一个或多个分片中,我们可以将这些分片保存在特定的集群节点中。 例如,假设你有多个数据集群节点,其中两个具有 SSD 存储。 如果我们正在寻找对我们的一个索引的快速响应,我们可以将它们的分片配置为仅进入 SSD 数据节点。 这个概念称为分片分配过滤。 我们可以根据一组给定的要求将索引的分片分配给特定的节点。更多的细节可以阅读之前的文章 “Elasticsearch:运用 shard 过滤器来控制索引分配给哪个节点”。

为了执行分片分配,我们需要为每个节点指定属性。 每次启动节点时我们都会这样做:

./bin/elasticsearch -Enode.attr.size=medium -Enode.attr.disk=ssd

或者在 elasticsearch.yml 配置文件中指定这些属性:

node.attr.size: medium
node.attr.disk: ssd

然后我们可以指定我们选择的索引 twitter 保存在具有 SSD 属性和大小中等的数据节点上:

PUT twitter/_settings
{"index.routing.allocation.require.size": "medium","index.routing.allocation.require.disk": "ssd"
}

分片分配感知

此外,执行这些操作的另一种可能性是使用分片分配感知。 我们可以让 Elasticsearch 将我们的物理硬件配置考虑在内。更多阅读,请参考文章 “Elasticsearch:shard 分配感知”。

例如,我们可以指定集群的每个节点运行的机架:

./bin/elasticsearch -Enode.attr.rack_id=rack_one

或者使用 elasticsearch.yml:

node.attr.rack_id: rack_one

然后我们需要在主节点中指定我们将使用 rack_id 作为属性:

cluster.routing.allocation.awareness.attributes: rack_id

稍后,如果我们添加新节点并指定不同的 rack_id,例如 rack_two,因为它们位于不同的机架中。 Elasticsearch 会将分片移动到新节点,确保(如果可能)两个副本不会存储在同一个机架中。 这样我们就可以防止在同一位置分配特定分片的多个副本。一旦有一个机架发生故障,那么我们的数据至少还是完整的。

 

强迫感知(force awareness)

可能是一个机架出现故障,然后你可能没有足够的资源来仅在一个机架中托管主分片和副本分片。 为了防止在发生故障时过载,我们可以使强迫感知。
我们可以指定仅当至少有两个机架都可用时才分配副本。 为此,我们需要在我们的主节点中指定我们将使用 rack_id 作为属性并强制使用 rack_id 值。

cluster.routing.allocation.awareness.attributes: rack_id
cluster.routing.allocation.awareness.force.rack_id.values: rack_one,rack_two

更多阅读:Elasticsearch:为自管的 Elasticsearch 添加分片分配感知。

集群的健康

我们的集群有几种可能的健康状态:绿色、黄色或红色。 这些健康颜色会根据分片分配而变化,红色状态表示特定分片未分配,黄色表示主分片已分配但副本未分配,绿色表示所有分片均已分配。可以使用 Cluster Health API 检索集群健康状况:

GET _cluster/health

此外,我们可以检查单个索引及其分片的健康状况:

GET /_cluster/health/twitter
GET /_cluster/health/twitter?level=shards

如果我们正在处理黄色红色状态的集群,我们可以使用集群分配解释 API 检查原因:

GET /_cluster/allocation/explain

如前所述,状态与分片分配相关联。 例如,我们可以检查副本分片的状态,“primary”: false,一个索引:

GET /_cluster/allocation/explain 
{ "index": "twitter", "shard": 0, "primary": false 
}

为了解决健康问题,我们可能需要添加新的数据节点或更改索引的分配规则。 在此示例中,我正在配置 twitter 索引,指定其主分片不能保留在名为 “data-node1”的节点上。 该节点将仅用于副本分片。

PUT /twitter/_settings  
{      "index.routing.allocation.exclude._name": "data-node1"
}

备份还原

人们可以认为备份就像复制所有节点的数据目录一样简单。 你不应该以这种方式进行备份,因为 elasticsearch 可能会在运行时对其数据进行更改。 为了执行备份,elasticsearch 为我们提供了 snapshot API。 你可以拍摄正在运行的索引或整个集群的快照,然后将该信息存储在其他地方。

此外,快照是增量拍摄的。 每次我们创建索引的快照时,elasticsearch 都会避免复制任何因为较早的快照已存储的数据。 因此,建议你经常为集群拍摄快照。

注册一个存储库

要保存快照,我们需要创建一个存储库。 首先,我们需要为每个主节点和数据节点的 elasticsearch.yml 配置文件中的每个存储库指定可能的路径。

path.repo: ["/mount/backups", "/mount/longterm_backups"]

之后我们可以使用名称注册一个存储库:

PUT /_snapshot/my_backup
{"type": "fs","settings": {"location": "/mount/backups"}
}

这也可以从 Kibana 转到管理然后快照和恢复进行配置。

备份集群配置

独立于存储库和未来的快照,我们应该始终备份 elasticsearch 配置文件夹,其中包括 elasticsearch.yml。 在这种情况下,我们可以使用我们的备份工具对该文件夹进行备份。 但是 elasticsearch 安全功能存储在专用索引中。 所以有必要备份 .security 索引。

为了执行操作,启用安全功能,我们需要将角色 snapshot_user 分配给用户或创建一个具有角色 snapshot_user 的用户。

POST /_security/user/snapshot_user
{"password" : "secret","roles" : [ "snapshot_user" ]
}

然后拍摄 .security 索引的快照:

PUT /_snapshot/my_backup/snapshot_1
{"indices": ".security","include_global_state": true 
}

恢复集群的安全配置

成功备份我们的安全配置后,我们可以随时恢复它。 只需创建一个具有超级用户角色的新用户:

./bin/elasticsearch-users useradd restore_user -p password -r superuser

删除之前的安全数据:

curl -u restore_user -X DELETE "localhost:9200/.security-*"

并使用新用户恢复安全索引:

curl -u restore_user -X POST "localhost:9200/_snapshot/my_backup/snapshot_1/_restore" -H 'Content-Type: application/json' -d'{"indices": ".security-*","include_global_state": true }'

备份数据

备份数据的最简单方法是执行快照。 默认情况下,快照将复制集群中所有打开和启动的索引:

PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true

但是我们总是可以只备份一些索引:

PUT /_snapshot/my_backup/snapshot_2?wait_for_completion=true
{"indices": "index_1,index_2","ignore_unavailable": true,"include_global_state": false
}

在执行快照后,我们可以检查其状态:

GET /_snapshot/my_backup/snapshot_1

恢复快照

最后,在成功执行快照后,我们可以使用 _restore 并指定快照名称来恢复它。

POST /_snapshot/my_backup/snapshot_1/_restore

无论哪种方式,我们都可以恢复一些索引:

POST /_snapshot/my_backup/snapshot_1/_restore
{"indices": "index_1,index_2","ignore_unavailable": true,"include_global_state": true,"rename_pattern": "index_(.+)","rename_replacement": "restored_index_$1"
}

或者恢复索引并更改其配置:

POST /_snapshot/my_backup/snapshot_1/_restore
{"indices": "index_1","index_settings": {"index.number_of_replicas": 0},"ignore_index_settings": ["index.refresh_interval"]
}

删除快照

类似于索引删除快照,需要指定其名称和存储库,向 _snapshot API 发送 DELETE 请求:

DELETE /_snapshot/my_repository/my_snapshot

更多阅读,请参考:

  • Elasticsearch:Searchable snapshot - 可搜索的快照

  • Elasticsearch:Cluster 备份 Snapshot 及 Restore API

  • Elasticsearch:为 snapshot 设置 NFS 共享

  • Elasticsearch:Snapshot 生命周期管理

跨集群搜索

另一个有用的配置是启用跨集群搜索。 为此,我们只需要指定每个集群的 IP 地址:

PUT _cluster/settings
{"persistent": {"cluster": {"remote": {"cluster_one": {"seeds": ["127.0.0.1:9300"]},"cluster_two": {"seeds": ["127.0.0.1:9301"]}}}}
}

执行此配置后,我们可以在远程集群中搜索并在请求中指定其名称:

GET /cluster_one:twitter/_search
{"query": {"match": {"user.id": "carloslannister"}}
}

或者同时搜索两个集群:

GET /cluster_one:twitter,cluster_two:twitter/_search
{"query": {"match": {"user.id": "carloslannister"}}
}

更多阅读,请参阅:

  • Elasticsearch:跨集群搜索 Cross-cluster search (CCS)

  • Elasticsearch:跨集群搜索 Cross-cluster search(CCS)及安全

  • Elasticsearch:如何为 CCR 及 CCS 建立带有安全的集群之间的互信

  • Elasticsearch:如何在不更新证书的情况下为集群之间建立互信

相关文章:

Elasticsearch:集群管理

在今天的文章中,我们应该学习如何管理我们的集群。 备份和分片分配是我们应该能够执行的基本任务。 分片分配过滤 Elasticsearch 将索引配到一个或多个分片中,我们可以将这些分片保存在特定的集群节点中。 例如,假设你有多个数据集群节点&am…...

华为OD机试题 - 非严格递增连续数字序列(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:非严格递增连续数字序列题目输入输出示例一输入输出说明Code解题…...

lc23. 合并K个升序链表

题目描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下&…...

Java笔记029-泛型

泛型泛型的理解和好处看一个需求请编写程序,在ArrayList中,添加3个Dog对象Dog对象含有name和age,并输出name和age(要求使用getXxx)先用传统的方法来解决->引出泛型package com15.generic;import java.util.ArrayList;/*** author 甲柒* ve…...

港科夜闻|香港科大与中国联通成立联合实验室,推动智慧社会研究发展

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大与中国联通成立联合实验室,推动智慧社会研究发展。香港科大与中国联通于3月9日签署两份协议以加强战略合作,并成立「香港科技大学 - 中国联通智慧社会联合实验室」,就香港科大建构…...

制作一个简单的信用卡验证表

下载:https://download.csdn.net/download/mo3408/87559584 效果图: 您可以从文章顶部附近的下载按钮获取该项目的完整代码。这些文件的概述如下所示: 我们需要将两个 .css 文件和两个 .js 文件包含在我们的 HTML 中。所有其他资源,例如 Bootstrap 框架、jQuery 和 Web 字…...

牛客小白月赛68

牛客小白月赛68A Tokitsukaze and New OperationB Tokitsukaze and Order Food DeliveryC Tokitsukaze and Average of SubstringD Tokitsukaze and Development TaskE Tokitsukaze and Colorful ChessboardF Tokitsukaze and New RenKinKama题目链接A Tokitsukaze and New Ope…...

【id:21】【20分】A. DS单链表--类实现

题目描述用C语言和类实现单链表,含头结点属性包括:data数据域、next指针域操作包括:插入、删除、查找注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据类定义参考输入n第1行先输入n表示有n个…...

【实习_面试全程辅导分享】简历篇

🎋🎋哈喽,大家好,我是辰柒。快有一个月没有更新博文啦,那么这一个月不是在偷懒,而是在全心准备找实习的过程中。那么最终也是拿到了心仪的大厂offer——海康威视!!经过这次找实习的经历,我想就在校大学生找实习这件事情开设一个专栏,帮助大家在找实习的过程中减少焦…...

【学习笔记】CF1305 Kuroni and Antihype

想了一下,觉得还是发单篇的题解比较合理 怎么感觉这题之前做过 先抛开建边方式不管 这一步其实挺重要的,但是可能大多数人独立做这道题的时候都在想用位运算的性质,而没有想到分开考虑吧?,考虑新建000号节点&#xf…...

json-server单独使用或者在react中进行使用

json-serverjson-server使用教程修改json-server端口号启动1、全局安装json-server2、在根目录生成一个db.json3、启动 访问react中进行使用react中修改json-server启动端口号1、 第一步也是安装,和第一种一样2、在根路径下定义一个__json_server_mock__文件夹3、在…...

【6G 新技术】6G数据面介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...

【AI绘图学习笔记】深度前馈网络(一)

有关深度前馈网络的部分知识,我们已经在吴恩达的机器学习课程中有过了解了,本章主要是对《深度学习》花书中第六章:深度前馈网络的总结笔记。我希望你在看到这一章的时候,能回忆起机器学习课程中的一些环节或者细节,这…...

目标检测笔记合集

目标检测笔记合集1. 必看的两篇目标检测论文2. 必速看的深度学习目标检测的论文集及概述2.1 一份Slide(PPT)两张表格带你快速了解目标检测2.2 最新目标检测算法回顾2022笔记合集3.目标检测的应用与需求4.目标检测的定义与挑战5.目标检测损失函数的进展6.目标检测IOU…...

《计算机网络》期末复习笔记

文章目录一、一些英文名词的标签(方便记忆)二、OSI七层协议三、综合题3.0 知识点储备3.1 在Internet 网中,某计算机的IP 地址是11001010.01100000.00101100.01011000 ,请回答下列问题3.2 假定发送方要发送的数据为10000101。采用C…...

linux下安装SonarQube

目录1. 准备安装环境2. 安装postgres数据库3. 安装SonarQube4. 使用SonarQube1. 准备安装环境 这里安装SonarQube的系统环境是Red Hat Enterprise Linux release 8.7 ,然后将jdk的压缩包(jdk-17.0.2_linux-x64_bin.tar.gz)和sonarQube的压缩…...

MyBatis-Plus(狂神)

一.特点 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Serv…...

Python3实现写作

导语T_T没有科研梦想的人半夜过来水篇文章~~~让Python学会写写歌,创创作~~~纯属娱乐~~~改编自PyTorch官网的一个教程,不过我用TF写的,然后生成英文变成了生成中文~~~Lets Go~~~相关文件百度网盘下载链接: https://pan.baidu.com/s/1VUEFR82Cq…...

UEFI实战--------HII之uni文件

uni文件 HII的实现涉及到多种不同类型的文件,uni文件是其中最简单的一种,它用来存放各种语言的字符串以实现本地化。本节主要参考自《edk-ii-uni-specification.pdf》,后面简称为参考文档。 关于uni文件的作用,在参考文档中做了如…...

基于Spring Boot集成MyBatis-3.5.9操作数据库

记录:382场景:在Spring Boot 2.6.3中集成MyBatis 3.5.9操作数据库。实现MyBatis的查、增、改、删操作数据库示例。MyBatis官网:http://www.mybatis.org/MyBatis源码:https://github.com/mybatis/1.初始化准备1.1创建Maven工程使用…...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【kafka】Golang实现分布式Masscan任务调度系统

要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...