如何创建 ZFS-On-Linux 池复制(主 -> 备份)

如何创建 ZFS-On-Linux 池复制(主 -> 备份)
  • 我目前正在运行两个具有相同硬盘的相同服务器。
  • 两者在 sda 和 sdb (raidz) 上都有一个名为 /pool 的 zfs 池
  • 都运行 ubuntu linux 服务器
  • 两者都应该在原始工具集上运行(没有花哨的第三方备份包)。

我现在很难找到一个清晰的、一步一步的直接方法来创建从主备份到备份的自动备份。

我发现的所有内容要么是旧的(2010-2016),所以我不确定它们是否仍然是最新的,或者只是解释某些细节而不是整个过程,或者他们讨论额外的工具、包装器、脚本而不是使用默认 zfs 工具集的过程本身。

  • 这里的最佳实践是什么?
  • 我是否为此运行 cron 作业或者 zfs 是否可以自动执行备份?
  • 通过 ssh 还是 rsync 传输?
  • zfs 通过管道发送至 ssh/rsync?
  • 我想在本地网络上运行它,但以防万一我考虑扩展到异地,我是否可以通过互联网从一个专用服务器托管提供商到另一个专用服务器托管提供商执行相同的最佳实践,或者这是否需要完全不同的方法?

  • 假设我下来并通过专用接口直接在本地连接两台服务器而不通过 LAN,我可以使用非加密数据传输而不使用 ssh 来减少加密开销。最好的实用程序是什么?

答案1

简单的方法:只需使用syncoid并称工作已完成

更难/更长的路:你需要利用增量 zfs 发送/接收。由于它有多种操作模式,我认为无法用一个简洁的答案来全面介绍。假设您需要先进行完整的测试zfs send | zfs recv,然后进行常规的增量测试。我会指出Oracle 文档更多细节。

在这两种情况下,请确保将要同步的数据集放入适当的数据集中,而不是使用根数据集(即:将数据放入pool/data而不是直接放入pool)。

答案2

这是一个运行名为 mywin 的 kvm 节点的 opensvc 服务,它每小时将 zfs 数据集 data/mywin 从主节点 srv1 复制(zfs send|zfs accept)到辅助节点 srv2 上的 zfs 数据集 data/mywin:

root@srv1:~# om mywin print config
[DEFAULT]
env = PRD
nodes = srv1.acme.com srv2.acme.com
id = cd6e0bfa-4096-4249-899a-c8cd90a8979b

[sync#1]
src = data/{svcname}
dst = data/{svcname}
type = zfs
target = nodes
recursive = true
schedule = @60

[fs#1]
mnt_opt = rw,xattr,acl
mnt = /srv/{svcname}
dev = data/{svcname}
type = zfs

[container#0]
type = kvm
name = {svcname}
shared = true

调整您的环境并删除特定的数据集名称,然后整个池的复制应该没问题。

您可以使用命令手动触发复制om mywin sync nodes

PS:确保两个节点之间有相互的 root ssh 信任

相关内容