AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 842531
Accepted
Greg
Greg
Asked: 2017-04-05 07:59:11 +0800 CST2017-04-05 07:59:11 +0800 CST 2017-04-05 07:59:11 +0800 CST

如何执行 zfs 池的增量/连续备份?

  • 772

如何在异地连续/增量备份 zfs 池?

我认识到send/receiveover ssh 是一种方法,但是它需要手动管理快照。

我发现了一些工具,但大多数不再受支持。

一个看起来很有前途的工具是https://github.com/jimsalterjrs/sanoid但是我担心非广为人知的工具可能弊大于利,因为它可能会损坏/删除数据。

如何执行连续/增量 zfs 备份?

backup
  • 3 3 个回答
  • 40922 Views

3 个回答

  • Voted
  1. Best Answer
    ewwhite
    2017-04-06T04:42:11+08:002017-04-06T04:42:11+08:00

    ZFS是一个令人难以置信的文件系统,可以解决我的许多本地和共享数据存储需求。

    虽然,我确实喜欢尽可能使用集群 ZFS的想法,但有时它不切实际,或者我需要存储节点在地理上的一些分离。

    我的用例之一是 Linux 应用服务器上的高性能复制存储。例如,我支持一个传统软件产品,该产品受益于低延迟 NVMe SSD 驱动器的数据。该应用程序有一个应用程序级镜像选项,可以复制到辅助服务器,但它通常不准确,并且是 10 分钟的RPO。

    我已经通过拥有一个可以是本地、远程或两者的辅助服务器(也在类似或不同的硬件上运行 ZFS)解决了这个问题。通过结合下面详述的三个实用程序,我精心设计了一个复制解决方案,它为我提供了连续复制、深度快照保留和灵活的故障转移选项。

    zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot

    只是启用定期 ZFS 文件系统级别快照的便捷工具。我通常在生产量上按照以下时间表运行:

    # /etc/cron.d/zfs-auto-snapshot
    
    PATH="/usr/bin:/bin:/usr/sbin:/sbin"
    
    */5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 //
    00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 //
    59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 //
    59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 //
    00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 //
    

    Syncoid (Sanoid) - https://github.com/jimsalterjrs/sanoid

    该程序可以运行 ZFS 文件系统的临时快照/复制到次要目标。我只使用产品的同步部分。

    假设server1和server2 ,从server2运行简单命令以从server1提取数据:

    #!/bin/bash
    
    /usr/local/bin/syncoid root@server1:vol1/data vol2/data
    
    exit $?
    

    监控- https://mmonit.com/monit/

    Monit 是一个极其灵活的作业调度器和执行管理器。默认情况下,它以 30 秒的间隔工作,但我修改配置以使用 15 秒的基本时间周期。

    每 15 秒(1 个周期)运行上述复制脚本的示例配置

    check program storagesync with path /usr/local/bin/run_storagesync.sh
            every 1 cycles
            if status != 0 then alert
    

    这很容易通过配置管理实现自动化和添加。通过在 Monit 中包装快照/复制的执行,您可以获得集中状态、作业控制和警报(电子邮件、SNMP、自定义脚本)。


    结果是我的服务器具有多个月的快照以及许多回滚点和保留点:https ://pastebin.com/zuNzgi0G - 另外,一个连续滚动的 15 秒原子副本:

    # monit status

    Program 'storagesync'
      status                            Status ok
      monitoring status                 Monitored
      last started                      Wed, 05 Apr 2017 05:37:59
      last exit value                   0
      data collected                    Wed, 05 Apr 2017 05:37:59
    .
    .
    .
    Program 'storagesync'
      status                            Status ok
      monitoring status                 Monitored
      last started                      Wed, 05 Apr 2017 05:38:59
      last exit value                   0
      data collected                    Wed, 05 Apr 2017 05:38:59
    
    • 50
  2. user121391
    2017-04-05T23:00:35+08:002017-04-05T23:00:35+08:00

    你有两种不同的方法可以做到这一点:

    1. 过去几十年使用的传统的、与文件系统无关的方式,使用类似rsyncor的工具Bacula。在那里,您已经测试并且(希望)稳定的大型软件,可以针对大型部署进行定制,即使您从 ZFS 切换到该软件也可以使用
    2. 利用 ZFS 的工具之一send/recv。这可以是您自己的解决方案、来自 Github 等人的各种脚本或扩展脚本,或者是功能更丰富的工具,如 Sanoid 或ZnapZend(带有 mbuffer 支持和保留计划的发送/接收)。在这种情况下,您很可能不会找到任何大型的“企业”(消极意义上的)解决方案,而是只执行单一任务并且可以与其他工具组合以满足您的特定设置的工具。

    一般来说,我只会信任源代码可用的工具,并且我会尽可能保持它的简单性。如果使用send/recv,则无需过多管理,只需在远程端快照n传输和建立成功后,删除本地端快照n-1即可。

    您可以按照自己喜欢的方式拆分传输,它甚至可以是异步的(不必立即接收快照),如果您只是遵守铁规则,即您只能发送本地当前/新快照和本地先前快照之间的差异,并且本地先前的快照是远程端的最新快照(直到备份完成并重置所有内容)。

    现在我想到了,您可能可以在状态机中对其进行编码,然后确保不会出现任何意外情况。

    • 8
  3. Psy0rz
    2021-09-18T23:03:19+08:002021-09-18T23:03:19+08:00

    还要检查 ZFS 自动备份。它易于使用且非常强大。与提到的其他解决方案相比,它具有更多功能:https ://github.com/psy0rz/zfs_autobackup

    • 0

相关问题

  • 总大小(磁盘)与总大小(媒体)

  • 社区对备份解决方案的意见

  • 无法读取不同 LTO-3 驱动器上的 LTO-3 磁带

  • 使用 TSM 备份时跳过硬链接

  • 使用 rsync 维护名称更改的目录的副本

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve