难点!干货!经验证!生产Elasticsearch超大集群中如何让主分片(shards)均匀分布,且不需要重启服务?(详细分析原因和解决之道)

本文主要是介绍难点!干货!经验证!生产Elasticsearch超大集群中如何让主分片(shards)均匀分布,且不需要重启服务?(详细分析原因和解决之道),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 介绍,索引的主分片在es节点上分布不均匀
    • 问题分析,什么问题导致分布不均匀?
    • 解决方案
      • 步骤一、备份数据(若有备份,可忽略)
      • 步骤二、更改索引副本数
      • 步骤三、恢复索引副本集
    • 参考链接

介绍,索引的主分片在es节点上分布不均匀

elasticsearch在实际生产应用中,经常由于es节点的上下线检修维护,或则由于索引设置的调整,常常会导致索引主分片和副本分片分布不均匀的问题。由于elasticsearch中主分片主要用于写操作,副本分片用于读操作,不均匀的主分片和副本分片分布,可能导致数据的读写性能不稳定或性能下降。
elasticsearch 索引的主分片(primary shard)和副本分片(replica shard)在每个节点上分布不均匀。
elasticsearch 索引主分片和副本分片不均匀分布

问题分析,什么问题导致分布不均匀?

  • 节点上下线
    通常在下线一个es节点后,下线节点上存在的主分片会被检测掉丢失,elasticsearch集群会自动将其他节点上的副本分片设置为主分片,当该下线节点被重新拉起时,分片数据被识别,但均会被识别为副本分片。这些操作会导致一些节点的主分片比较集中,一些节点上的副本分片比较集中。
  • 大量较为集中的数据写入
    大量的数据集中写入,可能导致暂时的主分片不均匀的情况。当业务场景为写入较多时,设置了较多的ingest节点进行写入,由于无法及时同步,导致主分片节点较为集中。

tips: elasticsearch节点的主分片分布不均匀是否需要进行人为干预,取决于自己的业务场景,若仅有个别节点如此,则不会影响应用,可不进行干预。

  • 解决思路:
    备份数据后,将副本数设置为0,主分片重新分配后,恢复副本分片数。
    不适用范围:此方案用于主分片分布不均,不解决主分片和副本分片分布的问题,若要解决此问题,设置total_shards_per_node即可。

解决方案

其他方式:也可通过重启集群,重建索引等方式解决。

步骤一、备份数据(若有备份,可忽略)

备份数据是为了保证生产数据操作失误时,可及时通过别名映射,不至于数据丢失或影响业务应用。

# 备份索引数据
POST /_reindex?slices=20&timeout=100000s
{"source":{"index":"索引名","size":10000},"dest":{"index":"索引名"-copy-年月日"}
}# 查看备份数据
GET /索引名-copy-年月日# 重建索引的副本数默认为1,如果觉得不太稳,最好将副本数设置为2,待副本集完全复制后操作后续步骤
PUT /索引名-copy-年月日/_settings
{"number_of_replicas": 2
}

若不担心数据丢失,设置副本数步骤可忽略

步骤二、更改索引副本数

删除索引副本,让主分片均匀分布在各个节点

# 设置原有数据副本数为0
PUT /索引名/_settings
{"number_of_replicas": 0
}

操作前:
elasticsearch 索引的主分片没有均匀分布在es节点上
elasticsearch 索引的主分片没有均匀分布在es节点上
操作后:
elasticsearch 索引的主分片均匀分布在es节点上,但没有副本分片
elasticsearch 索引的主分片均匀分布在es节点上,但没有副本分片

步骤三、恢复索引副本集

# 重新设置副本集数量
PUT /索引名/_settings
{"number_of_replicas": 2
}

操作后:
elasticsearch 索引的主分片均匀分布在es节点上,副本分片也均匀分布在各个es节点上
elasticsearch 索引的主分片均匀分布在es节点上,副本分片也均匀分布在各个es节点上

至此,问题完美解决。遵循生产集群操作规范,因此需要格外谨慎。若大家有不同的问题,或更好的解决办法,欢迎大家补充。

参考链接

elasticsearch cluster reroute api 官方文档

这篇关于难点!干货!经验证!生产Elasticsearch超大集群中如何让主分片(shards)均匀分布,且不需要重启服务?(详细分析原因和解决之道)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/825948

相关文章

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片