你可以将自定义节点属性用作感知属性,以使 Elasticsearch 在分配分片时考虑物理硬件配置。 如果 Elasticsearch 知道哪些节点在同一台物理服务器上,在同一机架中或在同一区域中,则它可以分发主分片及其副本分片,以最大程度地减少发生故障时丢失所有分片副本的风险。

通过 cluster.routing.allocation.awareness.attributes 设置启用分片分配感知后,分片仅分配给已为指定感知属性设置值的节点。 如果你使用多个感知属性,那么 Elasticsearch 在分配分片时会分别考虑每个属性。

可以在 elasticsearch.yml 中配置分配感知设置,并使用 cluster-update-settings API 动态更新。

默认情况下,Elasticsearch 使用 adaptive replica selection 来路由搜索或 GET 请求。 但是,由于存在分配感知属性,Elasticsearch将更喜欢在相同位置(具有相同的感知属性值)使用分片来处理这些请求。 可以通过在群集的每个节点上指定 export ES_JAVA_OPTS =“ $ ES_JAVA_OPTS -Des.search.ignore_awareness_attributes = true” 系统属性来禁用此行为。

不均衡的 shard 分布

假设你的硬件分布于两个不同的物理机架中:

在上面我们可以看到:我们的 my_index 的 shard 分布于两个不同的物理机架中 rack1 及 rack2。在上面我们可以看出来 P0 及 R0 分布于 rack1 中,而 P1 和 R1 分布于 rack2 中。假如有一种情况我们的 rack1 或者 rack2 由于某种事故从而导致它们其中的一个不可用,那么我们的 my_index 将导致不可用。这是因为分片0或分片1将不存在。

为了避免这种情况我们可以让我们的 Elasticsearch 知道我们的硬件的物理分配。这个在 Elasticsearch 中称之为 shard allocation awareness。这种解决方案非常实用于当我们的 Elasticsearch 的多个 node 分享同样的资源:disk,host mache,netowork switch,rack 等。

我们可以通过下面的两个步骤来进行配置:

  1. 对我们的 node 打上标签
  2. 更新我们的 cluster 配置

Step1:对 node 打上标签

我们可以使用 node.attr 来对我们的 node 进行打上标签。

  • node 的属性可以是你任何喜欢的名字及值
  • 你也可以在命令行中使用 -E 命令行参数来定义,比如
    ./bin/elasticsearch -Enode.attr.my_rack_id=rack1
  • 或者直接在 elasticsearch.yml 中来定义

Step2: 对 cluster 进行配置

我们必须告诉 Elasticsearch 我们使用哪个属性或哪些属性用于我们的 Shard allocation awareness。我们可以通过使用 cluster.routing.allocation.awareness 这个 cluster 级的配置来告诉我们的 Elasticsearch:

PUT _cluster/settings
{"persistent": {"cluster.routing.allocation.awareness.attributes": "my_rack_id"}
}

均衡的 Shard 分布

经过上面的 step1 及 step2 的配置后,现在,你可以确保所有分片至少有一个副本将存在于每个索引的每个机架中。

如果在 rack1 或 rack2 其中的一个 rack 在损坏的情况下,我们可以确保我们的数据访问是不间断的。当然如果两个机架同时都被损坏,那么我们也无能为力了。

强迫感知 (forced awareness)

默认情况下,如果一个位置失败,Elasticsearch 会将所有丢失的副本分片分配给其余位置。 尽管你可能在所有位置上都有足够的资源来承载你的主和副本分片,但单个位置可能无法承载所有分片。

为了防止发生故障时单个位置过载,可以设置 cluster.routing.allocation.awareness.force,以便在其他位置的节点可用之前,不分配任何副本。

例如,如果你有一个名为 my_rack_id 的感知属性并在 rack1 和 rack2 中配置了节点,则可以使用强制感知来防止 Elasticsearch 在只有一个区域可用的情况下分配副本:

cluster.routing.allocation.awareness.attributes: "my_rack_id"
cluster.routing.allocation.awareness.force.my_rack_id.values: "rack1,rack2"

使用此示例配置,如果你启动两个节点并将 node.attr.my_rack_id 设置为 rack1 并创建具有 5 个分片和1个副本的索引,Elasticsearch 将创建索引并分配 5 个主分片,但不分配副本。 仅当将 node.attr.my_rack_id 设置为 rack2 的节点可用时,才分配副本。

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

参考:

【1】 Shard allocation awareness | Elasticsearch Guide [8.6] | Elastic

Elasticsearch:shard 分配感知相关推荐

  1. Elasticsearch内存分配设置详解

    Elasticsearch默认安装后设置的内存是1GB,对于任何一个现实业务来说,这个设置都太小了.如果你正在使用这个默认堆内存配置,你的集群配置可能会很快发生问题.   这里有两种方式修改Elast ...

  2. ElasticSearch Shard——本质上是做分布式扩展,副本对于集群的稳定性有很强的影响...

    什么是一个Shard? Shard就是一个Lucene Index,参照文章(深入理解Shard和Lucene Index). Index需要多少个Shard? 回答这个问题,我们需要先谈谈节点,一个 ...

  3. 【Elasticsearch】揭秘 Elasticsearch 分片分配

    1.概述 翻译:https://aws.amazon.com/cn/blogs/opensource/open-distro-elasticsearch-shard-allocation/ Open ...

  4. 【Elasticsearch】elasticsearch shard 分片

    文章目录 1.概述 2.操作 2.0 查询 2.1 节点间分片移动 2.2 更改并发分片的数量以平衡集群 2.3 更改每个节点同时恢复的分片数量 2.4 调整恢复速度 2.5 清除节点上的缓存 2.6 ...

  5. 互联网摸鱼日报(2023-06-13)

    互联网摸鱼日报(2023-06-13) InfoQ 热门话题 数字化转型背景下:关于企业数据分析的趋势与预判 字节跳动全域数据治理平台负责人王慧祥确认出席 ArchSummit 深圳 2023开放原子 ...

  6. Elasticsearch 模块-Shard Allocation 机制

    1. 背景 前提概要 本文主要以 5. 阅读来源 中的文章为依据, 结合 Elasticsearch 7.4.0 版本的官方文档, 对分片分配机制这一部分的理论进行整理, 望不吝赐教~ shard a ...

  7. Elasticsearch的UNASSIGNED未分配解决方案

    1.查看问题和原因 方法一: Linux上 curl -XGET localhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.re ...

  8. Elasticsearch最佳实践之Index与Shard设计

      Index与Shard,这两个概念在<Elasticsearch最佳实践之核心概念与原理>一文有详细的介绍,分别对应了Elasticsearch的两种数据组织方式:逻辑组织和物理组织. ...

  9. 11 、图解2个node环境下replica shard是如何分配的

    1.图解2个node环境下replica shard是如何分配的 (1)replica shard分配:3个primary shard,3个replica shard,1 node (2)primar ...

最新文章

  1. 影响网站各个页面权重高低的因素有哪些?
  2. jvm性能调优实战 - 28年轻代存活的对象太多老年代放不下触发Full GC日志怎么看
  3. pip: failed to create process.解决方法
  4. 2013\National _C_C++_A\2.骰子迷题
  5. 在BAE上搭建python,django环境小记
  6. 常见开源分布式存储系统
  7. SHA256 的C语言实现
  8. -bash: fork: Cannot allocate memory问题,进程数满了的解决办法
  9. 判断字符串是否是有效的手机号码
  10. android获取当前显示的view,Android中ViewPager获取当前显示的Fragment
  11. ST 电机库 电机位置环7天冲刺开发
  12. FCM聚类算法(模糊C均值算法)
  13. SpringCachemanager使用Cache(redis作为缓存中间件)
  14. 十八新娘八十郎,苍苍白发对红妆。鸳鸯被里成双夜,一树梨花压海棠。
  15. 微信3.7版本后,个人数据文件夹的乱码文件夹怎么找文件?
  16. 【Python 基础教程】Python语言中的数据类型(二)
  17. RabbitMQ消息队列详细教程
  18. AutoJs学习-包名查看器
  19. QT + 大恒水星工业相机 +vs2017 实现线程拍摄视频
  20. Map.containsKey() 的一个使用场景.

热门文章

  1. 电影死刑犯的主题歌: Nickelback.-.Savin'.Me
  2. 《Head First 设计模式》读书笔记——工厂模式
  3. 普元技术专家团作品大合集(2016年圣诞特辑)
  4. Java基础之jvm,堆的分类新生代、老生代和永久代详解
  5. 10款最佳项目管理工具推荐,总有一款适合你
  6. 有声双语阅读器-学英语背单词,做泛读的好帮手
  7. MySQL(面试+原理)(1)--MySQL是如何存储数据的
  8. 移动联通电信4g和移动4g有什么区别
  9. 读书笔记 Tom Expert 00章-配置环境
  10. 磁盘分区工具diskgenius、易我分区大师