AWS Elasticsearch后模式

因此,碰巧我们在SaaS版本的LogSentinel上遇到了生产问题–我们的Elasticsearch停止了对新数据编制索引。 由于Elasticsearch只是辅助存储,因此没有数据丢失,但这给我们的客户带来了一些问题(他们无法在其仪表板上看到实时数据)。 以下是事后分析–发生了什么事情,发生了什么原因,我们如何处理它以及如何防止它。

让我从系统如何运行的背景开始–我们通过RESTful API(或syslog)接受审核跟踪条目(日志),并将其推送到Kafka主题。 然后使用Kafka主题将数据存储在主存储(Cassandra)中并对其进行索引,以便在Elasticsearch中更好地进行可视化和分析。 选择托管的AWS Elasticsearch服务是因为它节省了集群管理的所有开销,并且作为一家启动公司,我们希望最大程度地减少基础架构管理工作。 就像下面将要看到的那样,这是一种祝福和诅咒。

我们在许多元素上启用了警报,包括Elasticsearch存储空间和日志文件中的应用程序错误数。 这使我们能够快速响应问题。 因此触发了“大量应用程序错误”警报。 索引由于FORBIDDEN/8/index write而被阻止。 我们有一个启用它的系统调用,因此我尝试运行它,但是不到一分钟后,它再次被阻止。 这意味着我们的Kafka使用者无法处理消息,这很好,因为我们在Kafka中有足够的消息保留期限,因此不会丢失任何数据。

我调查了这种阻止的可能原因。 根据Amazon的说法,其中有两个 -JVM内存压力增加和磁盘空间不足。 我检查了指标,一切看起来都很好– JVM内存压力几乎没有达到70%(阈值是75%),并且有超过200GiB的免费存储。 Elasticsearch应用程序日志中只有一个WARN(这是“节点故障”,但此后未报告任何问题)

这个问题还有另一个奇怪的方面–节点的数量是配置的两倍。 这通常在升级期间发生,因为AWS正在为Elasticsearch使用蓝色/绿色部署,但是我们最近没有进行任何升级。 这些额外的节点通常会在很短的一段时间后消失(在重新部署/升级准备就绪之后),但是在这种情况下它们不会消失。

无法通过SSH连接到实际机器,无法通过Elasticsearch手段取消阻止索引,无法关闭或重新启动节点,我提出了支持请求。 经过我们几次和几次交流后,问题已经明确并得到解决。

此问题的主要原因是2倍。 首先,我们有一个无法反映集群状态的配置–我们假设有更多的节点,而共享和副本配置意味着我们没有分配副本( 此处和此处的 碎片和副本更多 )。 最佳实践是使节点>副本数,以便每个节点获得一个副本(加上主分片)。 拥有未分配的分片副本本身并不坏,并且有合理的理由。 我们可能被认为是配置错误,但不是立即造成负面影响的一种。 我们之所以选择这些设置,部分原因是创建集群后无法在AWS中更改某些设置。 并且不支持打开和关闭索引。

第二个问题是AWS Elasticsearch逻辑,用于计算其断路器中阻止索引编制的可用存储。 因此,即使每个现有节点上都有200+ GiB可用空间,AWS Elasticsearch仍认为我们空间不足并阻止了索引编制。 我们无法看到这一点,因为我们只能看到可用的存储,而没有看到AWS认为可用的存储。 因此,计算将获得分片+副本的总数,然后将其乘以每个共享存储。 这意味着未分配副本不会占用实际空间,就好像它们已占用空间一样。 这种逻辑是违反直觉的(如果不是完全错误的话),几乎没有办法预测它。

发生蓝/绿部署时,将触发此逻辑–因此,在正常操作中,将检查实际的剩余存储空间,但是在升级期间,将触发基于分片的检查。 那已经阻塞了整个集群。 但是,什么触发了蓝绿色部署过程?

我们有时需要访问Kibana,并且由于严格的安全规则,默认情况下任何人都无法访问它。 因此,我们临时更改了访问策略,以允许从我们的办公室IP进行访问。 预计此更改不会触发新的部署,也永远不会导致这种变化。 但是,AWS文档指出:

在大多数情况下,以下操作不会导致蓝绿色部署:更改访问策略,更改自动快照时间,如果您的域具有专用主节点,则更改数据实例计数。
有一些例外。 例如,如果自启动三个可用区支持以来您尚未重新配置域,则Amazon ES可能会执行一次蓝/绿部署,以在可用区中重新分配专用主节点。

显然还有其他例外,其中之一发生在我们身上。 这就导致了蓝色/绿色的部署,由于我们的配置有缺陷,这又触发了基于奇数逻辑的索引块,以假定未分配的副本占用了存储空间。

我们如何修复它-我们用更少的副本创建了索引,并开始了重新索引(它从主要来源获取数据并成批索引)。 这减小了占用空间,AWS手动干预以“取消”蓝/绿部署。 一旦知道了问题,修复就很容易了(由于其他索引配置的更改,我们仍然必须重新创建索引)。 (再次)说一下在解决问题和沟通方面,AWS支持有多好。

正如我在开始时所说的,这并不意味着有数据丢失,因为我们让Kafka将消息保留了足够的时间。 但是,一旦索引可写,我们就希望使用者从上一次成功发送的消息开始继续-我们专门编写了事务处理行为,该行为仅在成功存储到主存储中并成功建立索引之后才提交偏移量。 不幸的是,我们正在使用的kafka客户端打开了我们忽略的自动提交功能。 因此,消费者跳过了失败的消息。 它们仍然在Kafka中,我们正在使用单独的工具对其进行处理,但这向我们表明了我们的假设是错误的,并且代码调用了“ commit”这一事实,但这实际上并不意味着什么。

因此,故事的寓意是:

  • 监视一切。 发生坏事,快速了解它们是一件好事。
  • 检查您的生产配置,并确保它足以满足当前需求。 它是副本,JVM大小,磁盘空间,重试次数,自动缩放规则等。
  • 请注意托管云服务。 他们节省了很多精力,但也使您失去了控制权。 他们可能遇到的问题是您唯一的选择就是联系支持部门。
  • 如果提供托管服务,请确保显示有关潜在边缘情况的足够信息。 错误控制台,活动控制台或诸如此类,使客户可以了解发生了什么。
  • 验证关于库默认设置的假设。 (理想情况下,如果您在当前的配置状态下执行了某些意外操作,则库应该警告您)
  • 确保您的应用程序是容错的,即,一个组件中的故障不会停止整个世界,也不会导致数据丢失。

因此,总的来说,一个罕见的事件意外触发了蓝绿色部署,其中有缺陷的配置和有缺陷的可用空间计算的结合导致了不可写的集群。 幸运的是,没有数据丢失,至少我学到了一些东西。

翻译自: https://www.javacodegeeks.com/2020/03/an-aws-elasticsearch-post-mortem.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python设置word背景色_Python数据可视化:WordCloud入门

WordCloud是一种很好的展现数据的方式,网上也有不少小工具和在线网页。但是有些不支持中文,有些安装复杂,所以决定用Python实现。主要参考官网,通过官网的例子,讲一下WordCloud的制作。主要流程获取内容的路径如果是一…

java 解析日期格式_日期/时间格式/解析,Java 8样式

java 解析日期格式自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期和时间。 在这段时间内,成千上万(甚至数百万&#x…

php第三方登录代码,thinkPHP5项目中实现QQ第三方登录功能

本文实例讲述了thinkPHP5项目中实现QQ第三方登录功能。分享给大家供大家参考,具体如下:最近用thinkPHP 5框架做了一个婚纱店的项目,在开发过程中需要用到第三方登录,腾讯官方给的案例是几个文件相互包含实现的,放到tp5…

mac 显示隐藏文件_如何在Mac上显示隐藏文件?苹果mac显示隐藏文件夹方法

与任何操作系统一样,macOS会将重要文件隐藏起来,以防止意外删除它们并因此而损坏系统。但是,在某些情况下,您可能需要在Mac上显示隐藏文件,例如,浏览“ 库”文件夹并清除旧日志,缓存或其他垃圾文…

分布式虚拟跟踪

跟踪提供了对系统的可见性,使开发人员和操作人员可以在运行时观察应用程序。 当系统不断增长并与更多微服务进行交互时,跟踪变得非常有价值。 在这样的环境中,这些痕迹非常棒,可以定位导致性能下降的故障和瓶颈。 在这篇文章中&a…

php 删除数组的空元素,php删除数组空元素的方法_后端开发

php如何实现自动跳转_后端开发php实现自动跳转的方法:1、通过php内置函数“header”,将http响应头中的“Location”设置为要跳转的URL即可;2、可以在javascript代码中将“window.location.href”指向要跳转的URL即可。php删除数组空元素的方法…

map for循环_JavaScript 用 for 循环太 low?你是不是有什么误解

天要吐槽下,我时不时地看到有些文章说“循环语句不好,你应该用 filter,map 和 reduce ”——每次看到有文章鼓吹,所有需要循环的场景一律用这几个函数式方法,我都恨得牙痒痒。没错,这些函数式方法确实有它们…

vue 动态组件组件复用_真正的动态声明性组件

vue 动态组件组件复用在这篇简短的文章中,我将重点介绍ADF动态声明性组件。 我的意思是一个众所周知的ADF标签af:declarativeComponent 。 它可以用作将页面设计为页面片段和组件组成的一种非常便捷的方法。 例如,我们的页面可以包含以下代码…

简单工程验收单表格_中铁超大型工程项目-123个精细化管理手册配套表格附件,超全...

中铁超大型工程项目-123个精细化管理手册配套表格附件,超全!什么是项目精细化?答:工程项目精细化管理是一个系统的管理体系,包含一系列管理制度和办法,除了《工程项目精细化管理办法》这个纲领性文件外&…

php 执行 javascript,Bash/PHP/Javascript:如何运行输出javascript的php文件,并执行该javascript?...

目前我试图发送一个webhook请求来争执,所以我可以发送更新到我的资源库到我的不一致服务器中的一个频道。如果我在浏览器中加载页面,它会运行此代码,并且该消息将出现在我的不一致中:$(document).ready(function(){setTimeout(sen…

递归分解WAR文件

抽象 是否曾经需要分解WAR文件以及分解WAR文件中的所有JAR文件? 是的,我也是! 我写了Ferris-war-exploder来爆炸: 一个JAR文件 一个WAR文件,它找到的每个JAR文件也会爆炸。 包含每个JAR文件(请参阅&…

判断unsigned long long乘法溢出_信息安全课程17:缓冲区溢出2

在之前所讲述的内容中,都是我们在自己的程序中自行修改的;正常情况下,没有程序员会在自己的代码中这样写——那有没有办法攻击别人正常的程序呢?攻击者怎么样能够影响到不是自己的程序的返回地址呢?以及怎么样通过攻击…

java 保垒机telnet,开源堡垒机系统Teleport

一. teleport简介Teleport是一款简单易用的堡垒机系统,具有小巧、易用的特点,支持 RDP/SSH/SFTP/Telnet 协议的远程连接和审计管理。Teleport由两大部分构成:跳板核心服务WEB操作界面官网地址: https://tp4a.com/ 官网文档: https://docs.…

choiceformat_ChoiceFormat:数字范围格式

choiceformatChoiceFormat类的Javadoc指出ChoiceFormat “允许您将格式附加到一系列数字上”,并且“通常在MessageFormat中用于处理复数”。 这篇文章描述了java.text.ChoiceFormat并提供了一些在Java代码中应用它的示例。 ChoiceFormat与java.text包中其他“ 格式…

python和rpa_什么是RPA

产品介绍阿里云RPA产品是一款新型工作流程自动化办公机器人软件,通过模拟人工操作进行自动流程执行处理。它可以将办公人员从每日的重复工作中解放出来,提高生产效率。具体而言,阿里云RPA是基于软件机器人和人工智能(AI,Artificia…

php背景图片随页面大小改变,css背景图根据屏幕大小自动缩放

css背景图根据屏幕大小自动缩放代码:html,body{margin:0px;padding:0px;}#background { position: fixed;top: 0;left: 0;width: 100%;height: 100%;overflow: hidden;background-color: #211f1f; display:none\8;}#background .bg-photo {position: absolute;top: …

Java –缺少字体–崩溃的应用程序!

Eclipse MAT和Heaphero都是分析大型堆转储的流行Java工具。 最近,当我们尝试在Eclipse MAT中分析堆转储文件时遇到了一个有趣的问题。 工具因缺少字体crash而崩溃。 我们认为我们将与您分享发现的结果。 CompositeStrike.getStrikeForSlot()…

forever不重启 node_运维监控Prometheus,部署安全的node_exporter监控主机

简介prometheus监控系统的时候,是使用pull的方式来获取监控数据,需要被监控端监听对应的端口,prometheus从这些端口服务中拉取对应的数据。node_exporter安全性讨论node_exporter是收集操作系统的指标的一个程序。例如CPU,内存&am…

netbeans ide_IDE:5个最喜欢的NetBeans功能

netbeans ide愉快的发展……。 NetBeans具有许多有趣的功能 ,这些功能使开发非常容易,只需很少的步骤,并且可以在非常快速地将产品推向市场的过程中创造出非常高效的环境 。 将我的谈话仅限于五个功能非常困难,而此IDE具有大量有…

python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!

原标题:高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!最近经常听到周围的人抱怨:“工作忙,在加班……”不知不觉,当代职场人早就被“996”支配得体无完肤了,不仅身体吃尽熬夜加班的苦…