你好,我最近遇到一个有趣的问题:设置存储来备份大量块设备。
每周我们都会备份云中的所有虚拟机,因此我们需要能够维护数千个备份,并尽可能快速高效地进行备份。
不幸的是,标准配置 RAID5, RAID6 在这种情况下,我们将不被允许这样做,因为像我们这样大的磁盘上的恢复过程将非常漫长,而且很可能永远不会结束。
让我们看看有哪些替代方案:
服务器可用 富士通Primergy RX300 S7 带处理器 英特尔至强 CPU E5-2650L 0 @ 1.80GHz, 九根 RAM 三星 DDR3-1333 8Gb PC3L-10600R ECC 注册 (M393B1K70DH0-YH9), 磁盘架 美超微超级机箱 847E26-RJBOD1,通过连接 双 LSI SAS2X36 扩展器 和45张光盘 希捷 ST6000NM0115-1YZ110 上 6TB 每个。
在我们做出任何决定之前,我们首先需要正确测试一切。
为此,我准备并测试了各种配置。 为此,我使用了 minio,它充当 S3 后端,并以不同的模式和不同数量的目标启动它。
基本上,minio 案例在纠删码与软件 raid 中进行了测试,具有相同数量的磁盘和磁盘奇偶校验,这些是:RAID6、RAIDZ2 和 DRAID2。
供参考:当您仅启动一个目标的 minio 时,minio 工作在 S3 网关模式,以 S3 存储的形式提供本地文件系统。 如果您启动指定多个目标的 minio,擦除编码模式将自动打开,这将在目标之间传播数据,同时提供容错能力。
默认情况下,minio 将目标分为 16 个磁盘组,每组有 2 个奇偶校验。 那些。 两个磁盘可以同时发生故障而不会丢失数据。
为了测试性能,我使用了 16 个 6TB 的磁盘,并在上面写入了 1MB 大小的小对象,这最准确地描述了我们未来的负载,因为所有现代备份工具都将数据分成几兆字节的块并以这种方式写入。
为了进行基准测试,我们使用了 s3bench 实用程序,该实用程序在远程服务器上启动,并通过数百个线程将数以万计的此类对象发送到 minio。 之后我尝试以同样的方式要求他们回来。
基准测试结果如下表所示:
正如我们所看到的,minio 在其自己的纠删码模式下的写入性能明显比在相同配置的软件 RAID6、RAIDZ2 和 DRAID2 上运行的 minio 差。
单独的我
在第一批测试中,Mdadm 表现出了相对于 ZFS 的优越性,但后来
xattr=sa atime=off recordsize=1M
之后,ZFS 的测试变得更好了。
您还可以注意到,与 RAIDZ 相比,DRAID 并没有提供太多性能增益,但理论上它应该更安全。
在最后两次测试中,我还尝试将元数据(特殊)和ZIL(日志)从SSD传输到镜像。 但是删除元数据并没有给记录速度带来太大的提升,当删除 ZIL 时,我的
最后,我决定使用 DRAID,尽管它处于测试阶段,但它是我们案例中最快、最高效的存储解决方案。
我在具有三个组和两个分布式备件的配置中创建了一个简单的 DRAID2:
# zpool status data
pool: data
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
data ONLINE 0 0 0
draid2:3g:2s-0 ONLINE 0 0 0
sdy ONLINE 0 0 0
sdam ONLINE 0 0 0
sdf ONLINE 0 0 0
sdau ONLINE 0 0 0
sdab ONLINE 0 0 0
sdo ONLINE 0 0 0
sdw ONLINE 0 0 0
sdak ONLINE 0 0 0
sdd ONLINE 0 0 0
sdas ONLINE 0 0 0
sdm ONLINE 0 0 0
sdu ONLINE 0 0 0
sdai ONLINE 0 0 0
sdaq ONLINE 0 0 0
sdk ONLINE 0 0 0
sds ONLINE 0 0 0
sdag ONLINE 0 0 0
sdi ONLINE 0 0 0
sdq ONLINE 0 0 0
sdae ONLINE 0 0 0
sdz ONLINE 0 0 0
sdan ONLINE 0 0 0
sdg ONLINE 0 0 0
sdac ONLINE 0 0 0
sdx ONLINE 0 0 0
sdal ONLINE 0 0 0
sde ONLINE 0 0 0
sdat ONLINE 0 0 0
sdaa ONLINE 0 0 0
sdn ONLINE 0 0 0
sdv ONLINE 0 0 0
sdaj ONLINE 0 0 0
sdc ONLINE 0 0 0
sdar ONLINE 0 0 0
sdl ONLINE 0 0 0
sdt ONLINE 0 0 0
sdah ONLINE 0 0 0
sdap ONLINE 0 0 0
sdj ONLINE 0 0 0
sdr ONLINE 0 0 0
sdaf ONLINE 0 0 0
sdao ONLINE 0 0 0
sdh ONLINE 0 0 0
sdp ONLINE 0 0 0
sdad ONLINE 0 0 0
spares
s0-draid2:3g:2s-0 AVAIL
s1-draid2:3g:2s-0 AVAIL
errors: No known data errors
好了,我们已经整理好了存储,现在我们来谈谈要备份的内容。 在这里我想立即谈谈我尝试过的三个解决方案,它们是:
--special
,缺点之一:创建备份时,存储库被完全阻塞,因此建议为每个虚拟机创建单独的存储库,原则上这不是问题,幸运的是它们创建起来非常容易。
-
首先,我尝试在所有虚拟机(如 Benji)的通用存储库模式下使用它,它甚至运行得很好,但恢复操作花了很长时间,因为...... 每次恢复之前,restic 都会尝试读取所有备份的元数据。 这个问题很容易解决,就像 borg 一样,通过为每个虚拟机创建一个单独的存储库。 事实证明,这种方法对于管理备份也非常有效。 单独的存储库可以有单独的密码来访问数据,而且我们也不必担心全局存储库可能会以某种方式损坏。 您可以像在 borg 备份中一样轻松地生成新存储库。
无论如何,重复数据删除仅相对于先前版本的备份执行;先前的备份由指定备份的路径决定,因此,如果您将不同的对象从 stdin 备份到公共存储库,请不要忘记指定选项
--stdin-filename
,或者每次都明确指定选项--parent
.
-
其次,由于其并行性质,恢复到标准输出比恢复到文件系统花费的时间要长得多。 将来,我们计划增加对块设备备份的更紧密支持。
-
三、目前推荐使用
来自master的版本 , 因为0.9.6 版本存在大文件恢复时间较长的 bug。
为了测试备份的有效性以及从备份写入/恢复的速度,我创建了一个单独的存储库并尝试备份虚拟机的小映像(21 GB)。 在不更改原始数据的情况下执行了两次备份,使用列出的每个解决方案来检查复制重复数据删除数据的速度有多快/有多慢。
我们可以看到,Borg Backup 具有最佳的初始备份效率,但在写入和恢复速度方面均较差。
Restic 比 Benji Backup 更快,但恢复到标准输出需要更长的时间,而且不幸的是,它还不知道如何直接写入块设备。
权衡了所有的利弊后,我决定 静止的 с 休息服务器 作为最方便和最有前途的备份解决方案。
在此截屏视频中,您可以看到在同时运行的多个备份操作期间如何完全利用 10 GB 通道。 值得注意的是,磁盘回收率不会超过 30%。
我对收到的解决方案非常满意!
来源: habr.com