ES节点磁盘空间不均导致分片无法分配的临时收敛思路

● 系统环境说明

Linux环境:centos 7.2
腾讯云ES Service:7.5.1
Java:1.8.0_181

● 集群配置

32核64GB, 3个(数据节点)
1000GB SSD云硬盘 x1

问题异常:


节点之间磁盘空间使用率不均,个别节点磁盘被写满,分片无法分配。

问题原因

  1. 由于ES balance机制是仅按分片数均衡,所以经常会遇到这种个别节点磁盘被占满的问题;
  2. 发生这种问题的主要原因是因为集群有个别比较大的索引,而分片又比较少,不能被有效均衡,所以导致个别节点磁盘占用率比较高。

解决思路

这种问题可以从以下操作思路进行缓解:

  1. 把一些相对没那么大的分片块(1g~10g),一点一点从磁盘已满的节点挪到磁盘空间相对富余的节点;
  2. 需要做对称挪动,否则刚才步骤1中挪动的分片可能还会被balance回去。所以把一些数据量非常小的历史分片(1k~1m)挪到磁盘空间紧张的节点,这样就没有打破分片数的均衡;
  3. 整个操作中需要关注集群的分片balance情况(allocation api),观察集群分片是否均衡,否则收敛是徒劳的。

分片挪动:

POST _cluster/reroute {
    "commands" : [ {
        "move" :
            {
              "index" : "test", "shard" : 0,
              "from_node" : "node1", "to_node" : "node2"
            }
        }
    ]
}
原文地址:https://www.cnblogs.com/daemonyue/p/14208265.html