![故障安全 RAM 驱动器解决方案](https://linux22.com/image/796466/%E6%95%85%E9%9A%9C%E5%AE%89%E5%85%A8%20RAM%20%E9%A9%B1%E5%8A%A8%E5%99%A8%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%20.png)
我正在寻找一个生产解决方案来创建一个可以与 HDD 安全同步的 RAM 驱动器。
我有一款 I/O 负载很大的定制软件(这是某种专有的面向文档的数据库),我需要大幅加快它的速度。我无法修改或删除软件本身,因此必须进行水平或垂直扩展。该软件不支持水平侦察,因此我首先考虑垂直扩展。
主要想法很简单 - 我们购买大量 RAM(96GB)并将所有内容放入 RAM 驱动器。但它需要具有故障安全性,服务器重启时丢失任何数据都是不可能的。所以我正在寻找能够保持 RAM 驱动器和 HDD 之间透明同步的解决方案。
像通过 bash 脚本复制文件这样的肮脏的解决方案不是一种选择,需要更可靠的方法。
从理论上看,我认为某种分布式 FS这里可以以奇怪的方式使用 - 同步同一台机器上的两个分区。但我怀疑这在实践中是否可行,而且从未尝试过。
那么,对于与 HDD 透明同步的 RAM 驱动器,有什么现成的解决方案吗?
数据更新:
- 我需要在 RAM 中保存的数据量估计约为 50GB。
- 服务器是专用的 HP DL320、8 CPU、16GB RAM(最高 96GB)。
- I/O 配置文件类似于数据库应用程序 - 大量随机访问读取,较少写入。
答案1
我询问了您可用的硬件,因为可以获得低延迟和高 IOPS 的设备来克服磁盘的限制。
但是,您没有提供工作数据集大小的估计值。这有很大的不同。我们目前没有足够的信息。应用程序的 I/O 配置文件是什么?写偏向?读偏向?当前的存储设置是什么?
一个通用的建议是使用 SSD 驱动器阵列。另一个建议是使用 PCIe 加速器,例如融合IO驾驶。
甚至可能考虑DRBD在异步模式下...
一个更深奥的解决方案是使用具有一定程度分层的共享存储,可以将常用数据保存在 RAM 或 SSD 中。ZFS 文件系统以及它的使用吉尔写入加速和L2ARC读取缓存就是一个很好的例子。
更深奥的解决方案是基于软件的缓存方法,例如最终持久化 RAM 磁盘(EPRD)。这会在 FUSE 文件系统中创建一个磁盘支持的 RAM 磁盘,这对于加速应用程序的 I/O 来说是一个不错的选择。这也许就是您想要的……
来自配置文档:
You can however also create a ramdisk that will have it's
changes flushed to disk every N seconds and instead of keeping
everything in ram it only allocated 512M for caching.
./eprd_setup -f /data/saverimg -s 10G -m 3 -c -p512M
In this example the data is flushed to disk every 3 seconds.
编辑:
如果这些HP ProLiant DL320系统,我假设它们是 G6 型号。您是否有 Smart Array P410 控制器和电池支持或闪存支持的缓存是否已安装?如果没有,这是您在进行 RAM 磁盘设置之前应采取的第一步。这很重要!
答案2
您不需要拥有与硬盘同步的实际 RAM 磁盘 - 您需要的是带有电池备份和 NV 缓存的基于 RAM 的 PCIe 卡。基本上就是 FusionIO 卡。
答案3
你不能今天就这么做吧,你想要“故障安全”,但又想使用本质上不安全的 RAM,这就是制造 NVRAM 的原因——但成本很高。我使用 FusionIO,当然它并不便宜,但存储市场的这一部分正在迅速变化,价格也在下跌,看看其他一些销售基于 PCIe 的闪存的供应商,你会发现产品不太成熟,但价格要便宜得多。
哦,再聪明的 ramdrive 同步也无法完美地发挥作用,你将要某个时候会出现腐败。