ES集群重启最佳实践 - 简书
标签:
| 发表时间:2020-05-01 08:32 | 作者:
出处:https://www.jianshu.com
线上集群规模
- 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 集群 重启] 推荐:
- -
单index大小:20GB ~ 40GB. 索引数(按天拆分索引):600. 直接kill掉节点,可能导致数据丢失. 集群会认为该节点挂掉了,集群重新分配数据进行数据转移(shard rebalance),会导致节点直接大量传输数据. 节点重启之后,恢复数据,同样产生大量的磁盘、网络流量,耗费机器和网络资源的.
- -
修改es配置,重启集群成本巨大. ES集群已有25T数据,27个节点,24个数据节点(热盘12和hot节点,慢盘12个stale节点,3个mater节点),数据节点的启动,加入集群后需要初始化全部索引,这个过程过程很慢. 全部重启一次可能要一天,非常耗时. 重启后经常遇到少量索引一直处于unassigned状态,导致集群一直是red状态.
- - 学习日志
为了防止ES集群中单点问题,一般都需要对集群节点做高可用性,当发生单点问题时,也可以向外正常提供服务. 这里主要记录一下节点的加入、离开和选举. 集群安装教程请参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html.
- -
在生产环境搭建或维护 Elasticsearch 集群和个人搭建集群的小打小闹有非常大的不同. 本文的最佳实践基于每天增量数亿+ 的线上环境. Elasticsearch 和 Lucene 都是 Java 语言编写,这意味着我们必须注意堆内存的设置. Elasticsearch 可用的堆越多,它可用于过滤器(filter)和其他缓存的内存也就越多,更进一步讲可以提高查询性能.
- -
2、关闭allocate,禁止shard做allocate. 5、等级集群变成yellow后开启allocate,允许shard做allocate. 调整集群恢复时的带宽,-1是指无限制 . 调整集群恢复时的单机并发度,最好是和磁盘块数一致 . 调整集群恢复时单个shard中同时恢复的小文件的个数.
- - 非技术 - ITeye博客
最近一直在研究ES集群,也看了很多篇前辈们总结的博客,同事借鉴了官方给出的一些建议,做了一下几点总结,希望对后来者有用:. 为了防止ES进程的内存被置换到磁盘上(会导致在检索的时候发生内存交换导致检索速度迟缓)引起性能急速下降. 候可以把config/elasticsearch.yml中的bootstrap.mlockall设置为true就可以了.
- - 行业应用 - ITeye博客
在一般的关系型数据库中,都支持连接操作. 在ES这种分布式方案中进行连接操作,代价是十分昂贵的. 不过ES也提供了相类似的操作,支持水平任意扩展,实现连接的效果. 其他内容, 参考Elasticsearch官方指南整理. 在ES中支持两种连接方式:嵌套查询 和 has_child、has_parent父子查询.
- - 互联网 - ITeye博客
Elasticsearch是目前大数据领域最热门的技术栈之一,经过近8年的发展,已从0.0.X版升级至6.X版本,虽然增加了很多的特性和功能,但是在主体架构上,还是没有太多的变化. 下面就把我对于ES使用实践的一些经验总结一下,供大家参考;也请大家拍砖. 如果有条件,尽可能使用SSD硬盘, 不错的CPU.
- -
ElasticSearch能够以接近实时的速度提供数据操作和搜索功能. 在默认情况下,从索引/更新/删除数据到出现在搜索结果之间,你可能会感受到有1秒的延迟时间(刷新间隔). 这是与SQL等其他平台的一个重要区别,这些平台在完成事务之后,它们的数据立即可用. 先前,我们已经知道如何索引一个单个的文档.
- - 企业架构 - ITeye博客
随着按段(per-segment)搜索的发展, 一个新的文档从索引到可被搜索的延迟显著降低了. 新文档在几分钟之内即可被检索,但这样还是不够快. 提交(Commiting)一个新的段到磁盘需要一个 . fsync 来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据. 但是 fsync 操作代价很大; 如果每次索引一个文档都去执行一次的话会造成很大的性能问题.