ES节点磁盘空间不均导致分片无法分配的临时收敛思路
● 系统环境说明
Linux环境:centos 7.2
腾讯云ES Service:7.5.1
Java:1.8.0_181
● 集群配置
32核64GB, 3个(数据节点)
1000GB SSD云硬盘 x1
问题异常:
节点之间磁盘空间使用率不均,个别节点磁盘被写满,分片无法分配。
问题原因
- 由于ES balance机制是仅按分片数均衡,所以经常会遇到这种个别节点磁盘被占满的问题;
- 发生这种问题的主要原因是因为集群有个别比较大的索引,而分片又比较少,不能被有效均衡,所以导致个别节点磁盘占用率比较高。
解决思路
这种问题可以从以下操作思路进行缓解:
- 把一些相对没那么大的分片块(1g~10g),一点一点从磁盘已满的节点挪到磁盘空间相对富余的节点;
- 需要做对称挪动,否则刚才步骤1中挪动的分片可能还会被balance回去。所以把一些数据量非常小的历史分片(1k~1m)挪到磁盘空间紧张的节点,这样就没有打破分片数的均衡;
- 整个操作中需要关注集群的分片balance情况(allocation api),观察集群分片是否均衡,否则收敛是徒劳的。
分片挪动:
POST _cluster/reroute {
"commands" : [ {
"move" :
{
"index" : "test", "shard" : 0,
"from_node" : "node1", "to_node" : "node2"
}
}
]
}
所有失去的,都会以另一种方式回到你身边。