Sha*_*ald 14 linux raid lvm ramdisk
我们的服务器总 RAM 为 64GB,应用程序通常最多使用 30GB 的可用 RAM。其中一个应用程序处理大量平面文件,而我们遇到了吞吐量问题,即等待磁盘 I/O。在探索可能的解决方案时,出现了 RAM 磁盘的想法。RAM 磁盘的问题在于其固有的波动性。
我找到了有关 RAM 磁盘、RAID 1 配置和用于对物理磁盘进行分组的逻辑镜像卷的单独文档,但我似乎找不到任何文档表明这些磁盘复制解决方案是否可以与 RAM 磁盘一起使用。更重要的是,由于我们的想法是让 RAM 磁盘可用于读/写,并且让物理磁盘“遮蔽”RAM 磁盘,赶上写入操作,因此我们希望 RAM 磁盘成为所有磁盘的“主”磁盘读/写。
需要注意的是,我们希望避免仅使用 RAM 缓存操作系统中的文件,但如果我们能够获得与独立 RAM 磁盘相同的性能,那就可以了。我们最初避免了这种情况,因为有时某些文件不会长时间被访问,但仍然需要按需的读/写速度。
for*_*est 26
需要注意的是,我们希望避免仅使用 RAM 缓存操作系统中的文件,但如果我们能够获得与独立 RAM 磁盘相同的性能,那就可以了。我们最初避免了这种情况,因为有时某些文件不会长时间被访问,但仍然需要按需的读/写速度。
您可以用来vmtouch解决您的问题。这是一个实用程序,允许您将某些文件甚至整个目录以及它们下面的所有内容固定在页面缓存中,这样它们就不会被驱逐,即使它们长时间没有被访问(这是您不简单地访问它们的最初原因)依赖于页面缓存)。这最多需要与 RAM 磁盘相同的内存量,或者实际上更少。您仍将使用页面缓存,但它会产生与使用 RAM 磁盘相似的性能(实际上性能更优越,因为不涉及 MD 驱动程序)。
Ter*_*nen 13
这可以一起破解,但这是一个坏主意,并且可能在可靠性和可维护性方面存在多个问题。
我认为 RAMdisk 和物理磁盘的 RAID1 将受限于物理磁盘的性能,因为 RAID1 功能的一部分是确保两个副本同步。
对于读取,可能会有一些好处,因为 MD 驱动程序可以在不同设备之间分配读取。
创建此内容的可能步骤:
losetup从文件中创建块设备。mdadm新创建的块设备和对应的硬盘分区创建阵列。我自己还没有尝试过,所以这只是理论上的例子。
首先,RAM 磁盘在 Linux 上几乎从来都不是正确的答案。因为它是块设备,所以任何读取最终都必须经过块层、文件系统和常规 VFS 层,并且数据除了存储在 RAM 磁盘中之外,最终还将缓存在 RAM 中。这种数据的重复以及所涉及的额外层数是 tmpfs 存在于 Linux 上的原因,tmpfs 文件系统不涉及块层,而是直接将数据存储在页面缓存中,跳过了所有额外的复杂性。它还会根据存储在其中的数据量自动调整大小(而不是必须预先定义大小),甚至可以利用交换空间。如果您认为需要 ramdisk,那么 99% 的情况下您应该真正使用 tmpfs。
\n现在,就实际解决方案而言......
\n如果您的所有数据实际上都适合 RAM,那么您\xe2\x80\x99最好将其全部固定在 RAM 中,方法是使用vmtouch等工具,或者让应用程序 mmap 所有文件,然后对所有文件调用 mlock映射的区域。
\n如果您的数据不能全部放入 RAM,您有两个现实的选择:
\n我已经使用 AWS 临时磁盘完成了类似的操作,该磁盘速度非常快,但无法在断电/通电周期中幸存。
我们有一个“种子磁盘”,它是 GP2(现在是 GP3)的普通廉价 EBS 卷,它位于具有快速临时磁盘的 RAID1 中
我为 rc.local 创建了一个 bash 脚本,用于通过命令输出确定nvme list是否存在临时磁盘,并在适当的情况下将其加入到 raid 中。
在您的情况下,启动时必须创建 ramdisk,将其加入到现有的降级阵列中。
PROD pathservice1.taws ~ $ nvme list
Node SN Model Namespace Usage Format FW Rev
---------------- --- ----------------------------- --------- -------------------- ---------------- --------
/dev/nvme0n1 123 Amazon Elastic Block Store 1 128.85 GB / 128.85 GB 512 B + 0 B 1.0
/dev/nvme1n1 234 Amazon Elastic Block Store 1 107.37 GB / 107.37 GB 512 B + 0 B 1.0
/dev/nvme2n1 345 Amazon Elastic Block Store 1 2.20 TB / 2.20 TB 512 B + 0 B 1.0
/dev/nvme3n1 456 Amazon EC2 NVMe Instance Storage 1 900.00 GB / 900.00 GB 512 B + 0 B 0
/dev/nvme4n1 567 Amazon EC2 NVMe Instance Storage 1 900.00 GB / 900.00 GB 512 B + 0 B 0
Run Code Online (Sandbox Code Playgroud)
最后两个是每个 900G 的临时磁盘。
好处是,对 mdX 设备的写入将通过有序的重新启动和断电而持续存在。意外的硬断电可能会导致写入丢失。
因此,这是一个糟糕的备份替代品 - 您仍然应该使用适合您的任何方法进行备份。
| 归档时间: |
|
| 查看次数: |
2263 次 |
| 最近记录: |