Elasticsearch:集群管理

news2024/11/25 14:49:59

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

分片分配过滤

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:如何在不更新证书的情况下为集群之间建立互信

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

感应电机数学模型(电机控制应用基础系列)

电机在工业控制中的地位不言而喻,所以对电机模型的了解是我们理解各种算法的基础。这篇博客帮大家整理总结。张力控制离不开电机控制,有关张力控制的详细内容请参看下面的文章链接: PLC张力控制(开环闭环算法分析)_张…

字符函数和字符串函数详解(1)

目录前言strlen函数strlensizeofstrcpy函数strcat函数strcmp函数总结前言 最近要调整状态,写的文章质量不佳让大家失望,我现在也在反思我在做什么,我会什么,我学了什么。等我想明白的那天,我一定能跟大家顶峰相见的&a…

身份推理桌游

目录 sha人游戏(天黑请闭眼) (1)入门版 (2)标准版 (3)延伸版——百度百科 待更新 (4)延伸版——推理学院 待更新 狼人杀 1,基本玩法 2&am…

Android 12.0 Launcher3 app图标长按去掉应用信息按钮

1.前言 在12.0的rom定制化开发中,在Launcher3定制化开发中,对Launcher3的定制化功能中,在Launcher3的app列表页会在长按时,弹出微件和应用信息两个按钮,点击对应的按钮跳转到相关的功能页面, 现在由于产品需求要求禁用应用信息,不让进入到应用信息页面所以要去掉应用信息…

QT入门基础(一)

文章目录零.Qt背景1.什么是Qt2.Qt的发展史3.Qt的优势4.Qt应用一.第一个Qt程序0.项目创建1.main函数文件2.类头文件3.pro文件4.qt命名规范二.Qt按钮1.按钮创建和父子关系2.按钮常用api3.Qt窗口坐标体系4.对象树模型零.Qt背景 1.什么是Qt Qt是一个跨平台的C图形用户界面应用程序…

快速排序/快速选择算法

一.快速排序 1.基本介绍 快速排序(Quicksort〉是对冒泡排序的一种改进,都属于交换排序。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分(每次选择中轴值),中轴值左边的元素小于中轴值,中轴值右边的元素全部大于中轴值(但不要求有序)&#x…

Canvas详细使用方法(一)

Canvas Canvas的注意事项 < canvas > 和 < img > 元素很相像&#xff0c;唯一的不同就是它并没有 src 和 alt 属性。 -< canvas > 标签只有两个属性——width和height( 单位默认为px )。当没有设置宽度和高度时&#xff0c;canvas 会初始化宽为 300px 和高…

C#基础之面向对象编程(二)

总目录 文章目录总目录前言一、概述1. 定义2. 面向对象的三大特性二、封装1. 定义2. 属性三、继承1. 定义2. 继承的使用3. base 和this四、多态1. 定义2. 重写和重载3. 多态性的实现1、静态多态性2、动态多态性4. 向上转型和向下转型1、定义2、语法格式3、案例结语前言 本文主…

Docker常用项目实战演练

docker镜像源的修改 linux环境下编辑 /etc/docker/daemon.json vi /etc/docker/daemon.json #如添加如下网易镜像源 { "registry-mirrors": ["http://hub-mirror.c.163.com"] }docker run命令详细解释 日常工作中用的比较多的是docker run命令&#xff…

[ROC-RK3399-PC Pro] 手把手教你移植主线Buildroot(基于2023.02-rc3版本)

&#x1f347; 博主主页&#xff1a;Systemcall小酒屋&#x1f347; 博主简介&#xff1a;Neutionwei&#xff0c;C站嵌入式领域新星创作者之一&#xff0c;一枚热爱开源技术、喜欢分享技术心得的极客&#xff0c;注重简约风格&#xff0c;热衷于用简单的案例讲述复杂的技术&am…

机械学习 - 基础概念 - scikit-learn - 数据预处理 - 1

目录安装 scikit-learn术语理解1. 特征&#xff08;feature &#xff09;和样本&#xff08; sample / demo&#xff09;的区别&#xff1f;2. 关于模型的概念一、机械学习概念1. 监督学习总结&#xff1a;2. 非监督学习总结&#xff1a;3. 强化学习总结&#xff1a;三种学习的…

硬件基础常识【1】--如何让BJT工作在深度饱和区

引言BJT饱和的概念差不多的比喻特性曲线说明记忆NPN和PNP的小技巧- -保证一辈子不忘简单估算总结引言 学过模电或者做过一些电子作品的人都知道三极管这个器件&#xff0c;虽然是个小玩意&#xff0c;但在电路设计过程中承担了巨大的作用。BJT叫做双极结型三极管&#xff0c;可…

浏览器并发行为记录

使用nodejs koa起一个服务&#xff0c;使请求延时返回。 服务端代码 /** 延时 */ exports.timeoutTestData async function (ctx) {console.log(get query:, ctx.request.query);const query ctx.request.query;let timeout query.timeout || 2000;await new Promise(res…

vue专项练习

一、循环实现一个列表的展示及删除功能 1.1 列表展示 1、背景&#xff1a; 完成一个这样的列表展示。使用v-for 循环功能 id接口名称测试人员项目名项目ID描述信息创建时间用例数1首页喵酱发财项目a1case的描述信息2019/11/6 14:50:30102个人中心张三发财项目a1case的描述信…

Redis学习(13)之Lua脚本【环境准备】

文章目录一 Lua入门环境准备1.1 Lua简介1.2 Linux 系统安装Lua1.2.1 Lua 下载1.2.2 Lua 安装1.3 Hello World1.3.1 命令行模式1.3.2 脚本文件模式1.3.3 两种脚本运行方式1.4 Win安装Lua1.4.1 LuaForWindows的安装1.4.2 SciTE修改字体大小1.4.3 SciTE中文乱码1.4.4 SciTE快捷键工…

aws ecs 使用copilot快速创建ecs集群环境并部署服务

参考资料 https://github.com/aws/copilot-cli https://aws.github.io/copilot-cli/ https://github.com/aws-samples/amazon-ecs-cli-sample-app https://ecsworkshop.com/microservices/frontend/#deploy-frontend-0 ecs的服务部署从头开始需要进行以下操作 创建vpc等网…

JS中的事件、DOM操作

一、事件1.1 事件介绍事件: 就是发生在浏览器(页面)上一件事,键盘事件,鼠标事件,表单事件,加载事件等等1.2 事件绑定方式事件要想发生,就得将事件和标签先绑定一个完整的事件有三部分事件源(标签)什么事(事件)响应(动作效果)事件绑定,其实就是事件和标签绑定方式1: 事件源,事件…

IBM Semeru Windows 下的安装 JDK 17

要搞清楚下载那个版本&#xff0c;请参考文章&#xff1a;来聊聊 OpenJDK 和 JVM 虚拟机下载地址semeru 有认证版和非认证版&#xff0c;主要是因为和 OpenJ9 的关系和操作系统的关系而使用不同的许可证罢了&#xff0c;本质代码是一样的。在 Windows 下没有认证版&#xff0c;…

[计算机组成原理(唐朔飞 第2版)]第三章 系统总线(学习复习笔记)

3.1 总线的基本概念 计算机系统的五大部件之间的互连方式有两种 各部件之间使用单独的连线&#xff0c;称为分散连接将各部件连到一组公共信息传输线上&#xff0c;称为总线连接 总线是连接多个部件的信息传输线&#xff0c;是各部件共享的传输介质。 当多个部件与总线相连时&…

【java基础】LinkedList源码解析

文章目录基本介绍构造器基础方法linkFirstlinkLastlinkBeforeunlinkFirstunlinkLastunlinknodeindexOf方法分析总结基本介绍 在java中&#xff0c;LinkedList就是使用双向链表存储元素&#xff0c;既然是链表&#xff0c;那么也就知道了该数据结构擅长添加和删除。对于需要频繁…