文章目录

  • 概述
  • 集群重启时的无意义shard重分配问题
  • shard recovery配置


概述

继续跟中华石杉老师学习ES,第66篇

课程地址: https://www.roncoo.com/view/55


集群重启时的无意义shard重分配问题

在集群重启的时候,有一些配置会影响shard恢复的过程。

首先,我们需要理解默认配置下,shard恢复过程会发生什么事情。

如果我们有10个node,每个node都有一个shard,可能是primary shard或者replica shard,你有一个index,有5个primary shard,每个primary shard有一个replica shard。

如果我们将整个集群关闭了进行一些维护性的操作,比如给机器安装新的磁盘之类的事情。当我们重启集群的时候,肯定节点是一个接一个的启动的,可能会出现5个节点先启动了,然后剩下5个节点还没启动。

也许是因为剩下的5个节点没来得及启动,或者是因为一些原因耽搁了,总之不管是什么原因,就是现在只有5个节点是在线的。这5个节点会通过gossip协议互相通信,选举出一个master,然后组成一个集群。他们会发现数据没有被均匀的分布,因为有5个节点没有启动,那么那5个节点上的shard就是不可用的,集群中就少了一半的shard。此时在线的5个node就会将部分replica shard提升为primary shard,同时为每个primary shard复制足够的replica shard。

最后,可能剩下的5个节点加入了集群。但是这些节点发现本来是他们持有的shard已经被重新复制并且放在之前的5个node之中了,此时他们就会删除自己本地的数据。然后集群又会开始进行shard的rebalance操作,将最早启动的5个node上的shard均匀分布到后来启动的5个node上去。

在这个过程中,这些shard重新复制,移动,删除,再次移动的过程,会大量的耗费网络和磁盘资源。对于数据量庞大的集群来说,可能导致每次集群重启时,都有TB级别的数据无端移动,可能导致集群启动会耗费很长时间。但是如果所有的节点都可以等待整个集群中的所有节点都完全上线之后,所有的数据都有了以后,再决定是否要复制和移动shard,情况就会好很多。


shard recovery配置

所以现在问题我们已经知道了,那么我们就可以配置一些设置来解决这个问题。

首先我们需要设置一个参数,gateway.recover_after_nodes: 8

这个参数可以让es直到有足够的node都上线之后,再开始shard recovery的过程。所以这个参数是跟具体的集群相关的,要根据我们的集群中节点的数量来决定。

此外,还应该设置一个集群中至少要有多少个node,等待那些node的时间:gateway.expected_nodes: 10,gateway.recover_after_time: 5m

经过上面的配置之后,es集群的行为会变成下面这样,等待至少8个节点在线,然后等待最多5分钟,或者10个节点都在线,开始shard recovery的过程

这样就可以避免少数node启动时,就立即开始shard recovery,消耗大量的网络和磁盘资源,甚至可以将shard recovery过程从数小时缩短为数分钟。

白话Elasticsearch66-针对集群重启时的shard恢复耗时过长问题定制的重要参数相关推荐

  1. aws集群重启_使用自动伸缩组在AWS中运行安全数据库集群

    aws集群重启 当您必须在AWS上运行可扩展应用程序时,您的数据库也必须是可扩展的. 扩展无状态应用程序层更容易,在无状态应用程序层中,每个节点几乎都是一次性的-即使3节点集群中的一个节点发生故障,您 ...

  2. aws集群重启_在AWS中设置Cassandra集群

    aws集群重启 Apache Cassandra是一个NoSQL数据库,它使用一致的哈希机制可以轻松进行水平扩展. 七年前,我尝试了它,并决定不将其用于我的附带项目,因为它太新了. 现在情况有所不同, ...

  3. ORACLE RAC 11.2.0.4 ASM加盘导致集群重启之ASM sga设置过小

    最近,一同事为一2节点的ORACLE RAC 11.2.0.4集群ASM加盘,没有注意到ASM的sga设置过小,加盘reblance时导致集群重启.详细描述如下: ​1.问题描述 ​ORACLE RA ...

  4. Redis Cluster节点服务器宕机后导致集群重启失败案例

    这里说下自己碰到的一种情况: redis cluster集群由三个节点服务器组成,一个6个redis实例,每个节点开启2个端口,三主三从. reids部署目录是/data/redis-4.0.1,集群 ...

  5. 白话Elasticsearch64-zen discovery集群发现机制

    文章目录 概述 zen discovery集群发现机制 (1)ping (2)unicast (3)master选举 (4)集群故障的探查 (5)集群状态更新 (6)不因为master宕机阻塞集群操作 ...

  6. 大数据互联网架构 tomcat集群配置时三个端口的作用

    tomcat集群配置时三个端口的作用 在配置多个tomcat时需要同时配置这三个端口 Connector用于监听请求 protocol: http/1.1协议 , 用于监听浏览器发送的请求 , 设置成 ...

  7. 分布式面试 - 集群部署时的分布式 session 如何实现?

    面试题 集群部署时的分布式 session 如何实现? 面试官心理分析 面试官问了你一堆 dubbo 是怎么玩儿的,你会玩儿 dubbo 就可以把单块系统弄成分布式系统,然后分布式之后接踵而来的就是一 ...

  8. 集群部署时的分布式 Session 如何实现?

    面试题 集群部署时的分布式 session 如何实现? 面试官心理分析 面试官问了你一堆 dubbo 是怎么玩儿的,你会玩儿 dubbo 就可以把单块系统弄成分布式系统,然后分布式之后接踵而来的就是一 ...

  9. Linux redis集群重启

    redis集群重启分为两步 一.关闭集群节点,删除垃圾数据. 二.启动各节点,创建集群. 一.关闭集群节点,删除垃圾数据 1.查看redis进程 [root@localhost redis-5.0.4 ...

最新文章

  1. 【C 语言】数组 ( 数组相关地址 | 数组首元素地址 | 数组地址 )
  2. Page类的IsPostBack原理
  3. 高清摄像头MIPI接口与ARM连接【转】
  4. [vue] SSR解决了什么问题?有做过SSR吗?你是怎么做的?
  5. 福大软工1816 · 第二次作业 - 个人项目
  6. 怎么才能在百度上看到自己发布的博文?
  7. 【Es】es deep paging问题
  8. js-Date()对象,get/setFullYear(),getDay()编程练习
  9. 正则表达式 10. 分组可选
  10. java集中常见的算法讲解
  11. Google桌面搜索和百度硬盘搜索索引停滞的原因
  12. numpy矢量化运算
  13. 微信公号DIY:训练微信聊天机器人公号变身图片上传工具
  14. GeoServer中使用SLD样式
  15. 数据挖掘➡谈谈为什么学?
  16. python locale.setlocale啥意思_Python locale 多语言模块及遇到问题解决
  17. 重心法选址 matlab程序,Excel重心法选址计算题的详细步骤
  18. Qt opengl fps相机
  19. B站UP主恰饭新思路:产品糅合进有意思的内容里
  20. 渲染是不是很费电脑,云渲染对电脑的要求高吗?

热门文章

  1. java wav 波形_java读取wav文件(波形文件)并绘制波形图的方法
  2. 微软服务器藏,配置微软CA服务器+SCEP
  3. GraalVM Internship Program
  4. 解决python安装第三方库速度很慢的问题(opencv为例)
  5. Ubuntu 18.04 如何添加或删除 SWAP 交换分区
  6. js阻止ajax继续请求,js 拦截全局 ajax 请求
  7. 65. Leetcode 153. 寻找旋转排序数组中的最小值 (二分查找-局部有序)
  8. 推荐系统笔记(模型融合)
  9. python程序导入import、规范化和封装自己写的.py文件
  10. hc05与单片机连接图_单片机科普:单片机的IO口不够用了怎么办?如何扩展单片机的IO口...