ZFS镜像池的有效异地备份策略是什么?


9

我使用由两个镜像磁盘组成的ZFS池。为了进行异地备份,我又购买了两个磁盘。

我最初的计划是通过将第三个磁盘连接到镜像,等待ZFS重新镀银,然后分离驱动器并将其移到异地来创建异地备份。这样做足够好,但是让我感到惊讶的是,每次附加磁盘时,它似乎都执行了完全重新同步(我读过,并且可能会误解为每次附加都会导致增量重新同步或增量重新同步)。这导致备份花费的时间比可接受的时间长。

我的需求是拥有我的zpool及其所有快照的异地副本,我可以每天对其进行轮换。这意味着重新同步最多需要花费24小时-目前已经很接近了,但是我们增加池的计划将使它超出该时间范围。

如何保留不需要完全重新同步操作的异地备份?我是否应该在备份驱动器上使用其他文件系统(例如,导出映像,而不是使其成为ZFS池的一部分)?我是否应该将备份放在单独的池中,并在创建新快照时向其发送新快照?


我当前的策略是多池方法,通过zfs发送和接收来保持快照同步。很想听听您是否发现了反对这个或更佳选择的论点。
so12311 2014年

Answers:


3

经过大量的修改和实验,我找到了一个解决方案,尽管折衷相当大。

首先,我必须排除的选项:

  • 由于成本原因,无法选择拥有镜像池的第二台异地ZFS服务器。如果是一种选择,那么到目前为止,这将是最好的方法,它利用ZFS发送/接收将快照传送到远程池。

  • 有第二个现场ZFS镜像池,我可以从中删除磁盘以带回家。这比第一个选项更可行,但我需要第二个池始终在现场拥有两个磁盘(或在单个现场磁盘上使用两个数据副本)。目前,我有四个磁盘,而服务器中没有足够的空间可容纳第五个磁盘。这将是一个公平的方法,但仍不理想。

  • 使用ZFS附加和分离可将备份磁盘旋转进出镜像池。这很好用,但是每次添加磁盘时都必须执行完全重新同步。这花费了无法接受的时间,所以我不能依靠它。

我的解决方案与使用attach和类似detach,但是它使用onlineoffline。与完全重新同步相比,这具有执行增量重新同步的优势,但是缺点是池始终报告DEGRADED状态(该池始终具有两个磁盘;旋转的异地磁盘offline在远程存储中重新标记并重新同步然后进入联机状态时会被标记当他们在现场时)。

因此,快速回顾一下我的设置:

我有一台ZFS服务器和四个相同的磁盘。ZFS设置为使用镜像池。四个磁盘中的两个是该池的永久成员。另外两个磁盘旋转;一个总是在异地存储中,另一个是池中的一部分,可以随时使用。

需要轮换备份时:

  • 我等待zfs scrub完成以合理地确保备份磁盘没有错误

  • zfs offline的磁盘将被带走。离线后,我hdparm -Y /dev/id将其旋转。一分钟后,我部分卸下了磁盘底座(刚好足以确保其断电),然后再等待一分钟,然后完全拉动驱动器以确保其停止旋转。磁盘装入防静电袋,然后放入保护盒,然后移到异地。

  • 我带来了另一个异地磁盘。它安装在热交换托盘中并旋转。我zfs online用来将磁盘还原到池中并启动部分重新同步以使其并发。

该系统保证在任何给定的时间我都有两个ONLINE镜像磁盘和一个OFFLINE远程磁盘(已清理)。第四个磁盘处于重新同步状态或处于联机状态,这样做的好处是,如果正在运行的驱动器发生故障,则该池可能仍与两个联机磁盘保持一致。

在过去的几周中,它一直运行良好,但是我仍然认为这是一种骇人听闻的方法。如果遇到任何重大问题,我都会跟进。


更新:使用此工具运行了几个月后,我发现在实际使用中,重新同步需要花费相同的时间进行分离/附加和脱机/在线。在我的测试中,我不认为自己正在运行清理,我的直觉是,如果驱动器离线进行清理,则需要完全重新启动。


这绝对不能只用三个设备而不是四个来工作吗?《Oracle Solaris ZFS管理指南》指出,“如果删除了镜像的所有组件 ”,镜像池就会出现故障(强调我的意思),这似乎暗示着并不一定要使用第四个驱动器。
肯尼·埃维特

1
对于三台设备,您是指两个磁盘始终位于池中,而一个磁盘偶尔位于非现场,或者一个磁盘始终位于池中,而另一个磁盘则在非现场旋转?如果使用第二种方法,则当只有一个完全在线的磁盘(第二个磁盘正在旋转或尚未完全重新同步)时,如果池遇到不良数据,我会期望数据丢失。我的两分钱是要始终确保您的镜像池具有两个全时在线磁盘。
STW 2015年

我的意思是您提到的第二种选择。使用该选项,只有一个磁盘处于联机状态时坏数据的可能性有多大?部分/增量重新同步应该相对较快,对吗?即使有坏数据,您是否也不能从第二个驱动器中恢复?还是从第三驱动器恢复,最坏的情况?[显然,在某些情况下无法恢复;但是,即使有四个驱动器也是如此。或实际上任何数字。]
肯尼·埃维特

我会坚持始终拥有两个联机镜像磁盘,而第三个和第四个磁盘用于轮换备份。每次在镜像中只有一个联机磁盘时,您就很容易受到攻击-即使采用我的方法,异地备份磁盘也可能会出现完整性问题,并且无法100%地恢复(理想情况下是可以随时将两个镜像磁盘置于异地,以便可以比较两者的完整性)。
STW 2015年

综上所述,ZFS就是要避免数据的单个副本(或至少具有奇偶校验,从而允许重建不良数据)。如果只有一个联机磁盘或一个备份数据副本,则存在丢失数据的风险。
STW'1

2

zfs为什么不将快照发送到远程ZFS计算机?我为此使用了一个简单的bash脚本:

#!/usr/local/bin/bash
# ZFS Snapshot BASH script by Shawn Westerhoff
# Updated 1/14/2014

### DATE VARIABLES
# D = Today's date
# D1 = Yesterday's date
# D# = Today less # days date
Y=$(date -v-1d '+%m-%d-%Y')
D=$(date +%m-%d-%Y)
D1=$(date -v-1d '+%m-%d-%Y')
D10=$(date -v-10d '+%m-%d-%Y')
D20=$(date -v-20d '+%m-%d-%Y')

# Step 1: Make the snapshots

for i in $( zfs list -H -o name ); do
    if [ $i == tier1 ]
    then echo "$i found, skipping"
    else
    zfs snapshot $i@$D
    fi
done

# Step 2: Send the snapshots to backup ZFS sever

    for i in $( zfs list -H -o name ); do
        zfs send -i $i@$D1 $i@$D | ssh -c arcfour root@10.10.10.10 zfs recv $i
    done

# Step 3: Destroy snapshots that are 20 days old

for i in $( zfs list -H -o name ); do
        if [ $i == tier1 ]
        then echo "$i found, skipping"
        else
        zfs destroy $i@$D20
        fi
done

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.