nvme不是一个硬盘

2021-06-12 00:05:16

所以有人推文关于希捷Mach2,一个硬盘,一个独立的头部“梳子”,我用德语发表评论:“它在一个机箱中的两个驱动器,甚至显示为两个驱动器。它仍然是旋转锈,所以寻求缓慢。线性IO会很好。“

这很快就会在单个磁盘驱动器上的RAID-0讨论中:“单个物理驱动器上的RAID-0。是的,如果你不需要你的数据,你可以这样做。“

这是真的,我回答说:“大多数人需要他们的数据,比他们认为自己更少。”

让我们展开该博客的英语中的线程和各种操作。

所以,大多数人实际上需要他们的数据比他们认为的那样得多。也就是说,因为大多数类似数据库的应用程序都在应用程序级别进行冗余,因此在分布式存储中的RAID或存储复制(“n因子”,用于分布每个块的商店的副本的数量)不是只有无用,但积极不受欢迎。

在我工作的地方,有数据轨道,还有数据轨道的客户。

数据轨道的客户具有无状态应用程序,因为它们已将所有国家管理层外包给数据轨道的各种产品和服务。他们正在部署他们的应用程序,他们在很大程度上不关心硬盘的内容,甚至是整个机器的内容。通常,他们的实例在卷展栏上核对,或者在30天后,以先到的是,以新的情况更换。

将我的实例放在尽可能分布,同一主机上没有两个实例,如果可能的话,不在同一机架中甚至相同的堆栈

(堆栈是32-48机架的网络单元)此属性称为“反亲和力”,分布展示实例。

数据轨道具有Kafka,Elastic,Cassandra或Mysql等事物,以及一些雪花。

所有这些服务都在做自己的冗余:个人驱动器,甚至是实例,不是他们关心的东西。考虑到宿主或机架的损失。

他们关心抗仿照放置,因为他们通过“不共享公共基础设施”在实例之间关心故障隔离。

这些服务通常会为读取容量创建实例,并且通过不共享基础架构的实例来获得容错容错是欢迎的二次效果。

现在,如果将从本地存储切换到分布式存储,则非常频繁地存储冗余存储。对于事务工作负载,这通常是具有三个副本的RAID-1(n = 3)。他们的大多数客户实际上都不需要:因为他们创造了读取扩展的能力,他们只关心失败的独立性,而不是避免它们。所以,他们想要的是反仿射放置,例如通过在堆栈下传播标签。

所以想象很多MySQL数据库,例如在OpenStack上。每个复制链的卷被标记为复制链名称,如链条=< x&gt ;.如果我们可以告诉存储将所有卷放在不同的物理驱动器上的相同链标签值,理想情况下,在不同机架中的不同存储节点上,使用n = 1存储数据将是正常的。

Cassandra,Elastic和Kafka可以使用相同的机制,因为它们也具有本土解决方案,为应用程序级别提供JBods的jodancy。

但这种分布式存储不存在,并且在不需要时导致三份存储。

是的,本地存储将是一个解决方案。我知道,因为在自动曝光的裸金属上运行时,它确实有效,我们目前有那个。

但大多数OpenStack运营商确实想要生活迁移,因此即使短暂的存储通常是电影的。这是......我可以没有的复杂化。

在早期的生活中,Quobyte确实为卷和短暂的存储工作,除了包含大量Memcached或MySQL实时迁移的客人仍然失败。

这不是因为quobyte,但由于内存流失:忙碌实例中的VM的内存比实时迁移更快地改变为目标主机。然后我们不得不扼杀这个情况,打破所有的SLA。

在我目前的生活中,无论如何,我都可以忍受实例损失,特别是如果它被控制和宣布。所以我真的不得不迁移实例,我可以善待他们在​​头部射击。使用前公告(“我需要您的主机,亲爱的实例,请死。”),并且应用程序在其他地方提供新实例,然后删除一个有问题的实例。或者通过控制(“不要强行 - 如果人口太薄,则不要强行杀死实例”。

任何一种情况都可能比实时迁移更快。如果数据卷位于分布式存储器,则肯定会更快,以便我只需要配置新实例,然后只需重新连接数据卷即可。

本地存储具有比分布式存储更小的写入延迟,但在结构上的NVME(“NVMEOF”)非常令人印象深刻。并且由于CentOS 8.2,NVMEOF通过TCP是默认内核的一部分。这意味着您确实可以使用NVMEOF TCP Initiator,而无需任何自定义安装。

在TCP上的NVMEOF比ROCE 2(“NVMEOF超过UDP”)的延迟略微差,但它确实与任何网卡合作 - 不再“总是购买Mellanox”的要求。

即使在错误的框中,它确实允许您提供存储。分布式存储可能很复杂,但它有许多非常有吸引力的使用情况。

卷中心工作流程:“让我成为一个新的VM,但保持卷”。在400 MB / s以400 MB / s提供一个数据的数据需要45分钟的副本时间,以便总MySQL供应时间约为60分钟。保持卷,更改VM(新图像,不同的大小)使此值得一分钟。

使用NVME命名空间或类似机制,可以将大型闪光灯驱动成咬合大小的块,因此提供存储和消耗它可以很好地解耦。

计算的寿命和终身计算不相同。通过将存储器移入远程存储节点,他们的生命周期确实是分开的,提供了许多不错的财务优势。

这提出了“NVME服务器”的样子的问题。 “是各自的NVME服务器是图像文件,还是将1:1映射到NVME硬件设备?”

NVME过度面料(超过UDP或TCP)是网络协议规范和实现。它使用iSCSI术语,因此客户端是“启动器”,服务器是“目标”。

支持存储在NVME目标中是如何实现的,当然是目标的选择。它可能是一个文件,但标准地图很好地映射到一个名为“nvme命名空间”的东西。

因此,闪存存储不会覆盖数据。相反,它在内部有一个名为闪光翻译层(FTL)的东西,这有点类似于日志结构化文件系统或数据库LSM。

与文件系统不同,它确实将线性块地址(LBA)翻译成闪存驱动器上的物理位置,因此没有目录和(最初也)没有文件名。

当然在后台中的回收和压缩线程,就像日志结构化文件系统或数据库中的压缩一样。因此,您可以将LSM视为具有单个文件的文件系统。

现在,添加nvme命名空间 - 它们介绍“文件名”。文件名是数字,名称空间ID(NSID)。它们生成看起来像分区的东西,但与它们不必固定的分区不同,而且它们不必是连续的。相反,像文件一样,可以由存储在存储器上的任何位置组成的命名空间,并且它们可以增长。这是因为闪存寻求基本上是免费的 - 旋转锈的规则不再限制我们。

Linux有命令行程序“NVME”以处理NVME闪存驱动器。驱动器出现了命名/ dev / nvmexny,其中x是驱动器号,y是命名空间ID(NSID),从1.到目前为止,您可能总是在这里看到第1号。

从NVME列表开始,以查看您拥有的设备。您还可以要求提供驱动器具有的功能,NVME ID-CTRL / DEV / NVME0N1-H将告诉您它可以以人类可读(-h)方式执行的内容。并非所有Flash驱动器都支持名称空间,但企业模型和较新型号应该。

使用NVME格式,您可以重新格式化设备(丢失其上的所有数据),并指定块大小。 NVME列表还将显示此块大小。您确实想要4kb块,而不是512字节块:它是2021,世界上不是PDP-11,所以NVME格式/ DEV / NVME0N1 -B 4096,请。一些较旧的驱动器现在需要重置能够继续,NVME重置/ dev / nvme0。

可以将命名空间分离,删除,创建和附加:nvme分离-ns / dev / nvme0-indespace-id = y -controllers = 0,然后nvme delete-ns / dev / nvme0-indace-id = 1。创建命名空间时,nvme create-ns / dev / nvme0 -dsze ... -ncap ... -ncap ... -flbas 0 -dps 0-nmic 0或所需的任何选项,然后nvme附加ns / dev / nvme0- ID = 1 -Controllers = 0。再次,nvme复位/ dev / nvme0。

在理论上,NVME驱动器和NVME控制器是单独的实体,并且存在跨越驱动器和控制器的共享名称空间的概念。

实际上,这不起作用,因为NVME设备通常作为控制器和存储的实体出售,因此标准定义的一些更有趣的应用程序不适用于您可以购买的典型设备。

因为Flash不会覆盖任何东西,你不能用硬盘驱动器的方式擦除和消毒设备。而是有驱动器加密(“opal”),或者nvme sanitize / dev / nvme0n1命令

或者你撕碎了这个设备,只需用硬盘制作碎片:使用硬盘,理论上足以打破驱动器,打破拼盘并制作斯普拉特。驱动器碎纸机生产相对大的金属和玻璃块,并符合要求。

闪存粉碎机也存在,但为了符合案件的实际芯片需要被打破。所以他们生产的是通常更精细的粒度,塑料和硅的“沙子”。

分布式存储是在其他类型的网络电缆上存储。每个磁盘读取和每个磁盘写入都会成为网络访问。因此,您确实需要一个相当近来的网络架构,从2010年或更高版本:一个叶子和脊椎架构,可选择超额订阅,以便网络永远不会破坏,永远不会是瓶颈。

Brad Hedlund于2012年在Hadoop的背景下写了关于叶子和脊柱,但第一个在谷歌使用专用硬件之前发生了第一个版本。这些天,例如,它可以用标准从Arista或瞻博获得的标准完成。

叶子和脊柱,如Brad Hedlund所示。今天你使用不同的硬件,但设计原则仍然是一样的。

在这里,叶子是连接到计算机的“机架顶部”开关,因此我们看到40x 10 Gbit / s到达标有“叶子”的红色框。我们还提供标有“脊柱”的绿色开关,并连接到最多10倍40克的完整超额自由网络。

使用BGP,我们可以自动构建路由表,并且我们将有许多从一个叶子开关到任何其他叶片开关的路由 - 一个用于图像中的每个脊柱开关。使用相等的多径(ECMP),我们将流量均匀地传播到所有链接上。任何单个连接都将限制为路径中最低带宽的信息,但聚合带宽实际上永远不会有限:我们可以始终为所有计算机的聚合容量提供足够的带宽。

当然,大多数人实际上都不需要那么多网络,所以你不会以完整的构建开头。最初仅提供该子集(三到四到四个上行链路)和保留交换机端口和缺失链路的电缆路径。一旦看到需要添加它们,例如,当两个数字百分比中的带宽利用率或者看到尾部滴/红色时。

一级的叶子和脊柱可以构建一些绑定在一起的机架,没有超额认购。我们称之为堆栈,并取决于交换机硬件和它提供的端口数,它是32-48机架左右。

我们当然可以将另一层叶和脊柱放在顶部一起捆绑堆栈,我们得到一个从未瓶颈的网络层,从未断开连接,在整个数据中心位置。

“永远不要断开连接?”嗯,假设三个上行链路,并且在第一叶子和脊柱层顶部的堆叠层,从开始到目的地,我们得到四个跃点,并且通过ECMP到每个目的地频率,3 ^ 4可能的冗余路径。

您需要建立一个专门的监控,以便注意到丢失的链接。您只能在TOR中取消。

利用这种网络,专用存储网络是冗余的(如不再需要),因为前端流量和存储流量可以在同一结构上共存。

常见的测试或演示是Hadoop Terasort基准:生成Terabyte或10个随机数据,并对其进行排序。 这是一个没有减少数据量的No-Op映射阶段,然后在Shuffle相中排序数据,然后在整个网络上排序数据(排序不会使其变小)到减速器。 由于数据是随机生成的,因此需要大约对每个Hadoop 128MB-“块”进行分类的时间。 所有这些都将在大致同时做好准备,升降并尝试将网络从其映射器节点交叉到Reducer节点。 如果你的网络幸存下来,一切都很好 - 没有什么可以麻烦它。