ElasticSearch 集群的高可用和自平衡方案会在节点挂掉(重启)后自动在别的结点上复制该结点的分片,这将导致了大量的 IO 开销。
如果离开的节点重新加入集群,es 为了对数据分片(shard)进行再平衡,会为重新加入的节点再次分配数据分片, 当一台 es 因为压力过大而挂掉以后,其他的es服务会备份本应那台 es 保存的数据,造成更大压力,于是整个集群会发生雪崩。
生产环境下建议关闭自动平衡。
数据分片与自平衡
一:关闭自动分片,即使新建index也无法分配数据分片
curl -XPUT http://192.168.1.1:9200/_cluster/settings -d '{
"transient" : {
"cluster.routing.allocation.enable" : "none"
}
}'
二:关闭自动平衡,只在增减ES节点时不自动平衡数据分片
curl -XPUT http://192.168.1.1:9200/_cluster/settings?pretty -d '{
"transient" : {
"cluster.routing.rebalance.enable" : "none"
}
}'
设置完以后查看设置是否添加成功:
curl http://192.168.1.1:9200/_cluster/settings?pretty
设置成功的返回如下:
{
"transient": {
"cluster": {
"routing": {
"rebalance": {
"enable": "none"
},
"allocation": {
"enable": "none"
}
}
}
}
}
关于设置的有效性
- persistent 重启后设置也会存在
- transient 整个集群重启后会消失的设置
分片分配均衡恢复
一:重新启用自动分片
curl -XPUT http://192.168.1.1:9200/_cluster/settings -d '{
"transient" : {
"cluster.routing.allocation.enable" : "all"
}
}
二:副本重新分配均衡
curl -XPUT http://192.168.1.1:9200/_cluster/settings?pretty -d '{
"transient" : {
"cluster.routing.rebalance.enable" : "all"
}
}'
或,延迟副本重新分配均衡,未分配节点重新分配延迟到5分钟之后
PUT /_all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}
参考链接
https://www.elastic.co/guide/en/elasticsearch/reference/current/shards-allocation.html
本文由 Chakhsu Lau 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。