如何使用Restic和MinIO进行备份

每个系统都需要备份,因为有无数种方法可以丢失本地文件系统数据和配置。这种损失可能是毁灭性的------可能导致收入损失、客户不满意,甚至代价高昂的诉讼。统计数据相当惨淡------遭受数据丢失事件的企业中有 60% 在六个月内关闭,而失去数据中心超过 10 天的公司中有 93% 在一年内申请破产。

一个令人震惊的统计数据是,96%的公司不备份用户工作站。这篇博文向您展示了如何使用 Restic 和 MinIO 的组合快速、轻松、低调地进行备份。

高性能 MinIO 支持您能想到在其上运行的所有工作负载。MinIO 是构建本地数据湖仓一体并将其暴露给 AI/ML 和分析工作负载的标准。由于其行业领先的性能、可扩展性、S3-API 兼容性和持久性,MinIO 经常被用作备份目标。企业已经抛弃了传统的磁带备份,并依靠 MinIO 进行快速备份和恢复。不再需要管理、轮换和搜索盒式磁带 -- MinIO 可存储您的所有主要数据和备份,从而加快备份和恢复时间,同时消除备份损坏。

与磁带相比,MinIO 不仅加快了备份速度,还简化了备份,这在提高自动化和降低复杂性方面大有帮助。它采用基于容量的定价模式,能够无限制地无中断地进行扩展,从而轻松预测和控制工作负载,同时还提供云原生安全性和访问控制以及主动-主动复制等企业功能。存储在 MinIO 中的数据受到保护,因为 MinIO 使用服务器端加密 (SSE) 在存储层加密对象。MinIO 以极高的效率做到这一点------基准测试表明,MinIO 能够以接近线速的速度进行加密/解密。

Restic是一个现代备份程序,可以从Linux,BSD,Mac和Microsoft Windows备份到许多不同的存储类型,包括S3,本地和云中。Restic 与 MinIO 搭配得很好,因为它是开源的,易于部署和使用,易于自动化,并且两者都是用快速的 Go 编写的。

如何使用 Restic 备份到 MinIO

本教程将向您展示如何使用 Restic 将数据备份到 MinIO。这是一种易于使用且功能强大的企业数据备份方式。Restic 对 MinIO 的功能与对 Amazon S3 的功能相同,此外,MinIO 还具有作为 Restic 等的 SFTP 服务器的附加值。我们需要安装 MinIO 并记录与 S3 兼容的帐户凭据。然后,我们将安装 Restic,将 MinIO 配置为新的存储库并进行备份。

如果您尚未运行它,请在裸机或 Kubernetes 上安装 MinIO。

访问 MinIO 服务器需要 MinIO 客户端 (mc)。以下是在本地安装 mc 的方法。

记下首次运行 MinIO Server 时显示的凭证和 S3 终端节点,因为您将需要它们来配置 Restic 存储库。

Install Restic 安装 Restic

我使用 Ubuntu 20.04 进行以下操作,但我也在 macOS 和 Windows 上安装并使用了 Restic。Restic 在每个命令和标志上使用相同的命令和标志运行。

与 MinIO 一样,Restic 的安装也很简单。

go 复制代码
```
$ sudo apt update
$ sudo apt install restic
```

使用前更新 Restic

ruby 复制代码
$ sudo restic self-update
...
successfully updated restic to version 0.16.2

Restic 将备份保存到本地或远程存储库。我们将使用 MinIO 作为与 S3 兼容的存储库。 让我们创建 MinIO 存储库。设置我们在安装 MinIO 时获取的身份验证变量。

ini 复制代码
$ export AWS_ACCESS_KEY_ID=<your-minio-access-key>
$ export AWS_SECRET_ACCESS_KEY=<your-minio-secret-access-key>

初始化 Restic 存储库

shell 复制代码
$  restic -r s3:http://your-minio-ip-address:9000/restic init

要进行自动备份,您可以使用 RESTIC_REPOSITORY 环境变量设置存储库,或使用标志 --repository-file 指定存储库。

您可以将所有环境变量放在一个文件中

shell 复制代码
$ vim ~/.restic-env

添加以下变量:

ini 复制代码
export AWS_ACCESS_KEY_ID=<your-minio-access-key>
export AWS_SECRET_ACCESS_KEY=<your-minio-secret-access-key> 
export RESTIC_REPOSITORY="s3:http://your-minio-ip-address:9000/restic"
export RESTIC_PASSWORD="your-strong-repository-password"

保存文件,然后获取其来源

shell 复制代码
$ source ~/.restic-env

最后,验证存储库

bash 复制代码
$ echo $RESTIC_REPOSITORY
s3:http://your-minio-ip-address:9000/restic

现在,您可以使用以下命令轻松初始化存储库

csharp 复制代码
$ restic init

现在,您的 MinIO 实例上有一个 restic 存储桶。

备份

初始化存储库后,我们就可以进行备份了。查找包含要备份的数据文件的本地目录。就我而言,我使用工作站上的 ~/openlake 目录作为示例。

shell 复制代码
## not using restic-env 
$ restic -r s3:http://10.0.0.10:9000/restic --verbose backup ~/openlake
## using restic-env file
$ restic --verbose backup ~/openlake
open repository
repository 914b1ddc opened (version 2, compression level auto)
...
processed 97 files, 111.876 MiB in 0:02
snapshot 1c334016 saved

That was fast! 太快了!

在 Restic 中,备份称为快照。您可以使用以下命令列出所有快照

markdown 复制代码
$ restic snapshots
repository 914b1ddc opened (version 2, compression level auto)
ID        Time                 Host        Tags        Paths
-----------------------------------------------------------------------------
1c334016  2023-11-16 15:10:48  MDS-MINIO               /home/msarrel/openlake
-----------------------------------------------------------------------------
1 snapshots

我们看到 restic 存储桶内容已更新:

file

我们最近的备份在存储桶中 snapshots 。您可以看到对象名称与快照 ID 相同。

比较快照

在本地计算机上对同一目录进行另一次备份,就像以前一样。 现在,存储库中有相同数据的 2 个快照。 使用该 diff 命令查看两个快照之间的差异。

vbnet 复制代码
$ restic diff 1c334016 d7044fee
repository 914b1ddc opened (version 2, compression level auto)
comparing snapshot 1c334016 to d7044fee:

[0:00] 100.00%  1 / 1 index files loaded

Files:           0 new,     0 removed,     0 changed
Dirs:            0 new,     0 removed
Others:          0 new,     0 removed
Data Blobs:      0 new,     0 removed
Tree Blobs:      0 new,     0 removed
  Added:   0 B
  Removed: 0 B

恢复

希望您不需要经常使用此命令,但如果您这样做,您会很高兴它是高度可配置的。 要将特定快照还原到特定目标,请执行以下操作:

bash 复制代码
$ restic restore 1c334016 --target /tmp/restore-openlake
repository 914b1ddc opened (version 2, compression level auto)

restoring <Snapshot 1c334016 of [/home/msarrel/openlake] at 2023-11-16 15:10:48.12843098 -0800 PST by msarrel@MDS-MINIO> to /tmp/restore-openlake
Summary: Restored 134 files/dirs (111.876 MiB) in 0:00

我们可以通过列出目标目录的内容来验证这一点。 要从最近的快照还原,请执行以下操作:

vbnet 复制代码
$ restic restore latest --target /tmp/restore-new-openlake
repository 914b1ddc opened (version 2, compression level auto)

restoring <Snapshot d7044fee of [/home/msarrel/openlake] at 2023-11-16 15:24:38.906919692 -0800 PST by msarrel@MDS-MINIO> to /tmp/restore-new-openlake
Summary: Restored 134 files/dirs (111.876 MiB) in 0:00

自动备份 我们是 MinIO 自动化的忠实拥护者,Restic 备份可以很容易地作为 cron 作业实现自动化。在创建 restic-env 文件来存储变量时,我们已经迈出了第一步。

Create a cron job: 创建 cron 作业:

ruby 复制代码
$ crontab -e

输入以下内容,针对您的环境进行自定义:

css 复制代码
30 * * * * ./home/msarrel/.restic-env; restic backup -q /home/msarrel/openlake; restic forget -q --keep-last 2 --prune

Explanation: 解释:

css 复制代码
30 * * * * 每 30 分钟运行一次备份,每 30 分钟,每天,每月和一周中的某一天
 
./home/msarrel/.restic-env;**

​**restic backup -q /home/msarrel/openlake**​;  是备份命令

**restic forget -q --keep-last 2 --prune**  用于维护正在运行的快照存档。在这里,我们将修剪除最后两个快照之外的所有快照。

使用 Restic 和 MinIO 进行简单快速备份

这篇博文向您展示了如何使用 Restic 通过 S3 API 将 Linux 系统备份到 MinIO。作为演示,我们只演练了一些基本命令。更多细节请参考 Introduction --- restic 0.16.2 文档,包括加密、调整备份参数和设置恢复选项。

Restic 和 MinIO 的结合产生了快速、高效、安全和自动化的备份解决方案。只需编写一些脚本,即可轻松保护整个组织的工作站和服务器的数据。

相关推荐
陈哥聊测试14 小时前
软件格局在变,谁能扛起国产替代的大旗?
安全·程序员·产品
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭1 天前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
少年姜太公1 天前
从零开始详解js中的this(下)
前端·javascript·程序员
凌虚1 天前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
小华同学ai1 天前
ShowDoc:Star12.3k,福利项目,个人小团队的在线文档“简单、易用、轻量化”还专门针对API文档、技术文档做了优化
前端·程序员·github
小青鱼4 天前
AI编程-Cursor从入门到精通系列之常用概念及解释(二)
人工智能·程序员
捡田螺的小男孩4 天前
参数校验的十个建议!收藏好,别再给测试机会提bug~
java·后端·程序员
哔哩哔哩技术5 天前
B站装机系统实践:从初创到规模化的演进
前端·程序员
程序员鱼皮5 天前
没事别想不开去创业!
计算机·面试·程序员·项目
绝无仅有5 天前
通用的权限管理系统的介绍与总结
面试·程序员·架构