介绍
Duplicacy是一种跨平台的备份工具,它提供了许多功能 - 包括增量备份,并发备份和客户端加密 - 旨在简化向云备份数据的过程。 CLI(命令行界面)Linux版本可供个人使用,但需要商业用户的付费许可证。 此外,Duplicacy适用于带有图形界面的MacOS和Windows,并且此版本要求个人和商业用户支付许可证费用。
基于无锁重复数据删除的想法,Duplicacy旨在安全地管理备份到各种云存储服务。 当副本客户端创建并存储新块时,使用相同存储桶的其他客户端可以看到该块已经存在,因此不会再次上载。 这允许单独的客户端共享和备份相同的数据,而不需要额外的努力来跟踪备份。
本教程提供了如何安装Duplicacy CLI版本的高级概述,并使用它来管理DigitalOcean Space的典型数据备份过程。 我们还将演示如何将共享存储库从多个Droplet备份到同一空间,以及如何将快照备份到多个空间以提高数据安全性。
先决条件
要按照本教程进行操作,您需要:
- 使用我们的初始服务器设置指南配置了两个Ubuntu 16.04 Droplet 。 你可以随意命名你的服务器,但为了保持清楚,在本教程中它们将被称为server-01和server-02 。
- 两个DigitalOcean空间 。 请参阅我们的了解如何启动和运行这些程序。
- 访问键和空间的密钥。 要生成这些信息,请访问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
最后,使duplicacy
可执行文件:
sudo chmod 0755 /opt/duplicacy
现在应该在每个Droplet上安装副本,现在可以将其配置为使用Space。
初始化您的存储库并配置复制
Duplicacy从目录级别备份数据,因此在开始向Space上传文件之前,必须将其与两个Droplet上的特定目录或存储库相关联。 为此,您需要创建一个项目存储库并使用Duplicacy的init
命令对其进行init
。
init
命令接受以下语法:
duplicacy init repository_id s3://region@endpoint/space_name
-
repository_id
:这是Duplicacy用来区分不同存储库的标签。 如果您计划从多个来源备份相同的存储库(如本教程下一步所述),则两个Droplets上的存储库ID应该相同。 -
region
:该region
是您的Droplet所在region
的名称。 -
endpoint
:端点是服务器端Web API用于指定找到特定资源的位置的静态位置。 对于DigitalOcean Spaces,终端将是.digitaloceanspaces.com
后面的区域,如nyc3 .digitaloceanspaces.com
。 您的空间的端点名称也可以直接从“设置”选项卡下的空间控制面板复制。 -
space_name
:这是您创建时指定的空间的名称。 请注意,这不是您的Space的网址。 如果你的空间的URL是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 init -e project_01 s3://nyc3@nyc3.digitaloceanspaces.com/example_space
启用加密时,每次您使用它与您的空间进行交互时,Duplicacy都会提示您输入加密密码。
一旦init
命令运行,Duplicacy将提示您输入您的Access和Secret密钥,这些密钥可以从控制面板的API页面复制。
OutputEnter 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配置进行更改,则可以直接编辑preferences
文件或将其删除。 下次在该存储库中运行init
命令时,该文件将被重新创建。
现在重复第二滴的init
命令:
duplicacy init project_01 s3://nyc3@nyc3.digitaloceanspaces.com/example_space
再次添加Access键后,您将看到与第一滴相比稍微不同的输出:
OutputThe 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的set
命令将Space的凭据写入Duplicacy的preferences
文件。 在每台服务器上运行以下命令,使Duplicacy分别保存您的Access和Secret密钥:
duplicacy set -key s3_id -value ExampleAccessKeyGBBI
duplicacy set -key s3_secret -value ExampleSecretKeyEC1wnP2YiHobVcSBaZvLoFXXlnA
您现在准备使用Duplicacy将每个Droplets的存储库备份到您的空间之一!
从多个源备份一个存储库
分布式团队可以受益于不引人注意的云备份解决方案,以防止文件冲突和数据丢失。 通过拍摄整个存储库的快照并使用单个命令将其上传到空间,Duplicacy简化了备份,同时避免了跨多台计算机的文件冲突。
要测试Duplicacy的备份功能,请使用touch
通过几个虚拟文件在每个Droplet上填充project-repository
:
touch /project-repository/file-1.txt
touch /project-repository/file-2.txt
接下来,在server-01上 ,使用Duplicacy的backup
命令为您的存储库创建快照并将其上传到您的空间。 由于您仅使用一个存储位置启动了存储库,因此不需要指定任何其他选项来备份文件:
duplicacy backup
结果输出应该如下所示:
OutputNo 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
OutputLast backup at revision 1 found
Indexing /home/sammy/project-repository
Backup for /home/sammy/project-repository at revision 2 completed
您会注意到,因为server-01和server-02上的存储库是相同的,所以在第一个Droplet上运行backup
命令时,Duplicacy没有打包任何文件。 要查看备份稍微不同的快照时会发生什么情况,请打开server-02上的一个虚拟文件并添加一些文本:
nano file-1.txt
The quick brown fox jumped over the lazy dogs.
输入CTRL - X
, Y
,然后按ENTER
保存并关闭文件,然后再次运行backup
命令:
duplicacy backup
OutputStorage set to s3://nyc3@nyc3.digitaloceanspaces.com/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的一部分进行上传。
您可以使用restore
命令通过使用-r
选项并指定版本号来将存储库恢复到以前的版本。 请注意,除非指定了-overwrite
选项,否则它不会覆盖现有文件,如下所示:
duplicacy restore -overwrite -r 2
运行restore
命令后,可以确认Duplicacy确实通过检查是否有任何内容来重写file-1.txt
:
cat file-1.txt
如果这个命令没有产生任何输出,那么file-1.txt
就回到了一个空文件,并且你已经成功地将你的版本库回滚到了以前的版本。
备份到多个存储位置
在多个非现场位置存储备份已成为多年来的常见数据安全实践 。 但是,将文件备份到多个目标的过程可能会很乏味,并会导致生产力下降。 不过,有许多第三方备份工具可以提供快速解决方案,将数据备份到云中的多个位置。
为了在Duplicacy中演示此功能,请将第二个Space添加到server-01上的存储库中。 您将无法再次运行init
命令,因为该存储库已由Duplicacy启动并与您的第一个空间关联。 对于这些场景,您需要使用add
命令将已经初始化的存储库连接到另一个存储桶。
Duplicacy的add
命令使用以下语法:
duplicacy add storage_id repository_id s3://region@endpoint/example_space_02
这看起来与之前使用的init
命令大致相似,主要区别在于它需要您为新的存储位置指定一个ID。 当您运行上面的init
命令时,Duplicacy会将default
ID分配给您的第一个存储桶,因为这是它将发送备份的默认位置。 您为第二个空间提供的存储名称可以是任何你想要的,但它可能是有帮助的,因为它是描述性的,所以你可以记住它代表的空间。
记住这些信息后,将第二个空间添加到存储库中:
duplicacy add space_02 project_01 s3://nyc3@nyc3.digitaloceanspaces.com/example_space_02
你现在都准备将你的存储库备份到你的第二个空间。 建议您首先将存储库备份到默认存储位置,然后使用Duplicacy的copy
命令将相同的备份复制到第二个存储位置:
duplicacy backup
duplicacy copy -from default -to space_02
这会将每个块和快照从第一个空间复制到第二个空间。 注意copy
命令是非破坏性的,它不会覆盖任何现有文件。
结论
与DigitalOcean Spaces结合使用时,Duplicacy可让用户灵活管理云备份。 如果您需要从多台计算机备份相同的存储库,或者需要将一个存储库备份到云中的多个位置,则Duplicacy可能会成为备份解决方案的组成部分。
如果您有兴趣了解如何使用Duplicacy的更多信息,可以在GitHub上查看项目wiki 。 或者,如果您想了解有关备份策略的更多信息,请参阅我们的关于如何为您的VPS选择有效备份策略的指南或我们在对象存储与块存储服务之间的比较。