ES集群重启最佳实践 - 简书

线上集群规模

  • data节点:12
  • 单index大小:20GB ~ 40GB
  • 副本数:1
  • 索引数(按天拆分索引):600

非安全重启面临的问题

  • 直接kill掉节点,可能导致数据丢失
  • 集群会认为该节点挂掉了,集群重新分配数据进行数据转移(shard rebalance),会导致节点直接大量传输数据
  • 节点重启之后,恢复数据,同样产生大量的磁盘、网络流量,耗费机器和网络资源的。

安全重启步骤

  • 暂停数据写入程序
  • 关闭集群shard allocation
  • 手动执行POST /_flush/synced
  • 重启节点
  • 重新开启集群shard allocation
  • 等待recovery完成,集群health status变成green
  • 重新开启数据写入程序

速度调优

  • 可临时增大 max_bytes_per_sec;随后在进行更改
  • 可以多节点同时操作
  • 可以将历史索引的副本数暂时调整为0;集群恢复后在进行调整
  • 使用 _forcemerge

相关API

  • synced flush: curl -XPOST localhost:9200/_flush/synced
  • _forcemerge: forcemerge?max_num_segments=1
  • 禁用 shard allocation curl -XPUT localhost:9200/_cluster/settings { "persistent": { "cluster.routing.allocation.enable": "none" }}
  • 启用 shard allocation: curl -XPUT localhost:9200/_cluster/settings { "persistent": { "cluster.routing.allocation.enable": "all" }}
  • 增大max_bytes_per_sec: http://localhost:port/_cluster/settings?flat_settings=true{"transient" : {"indices.recovery.max_bytes_per_sec" : 200mb}}
  • 恢复max_bytes_per_sec: http://localhost:port/_cluster/settings?flat_settings=true{"transient" : {"indices.recovery.max_bytes_per_sec" :null}}
  • 一些查看恢复速度的API: curl localhost:9200/{index}/_stats?level=shards&pretty curl localhost:9200/{index}/_recovery?pretty&human&detailed=true curl localhost:9200/_cat/recovery

总结

按照上述操作,集群重启恢复(恢复80%)使用 1小时;随后就开启数据写入,恢复速率大大减慢,但并不影响正常使用



你可能感兴趣的:(ES集群重启最佳实践 - 简书)