Introduction

Duplicacy是一个跨平台的备份工具,提供了许多功能-包括增量备份,并发备份和客户端加密-旨在简化将数据备份到云的过程。 CLI(命令行界面)Linux版本可供个人免费使用,但对于商业用户需要付费许可证。此外,Duplicacy可用于具有图形界面的MacOS和Windows,并且此版本要求个人和商业用户都支付许可证费用。

基于无锁重复数据删除的理念,Duplicacy旨在安全地管理对各种云存储服务的备份。当Duplicacy客户端创建并存储新块时,其他使用相同存储桶的客户端可以看到该块已经存在,因此不会再次上传。这允许单独的客户端共享和备份相同的数据,而无需进行任何额外的跟踪备份工作。

本教程概述了如何安装CLI版本的Duplicacy,并使用它来管理DigitalOcean Space的典型数据备份过程。我们还将演示如何将共享存储库从多个Droplet备份到同一Space,以及如何将快照备份到多个Space以提高数据安全性。

先决条件

要继续学习本教程,您将需要:

  • 使用我们的初始服务器设置指南配置了两个Ubuntu 16.04 Droplet。您可以随意命名服务器,但为了清楚起见,在本教程中,它们将分别称为server-01和server-02。
  • 两个DigitalOcean空间。有关如何启动和运行它们的说明,请参见我们的DigitalOcean Spaces简介。
  • 您的空间的访问密钥和秘密密钥。要生成这些,请访问DigitalOcean控制面板中的API页面。

具备这些先决条件后,即可开始安装Duplicacy。

安装重复性

可以使用wget从Duplicacy GitHub存储库下载最新版本的Duplicacy CLI版本(个人用户无需许可证)。

在server-01和server-02上运行以下命令,以将Duplicacy下载到每个服务器上(用最新版本的下载链接代替):

  • sudo wget -O /opt/duplicacy https://github.com/gilbertchen/duplicacy/releases/download/v2.0.10/duplicacy_linux_x64_2.0.10

接下来,在下载位置和/ usr / local / bin中的新目录之间创建一个符号链接:

  • sudo ln -s /opt/duplicacy /usr/local/bin/duplicacy

最后,使重复性可执行:

  • sudo chmod 0755 /opt/duplicacy

现在应该在每个Droplet上都安装Duplicacy,并且现在可以对其进行配置以使用您的Space。

初始化存储库并配置重复性

重复性从目录级别备份数据,因此在开始将文件上传到Space之前,它必须与两个Droplet上的特定目录或存储库关联。为此,您需要创建一个项目存储库,并使用Duplicacy的init命令对其进行初始化。

init命令接受以下语法:

duplicacy init repository_id s3://region@endpoint/space_name
  • repository_id:这是Duplicacy用来区分不同存储库的标签。如果您打算从多个来源备份同一存储库(如本教程的下一步所示),则两个Droplet上的存储库ID应该相同。
  • region:区域是Droplet所在区域的名称。
  • 端点:端点是服务器端Web API使用的静态位置,用于指定在何处找到某些资源。对于DigitalOcean Spaces,端点将是.digitaloceanspaces.com后跟的区域,如nyc3 .digitaloceanspaces.com中一样。您空间的端点名称也可以直接从“设置”标签下的空间控制面板复制。
  • space_name:这是在创建空间时指定的空间名称。请注意,这不是您的Space的URL。如果您的Space的网址为https:// example_space .nyc3.digitaloceanspaces.com,则其名称仅为example_space。

如果您希望备份进入您空间中的特定文件夹,请在运行init命令时在空间名称之后添加该文件夹的名称。这样做时,请记住在文件夹名称后加上斜杠:

  • duplicacy init repository_id s3://region@endpoint/space_name/folder_name/

一旦掌握了这些详细信息,就可以使用mkdir命令在每个Droplet上创建一个存储库目录。之后,使用cd导航到新的存储库:

  • mkdir project-repository
  • cd project-repository/

使用project-repository /作为工作目录,在server-01上运行以下init命令。确保用您自己的详细信息替换突出显示的值:

  • duplicacy init project_01 s3://nyc3@nyc3.digitaloceanspaces.com/example_space

值得注意的是,您可以选择通过在init命令中使用-e选项来启用Duplicacy加密,如下所示:

启用加密后,每次使用Duplicacy与Space交互时,Duplicacy都会提示您输入加密密码。

运行init命令后,Duplicacy将提示您输入访问密钥和秘密密钥,这些密钥可以从“控制面板”的“ API”页面复制过来。

Output
Enter S3 Access Key ID:ExampleAccessKeyGBBI Enter S3 Secret Access Key:ExampleSecretKeyEC1wnP2YiHobVcSBaZvLoFXXlnA

它将输出以下内容:

Output
/home/sammy/project-repository will be backed up to s3://nyc3@nyc3.digitaloceanspaces.com/example_space with id project_01

当您运行init命令时,它将在您的存储库中创建一个名为.duplicacy /的目录,该目录中包含一个名为preferences的文件。该文件包含有关您的空间以及您指定的所有加密或存储选项的信息。如果以后决定更改Duplicacy配置,则可以直接编辑首选项文件或将其删除。下次您在该存储库中运行init命令时,将重新创建该文件。

现在在第二个Droplet上重复init命令:

  • duplicacy init project_01 s3://nyc3@nyc3.digitaloceanspaces.com/example_space

再次添加访问密钥后,您将看到与第一个Droplet稍有不同的输出:

Output
The storage 's3://nyc3@nyc3.digitaloceanspaces.com/example_space' has already been initialized Compression level: 100 Average chunk size: 4194304 Maximum chunk size: 16777216 Minimum chunk size: 1048576 Chunk seed: 6475706c6963616379 /home/sammy/project-repository will be backed up to s3://nyc3@nyc3.digitaloceanspaces.com/example_space with id project_01

这两个服务器的存储库现在都已初始化,但是您可能还需要执行一步来配置Duplicacy。按照目前的情况,每次您备份数据时,Duplicacy都会提示您输入访问密钥和秘密密钥,这将很快变得乏味。为避免这种情况,您可以使用Duplicacy的set命令将您的Space凭据写入Duplicacy的首选项文件。在每台服务器上运行以下命令,以使Duplicacy分别保存您的Access和Secret密钥:

  • duplicacy set -key s3_id -value ExampleAccessKeyGBBI
  • duplicacy set -key s3_secret -value ExampleSecretKeyEC1wnP2YiHobVcSBaZvLoFXXlnA

现在,您可以使用Duplicacy将每个Droplet的存储库备份到您的一个空间了!

从多个来源备份一个存储库

分布式团队可以从不引人注目的云备份解决方案中受益,该解决方案可以防止文件冲突和数据丢失。通过复制整个存储库的快照并将其通过单个命令上传到Space,Duplicacy简化了备份,同时避免了多台计算机之间的文件冲突。

要测试Duplicacy的备份功能,请使用touch用几个虚拟文件填充每个Droplet上的项目存储库:

  • touch /project-repository/file-1.txt
  • touch /project-repository/file-2.txt

接下来,在server-01上,使用Duplicacy的backup命令创建存储库的快照并将其上传到您的Space。由于您仅使用一个存储位置启动了存储库,因此无需指定其他任何选项来备份文件:

  • duplicacy backup

结果输出应如下所示:

Output
No previous backup found Indexing /home/mark/project-repository Listing all chunks Packed file-1.txt (0) Packed file-2.txt (0) Backup for /home/sammy/project-repository at revision 1 completed

现在尝试从server-02备份您的存储库:

  • duplicacy backup
Output
Last backup at revision 1 found Indexing /home/sammy/project-repository Backup for /home/sammy/project-repository at revision 2 completed

您会注意到,由于server-01和server-02上的存储库相同,因此Duplicacy不会像在第一个Droplet上运行backup命令时那样打包任何文件。要查看备份略有不同的快照时会发生什么,请在server-02上打开一个虚拟文件,并在其中添加一些文本:

  • nano file-1.txt
project-repository/file-1.txt
The quick brown fox jumped over the lazy dogs.

通过输入CTRL-X,Y,然后按ENTER保存并关闭文件,然后再次运行备份命令:

  • duplicacy backup
Output
Storage set to s3://[email protected]/example_space Last backup at revision 2 found Indexing /home/sammy/project-repository Packed file-1.txt (45) Backup for /home/sammy/project-repository at revision 3 completed

由于对存储库中的文件之一进行了新更改,因此Duplicacy打包了该文件并将其上传为修订版3的一部分。

通过使用-r选项并指定修订号,可以使用restore命令将存储库还原到先前的修订。请注意,除非指定了-overwrite选项,否则它将不会覆盖现有文件,如下所示:

  • duplicacy restore -overwrite -r 2

运行restore命令后,可以通过检查文件1.txt是否包含以下内容来确认Duplicacy确实重写了文件-1.txt:

  • cat file-1.txt

如果此命令没有产生任何输出,则file-1.txt返回为空文件,并且您已成功将存储库回滚到先前的版本。

备份到多个存储位置

多年来,将备份存储在多个异地位置已成为常见的数据安全实践。但是,将文件备份到多个目标的过程可能很繁琐,并且会导致生产率下降。但是,有许多第三方备份工具可以为将数据备份到云中的多个位置提供快速解决方案。

要在Duplicacy中演示此功能,请将第二个Space添加到server-01上的存储库。您将无法通过再次运行init命令来执行此操作,因为该存储库已经由Duplicacy启动并且已与您的第一个Space关联。对于这些情况,您将需要使用add命令将已经初始化的存储库连接到另一个存储桶。

重复项的add命令使用以下语法:

  • duplicacy add storage_id repository_id s3://region@endpoint/example_space_02

这看起来与先前使用的init命令非常相似,主要区别在于它需要您为新的存储位置指定一个ID。当您运行上面的init命令时,Duplicacy将默认ID分配给您的第一个存储桶,因为这是它将发送备份的默认位置。您为第二个Space提供的存储名称可以是您想要的任何名称,但是它可能具有描述性,因此请记住它代表哪个Space可能会有所帮助。

考虑到这些信息,将第二个Space添加到存储库:

  • duplicacy add space_02 project_01 s3://nyc3@nyc3.digitaloceanspaces.com/example_space_02

现在,您都准备将存储库备份到第二个Space。建议您首先将存储库备份到默认存储位置,然后使用Duplicacy的copy命令将相同的备份复制到第二个存储位置,以实现此目的:

  • duplicacy backup
  • duplicacy copy -from default -to space_02

这会将每个块和快照从第一个空间复制到第二个空间。请务必注意,复制命令是非破坏性的,不会覆盖任何现有文件。

结论

与DigitalOcean Spaces结合使用时,Duplicacy允许用户灵活地管理云备份。如果需要从多台计算机备份同一存储库,或者需要将一个存储库备份到云中的多个位置,则Duplicacy可以成为备份解决方案不可或缺的一部分。

如果您想了解有关如何使用Duplicacy的更多信息,可以在GitHub上查看项目Wiki。另外,如果您想全面了解备份策略,请参阅我们的指南,如何为您的VPS选择有效的备份策略,或在对象存储服务与块存储服务之间进行比较。