Elasticsearch 集群实战:分片分配不均衡问题排查 + 彻底解决方案
Elasticsearch 集群实战分片分配不均衡问题排查 彻底解决方案一、前言二、什么是分片不均衡2.1 定义2.2 典型现象三、分片不均衡带来的危害三、分片不均衡原因总览流程图四、快速排查查看分片是否均衡4.1 查看各节点分片数量4.2 查看分片分配情况五、解决方案 1开启集群自动分片均衡最简单5.1 启用集群自动平衡5.2 提高并发平衡速度可选六、解决方案 2解除磁盘水位线限制最常见原因6.1 查看磁盘水位6.2 调整磁盘水位临时解决6.3 解除只读模式七、解决方案 3取消强制分配规则awareness 问题7.1 查看是否有强制分配规则7.2 清空 awareness 配置八、解决方案 4手动移动分片立刻见效8.1 手动移动分片命令九、解决方案 5解决索引分片倾斜大分片问题十、解决方案 6新加入节点不分配分片十一、永久根治最佳实践从根源避免不均衡十二、分片不均衡问题处理流程总结图十三、总结最核心 5 条The Begin点点关注收藏不迷路一、前言在 Elasticsearch 集群运维中分片不均衡是最常见、最影响性能的问题。表现为有的节点磁盘爆满、CPU 高、查询慢有的节点空闲、负载很低集群整体性能上不去热点节点频繁 GC、宕机风险高本文从原因、排查、自动平衡、手动干预、永久根治五个维度教你彻底解决分片不均衡让集群负载均匀、性能拉满。二、什么是分片不均衡2.1 定义集群中各个数据节点的分片数量、数据大小、磁盘占用差异过大导致节点负载不均匀。2.2 典型现象Node1100 个分片磁盘 80%Node240 个分片磁盘 30%Node330 个分片磁盘 25%三、分片不均衡带来的危害热点节点压力过大查询/写入性能下降磁盘不均匀导致部分节点先写满集群无法水平扩展加节点也没用容易引发OOM、节点掉线、集群变红三、分片不均衡原因总览流程图分片不均衡自动平衡未开启磁盘水位线达到阈值节点分配感知规则限制分片大小差异巨大倾斜新节点刚加入未平衡索引分配 awareness/强制规则四、快速排查查看分片是否均衡4.1 查看各节点分片数量GET _cat/shards?vGET _cat/nodes?vhname,diskUsed,diskAvail4.2 查看分片分配情况GET _cluster/allocation/explain可以直接看到为什么分片不能分配到某些节点。五、解决方案 1开启集群自动分片均衡最简单5.1 启用集群自动平衡PUT/_cluster/settings{persistent:{cluster.routing.rebalance.enable:all,cluster.routing.allocation.balance.shard:0.45f,cluster.routing.allocation.balance.index:0.55f,cluster.routing.allocation.balance.threshold:1.0f}}all允许所有类型分片自动平衡ES 会自动迁移分片到空闲节点5.2 提高并发平衡速度可选PUT_cluster/settings{persistent:{cluster.routing.allocation.cluster_concurrent_rebalance:5}}六、解决方案 2解除磁盘水位线限制最常见原因分片无法分配90% 是因为磁盘满了。6.1 查看磁盘水位GET _cat/allocation?v6.2 调整磁盘水位临时解决PUT_cluster/settings{persistent:{cluster.routing.allocation.disk.watermark.low:80%,cluster.routing.allocation.disk.watermark.high:85%,cluster.routing.allocation.disk.watermark.flood_stage:90%}}6.3 解除只读模式PUT_all/_settings{index.blocks.read_only_allow_delete:null}七、解决方案 3取消强制分配规则awareness 问题如果配置过awareness机架/区域感知会导致分片无法跨节点分配。7.1 查看是否有强制分配规则GET _cluster/settings7.2 清空 awareness 配置PUT/_cluster/settings{persistent:{cluster.routing.allocation.awareness.attributes:null}}八、解决方案 4手动移动分片立刻见效如果自动平衡不生效可以手动指定分片移动到目标节点。8.1 手动移动分片命令POST/_cluster/reroute{commands:[{move:{index:test_index,shard:0,from_node:node-1,to_node:node-2}}]}✅立即生效负载立刻均衡九、解决方案 5解决索引分片倾斜大分片问题有些索引特别大一个分片占 100GB导致节点不均衡。解决方案拆分大索引按天/按月拆分使用rollover index新建索引使用更多分片避免单个分片超过50GB十、解决方案 6新加入节点不分配分片新节点加入后默认会自动均衡。如果没有平衡检查是否是数据节点node.data: true检查磁盘空间执行手动刷新POST/_cluster/reroute?retry_failedtrue十一、永久根治最佳实践从根源避免不均衡所有节点配置相同CPU、内存、磁盘、规格一致单分片大小控制 30~50GB副本数统一关闭不必要的 awareness 规则自动平衡保持开启磁盘水位线合理设置定期查看分片分布_cat/shards十二、分片不均衡问题处理流程总结图发现分片不均衡查看磁盘水位线解除磁盘限制开启自动分片平衡检查awareness强制规则手动移动分片优化索引大小避免倾斜集群负载完全均衡十三、总结最核心 5 条不均衡 90% 是磁盘水位线限制自动平衡默认开启保持 all 模式手动 move 分片可立即解决问题大分片会导致天然不均衡必须拆分节点规格一致才能真正均衡一句话口诀磁盘水位先放开自动平衡要打开手动迁移立刻好大索引分片要拆开The End点点关注收藏不迷路