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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目实战-瑞吉外卖day02(B站)持续更新

瑞吉外卖-Day02课程内容完善登录功能新增员工员工信息分页查询启用/禁用员工账号编辑员工信息分析前端页面效果是如何实现的为什么点击左边 右边会根着变化首先 我们先来看一下菜单是如何展示出来的 在来看一下 为啥点击菜单时 右边会跟着变第一 :菜单是如何展示出来…

【剑指offer-C++】JZ32:从上往下打印二叉树

题目描述 描述:不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数…

我用Python写了一个下载网站所有内容的软件,可见即可下,室友表示非常好用

Python 写一个下载网站内容的GUI工具,所有内容都能下载,真的太方便了!前言本次要实现的功能效果展示代码实战获取数据GUI部分最后前言 哈喽大家好,我是轻松。 今天我们分享一个用Python写下载视频弹幕评论的代码。 之前自游写了…

计算机网络复习

什么是DHCP和DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的…

ARM uboot 的移植4 -从 uboot 官方标准uboot开始移植

一、添加DDR初始化1 1、分析下一步的移植路线 (1) cpu_init_crit 函数成功初始化串口、时钟后,转入 _main 函数,函数在 arch/arm/lib/crt0.S 文件中。 (2) 在 crt0.S 中首先设置栈,将 sp 指向 DDR 中的栈地址; #if defined(CONF…

被骗进一个很隐蔽的外包公司,入职一个月才发现,已经有了社保记录,简历污了,以后面试有影响吗?...

职场的套路防不胜防,一不留神就会掉坑,一位网友就被“骗”进了外包公司,他说公司非常隐蔽,入职一个月才发现是外包,但已经有了社保记录,简历污了,不知道对以后面试有影响吗?楼主说&a…

【含源码】用python做游戏有多简单好玩

有很多同学问我还有其他什么小游戏吗,游戏是怎么做的,难不难。我就用两篇文章来介绍一下,如何使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小游戏玩转不停↓ 更多小游戏可以评论区讨论哦,喜欢…

保姆级使用PyTorch训练与评估自己的Replknet网络教程

文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址:https://github.com/Fafa-DL/Awesome-Backbones 操作教程:https://www.bilibili.co…

【C++】模板进阶

模板进阶 文章目录模板进阶1、非类型模板参数2、模板的特化2.1.概念2.2.函数模板特化2.3.类模板特化2.3.1.全特化2.3.2.偏特化2.4.类模板特化示例3、模板总结1、非类型模板参数 模板参数分类类型形参与非类型形参。类型模板参数:出现在模板参数列表中,跟…

技术人的管理学-团队管理

主要内容前言团队管理,如何让猪上树?选人育人用人留人总结前言 本周报名参加了 风 变 科 技推出的管理学MTP培训课,花了点小钱,感觉还是有用的,可惜时间安排都在8点以后,刚好是看孩子的时间,只…

io流概述

public static void main(String[] args) throws IOException {//1.与文件建立联系 File->数据源File src new File("D://AAA/test.txt");//2.创建文件字节输入流->管道//InputStream is new FileInputStream(src);InputStream is new FileInputStream(&quo…

中科亿海微FPGA

国产FPGA中,紫光、安路、高云称得上是三小龙,其他的半斤八两,中科亿海微也算是其中之一。 其产品为亿海神针系列,如下: 可见其最小规模也有9.2KLUT,最大竟有136K之多了,对比其他国产&#xff0…

18、江科大stm32视频学习笔记——USART串口发送串口发送和接收

目录 一、USART串口发送 1、电路图 2、printf函数的移植方法 3、serial.c 4、main.c 5、解决直接写汉字,编译器报错 二 、USART串口发送和接收 1、查询实现 2、中断实现 (1)在Serial.c中添加的代码 (2)主函…

【Spring从入门到实战】第 4 讲:SpringAOP实现以及原理

本文已收录于专栏🌲《Spring从入门到实战》🌲专栏前言 大家好,我是执梗。本专栏将从Spring入门开始讲起,详细讲解各类配置的使用以及原因,到使用SpringBoot进行开发实战,旨在记录学习生活的同时也希望能帮到…

IDEA常用插件列表

一 背景 IDEA常用插件列表,用来提供工作效率。你都安装了吗 IntelliJ IDEA 默认安装并提供了非常多的工具,比如 Maven Integration、Markdown support、SSH Remote Run 等。其中有很多好用,但是不为人知的工具。 二 插件列表 阿里代码规约…

Linux基础命令大全(上)

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放&#xff0…

pytorch-在竞赛中去摸索用法,用房价预测比赛了解数据处理流程

实战Kaggle比赛:房价预测 让我们动手实战一个Kaggle比赛:房价预测House Prices - Advanced Regression Techniques | Kaggle。本文将提供未经调优的数据的预处理、模型的设计和超参数的选择。通过动手操作、仔细观察实验现象、认真分析实验结果并不断调…

【算法入门】字符串基础

目录 一.字符串引言1.字符串基础二.洛谷P5734详解1.字符串相关库函数💫(1) strcpy函数 💫💫(2) strcat函数 💫💫(3)strstr函数 💫2.题…

JavaScript的事件传播机制

你在学习和编写JavaScript时可能听说过事件冒泡(event bubbling)。它会发生在多个元素存在嵌套关系,并且这些元素都注册了同一事件(例如click)的监听器时。 但是事件冒泡只是事件机制的一部分。它经常与事件捕获(event capturing)和事件传播…

ChatGPT的N种用法(持续更新中。。。)

目录前言一、语法更正二、文本翻译三、语言转换3-1、Python-->JAVA四、代码解释-1五、代码解释-2六、修复代码错误六、作为百科全书七、信息提取七、好友聊天八、创意生成器8-1、VR和密室结合8-2、再结合AR九、采访问题9-1、采访问题清单9-2、采访问题清单并给出相应答案十、…
最新文章