Percona 流式备份

Percona Streaming Backup

Percona 最初是 MySQL 的一个增强版企业版本。凭借其高级功能和卓越的性能,它在大型数据、分布式系统和可扩展基础设施尚未普及的时代发挥了重要作用。那时你只有一个主数据库,也许还有两个辅助节点,你的整个基础设施都存储在其宝贵的数据中。如今,情况无疑变得更加复杂了。2-3 个节点集群的时代已经过去了。在 Percona 的大型安装中,MySQL 数据库分片正在千节点集群级别进行,并且一切都是自动化的。节点通过一个自动化的过程退出使用,该过程首先刷新节点,然后在最终将其离线之前重新激活一个新的从节点。

为了备份所有这些数据,Percona 使用 xtraBackup 实用程序以流模式确保备份。什么是流模式?从本质上讲,它允许您备份数据,而无需触碰运行数据库的本地节点上的磁盘。这样做的好处是,您可以将备份数据直接流式传输到 MinIO Jumbo,它旨在从 MinIO 集群上传和检索大型对象。MinIO 通过将大型对象分割成较小的对象来高效地上传这些对象,从而允许使用分段上传配置多个并行更新流。Jumbo 是一个简单的 Go 二进制文件,因此可以作为您现有工具集的一部分集成,因为它接受来自几乎任何数据源的管道流。这种简单性使您可以将 Jumbo 与任何应用程序一起使用,以将其大型数据集存储在 MinIO 中。

接下来,让我们看看如何设置 Jumbo,然后使用它将 Percona 数据使用 xtraBackup 备份到 MinIO 存储桶中。

MinIO Jumbo

如果您愿意,可以使用现有的 MinIO 安装并在其中创建一个存储桶。但是,如果您只是快速启动一些内容进行测试,则可以按照以下说明操作。

我们将启动一个带有 4 个磁盘的 MinIO 节点。MinIO 可以在任何地方运行 - 物理机、虚拟机或容器 - 并且在本概述中,我们将使用 Docker 创建的容器。

对于这 4 个磁盘,在主机上为 minio 创建目录

mkdir -p /home/aj/minio/disk-1 \
mkdir -p /home/aj/minio/disk-2 \
mkdir -p /home/aj/minio/disk-3 \
mkdir -p /home/aj/minio/disk-4

使用以下规范启动 MinIO 节点的 Docker 容器

docker run -d \
  -p 20091:9001 \
  -v /home/aj/minio/disk-1:/mnt/disk1 \
  -v /home/aj/minio/disk-2:/mnt/disk2 \
  -v /home/aj/minio/disk-3:/mnt/disk3 \
  -v /home/aj/minio/disk-4:/mnt/disk4 \
  --name minio \
  --hostname minio \
  quay.io/minio/minio server http://minio/mnt/disk{1...4}/minio --console-address ":9001"

现在让我们继续设置 Jumbo。要获取 Jumbo 二进制文件,请发送电子邮件至 hello@min.io

安装 Jumbo 二进制文件后,使用以下命令设置身份验证的环境变量

export JUMBO_ACCESS_KEY=”minioadmin” JUMBO_SECRET_KEY=”minioadmin”

使用 MinIO Jumbo 与 Percona 流式传输

在开始之前,请使用这些 说明 将 Percona xtrabackup 二进制文件安装到您首选的环境方法中。

以下命令将使容器在 Docker 中快速启动并运行

sudo docker run --name percona-xtrabackup --volumes-from percona-server-mysql \
percona/percona-xtrabackup
xtrabackup --backup --data-dir=/var/lib/mysql --target-dir=/backup --user=root --password=mysql

Percona 提供了几种使用 xtrabackup 进行备份的方法。例如,备份可以保存到磁盘,也可以以压缩格式流式传输,以便进行加密,然后打包成 tarball。它使您能够轻松地将数据库备份到 MinIO 存储桶中。

我们将在此处执行以下操作

  • 我们将压缩备份,以便尽可能少地占用空间
  • 我们将对其进行加密,以防止其被篡改
  • 最后,使用增强的线程将它复制到 MinIO 存储桶中,以加快备份速度

压缩备份

xtrabackup --backup --compress --compress-threads=8 --stream=xbstream --parallel=4 --target-dir=./ | backup.xbstream gzip -`` | \

加密备份。您可以使用可用的库(如 GPG 密钥),但在本例中,我们将向您展示如何使用 openssl

openssl des3 -salt -k “password” backup.xbstream.gz.des3 | \

加密完成后,我们可以使用 Jumbo 将其放入 MinIO 中。借助 MinIO 的密钥加密服务 (KES),这一切得以实现。SSE 使用 KES 和 KMS 执行加密操作。KES 服务本身是无状态的,充当中间层,因为它将其数据存储在 KMS 中。使用 MinIO,您可以设置各种粒度和可自定义的加密级别。您可以始终选择在每个对象的基础上进行加密,但是,我们**强烈**建议在存储桶上自动设置 SSE-KMS 加密,以便所有对象默认情况下都进行加密。加密是使用存储在 KMS 中的特定外部密钥 (EK) 完成的,可以在每个对象的基础上使用唯一密钥覆盖此密钥。

除此之外,MinIO 还支持具有内置 IDP 的 IAM S3 样式策略(有关更多信息,请参阅 MinIO 最佳实践 - 安全和访问控制)以及 对象锁定和保留,后者强制执行一次写入多次读取操作,用于基于期限和无限期的法律保留。这允许关键数据保留合规性,并满足 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 的要求。

./jumbo_0.1-rc2_linux_amd64 put http://localhost:20091/testbackup123/percona-xtrabackup

以上二进制文件可能会更改其版本,但这实际上会将 xtraBackup 放入 MinIO 中,而不会触及磁盘的任何部分。所有操作都在内存中的流中进行。

将所有内容整合在一起看起来像这样

xtrabackup --backup --compress --compress-threads=8 --stream=xbstream --parallel=4 --target-dir=./ | backup.xbstream gzip -`` | \

openssl des3 -salt -k “password” backup.xbstream.gz.des3 | \

./jumbo_0.1-rc2_linux_amd64 put http://localhost:20091/testbackup123/percona-xtrabackup

存储 存储 存储

备份数据库不仅重要,而且要将其备份到可靠且可扩展的存储中。MinIO 在单个 32 节点 NVME 集群中能够实现 1.32 Tbps 的 PUT 吞吐量和 2.6 Tbps 的 GET 吞吐量。这意味着备份和还原操作运行得更快,从而减少了停机时间对业务的潜在影响。在灾难恢复场景中,恢复时间比备份时间更加重要。如果将备份存储到速度较慢的存储中,则还原时间将会很慢。始终检查备份的完整性以确保其处于工作状态,方法是还原它们并在随机情况下进行测试,以确保在真实的灾难恢复场景中可以安全且完整地还原数据。

有关更多信息,请使用博客右下角的实时聊天与我们的专家联系,以了解更多有关 SUBNET 体验的信息,或发送电子邮件至 hello@min.io。