关于实际示例中的磨损SSD


一年前,我们向代理添加了来自客户端服务器上SMART磁盘属性的一组指标。 当时,我们还没有将它们添加到界面中并向客户展示。 事实是,我们不通过smartctl来获取指标,但是我们直接从代码中提取ioctl,因此无需在客户端服务器上安装smartmontools即可使用此功能。
该代理不会删除所有可用的属性,而只会删除我们认为最重要的属性,而不会删除最不特定于供应商的属性(否则,它必须支持类似于smartmontools的磁盘库)。
现在,人们终于可以检查我们在那儿拍摄的东西了。 并且决定从属性“介质损耗指示器”开始,该属性显示剩余的SSD记录资源的百分比。 在剪辑下,图片中的一些故事讲述了如何在服务器上实际使用该资源。


有没有被杀死的固态硬盘?


可以相信,新的,更有生产力的ssds的发布频率要比旧的ssds更高。 因此,首先要看的是在记录资源磁盘方面被杀死最多的东西。 所有客户端的所有ssd的最小值为1%。


我们立即就此事给客户写信,结果证明是hetzner的Dedik。 托管支持立即替换为ssd:




当ssd停止提供记录时,从操作系统的角度看情况将是非常有趣的(我们现在正在寻找机会来故意模拟ssd,以查看此方案的指标:)


SSD被杀死的速度有多快?


由于我们是一年前开始收集指标的,并且我们不会删除指标,因此可以及时查看该指标。 不幸的是,流量最高的服务器仅在2个月前才连接到okometer。




在这张图中,我们看到他们在2个月内如何烧掉8%的录制资源。 也就是说,使用相同的记录配置文件,这些ssd将足以满足100 /(8/2)= 25个月的需求。 我不太了解,但是让我们看看有什么样的负载?




我们看到只有ceph可以与磁盘一起使用,但是我们知道ceph只是一个层。 在这种情况下,ceph客户端充当多个节点上的kubernetes集群的存储库,让我们看看k8s内部产生最多磁盘写入的内容:




由于ceph在集群中工作,而redis的记录由于数据复制而增加,因此绝对值最不匹配。 但是,负载配置文件使您可以放心地说,该记录完全启动了Redis。 让我们看看萝卜上发生了什么:




在这里您可以看到平均每秒执行少于100个请求,这可以更改数据。 回想一下,redis有两种将数据写入磁盘的方法


  • RDB-整个数据库到磁盘的定期快照,启动Redis时,我们将最后一个转储读入内存,并且在转储之间丢失数据
  • AOF-我们写入所有更改的日志,在开始时redis会丢失此日志,并且所有数据都会出现在内存中,我们只会在此日志的fsync之间丢失数据

众所周知,在这种情况下,使用RDB的转储频率为1分钟:



SSD + RAID


根据我们的观察,存在SSD的服务器磁盘子系统主要有以下三种配置:


  • 在raid-1中收集的服务器2 SSD中,一切都在那里
  • 服务器具有ssd的HDD + raid-10,通常用于经典RDBMS(系统,WAL和HDD上的部分数据,而SSD上读取方面最热的数据)
  • 服务器具有独立的SSD(JBOD),通常用于nosql类型的cassandra

如果在raid-1中收集了ssd,则记录将同时记录到两个磁盘上,因此损耗以相同的速度进行:




但是服务器引起了我的注意,但情况却有所不同:




在这种情况下,仅安装mdraid分区(所有raid-1阵列):



记录指标还显示/ dev / sda上还有更多条目:




原来,/ dev / sda上的分区之一被用作交换,并且在该服务器上交换i / o非常引人注意:




SSD和PostgreSQL的折旧


实际上,我想查看Postgres中各种写入负载下的ssd磨损率,但是通常,在加载的ssd基座上使用它们时要非常小心,并且大量记录要写入HDD。 在寻找合适的案例时,我遇到了一个非常有趣的服务器:




在raid-1中两个ssd的磨损为3个月,为4%,但从WAL记录速度来看,此postgres写入的速度小于100 Kb / s:




事实证明,postgres积极使用临时文件,与它们一起使用会创建不断向磁盘写入的流:




由于带有诊断程序的PostgreSQL非常好,因此我们可以根据请求找出我们到底需要解决的问题:




如您所见,此特定的SELECT会生成一堆临时文件。 通常,在SELECT postgres中,有时它们会生成没有任何临时文件的记录- 在这里我们已经讨论过了。


合计


  • Redis + RDB创建的写入磁盘的数量不取决于数据库中的修改数量,而是取决于数据库的大小+转储间隔(通常,这是我所知道的数据存储中最高级别的写入放大)
  • ssd上经常使用的交换不好,但是,如果需要在ssd磨损中增加抖动(出于raid-1的可靠性),则可能是一种选择:)
  • 除了WAL和数据文件外,数据库仍可以将各种临时数据写入磁盘。

okmeter.io我们相信,为了深入探究问题的根源,工程师需要有关基础架构所有层的大量指标。 我们正在尽力提供帮助:)

Source: https://habr.com/ru/post/zh-CN420937/


All Articles