使用电子邮件提供商的主动-主动示例

Active-Active Example Using an Email Provider

宝贵数据必须受到保护,防止损坏和丢失,但不断增加的数据量 - 以及日益分散的数据 - 使这项任务变得艰巨。MinIO 包含多种数据保护机制,本文重点介绍复制最佳实践,这是软件定义的对象存储的关键保护措施,也是创建和维护多云数据湖的关键推动因素,使您能够在最适合的地方运行工作负载,并使用组织最新的数据。

站点复制通过设置多个站点并在服务器端处理复制,是多云架构功能的基础。这使您能够简化跨多个站点的數據管理、元数据和配置,而无需任何额外开销,只需在出现驱动器、节点甚至整个站点故障的情况下修改应用程序的端点即可。

我们将向您展示一个关于如何部署到多个站点/区域并配置复制的简短示例 - 同时,我们还部署了高可用性,将每个多站点 MinIO 集群放置在不同的区域,以实现强大的 业务连续性和灾难恢复策略

电子邮件服务的地理分布式架构

电子邮件是最终的性能扩展用例,因为它通常只会在数据量方面增加。此外,存储的数据越多,数据就越有价值。MinIO 的 多站点主动-主动 复制专注于保持集群的最佳性能。配置正确后,它允许您跨多个数据中心、云 - 甚至灾难恢复复制数据,其中一个站点脱机不会降低可用性。所有操作都在服务器端完成,电子邮件应用程序无需任何修改,因为所有操作都由 MinIO 处理。由于 MinIO 的 API 友好界面和 SDK,您可以更改 MinIO 的后端,使您能够轻松地启动和运行而无需进行太多修改。

在分布式、生产就绪的软件定义基础架构(MinIO、VPC、Unbound、NGINX)中,我们通常建议部署三个相同的 MinIO 集群,每个集群位于其自己的区域,并在所有三个集群之间进行主动-主动复制。此设计的优点是,如果特定站点中的某个 MinIO 节点出现故障,其他节点可以重新路由电子邮件数据,因为 NGINX 将流量重新路由到正常节点。此外,如果整个站点脱机,另外两个站点可以处理读写操作,而无需对应用程序进行任何更改,因为写入其他站点的所有数据都将在脱机站点恢复联机后复制到该站点。

如何设置主动-主动复制

现在我们将实际在 MinIO 上设置主动-主动复制。这包括使用 Terraform 启动虚拟机,然后使用 MinIO mc 客户端配置站点复制。

进入每个 minio-1minio-2minio-3 目录并运行 terraform 命令以启动基础架构。

cd minio-1
terraform apply
cd minio-2
terraform apply
cd minio-3
terraform apply

所有三个站点启动后,输出将显示 Unbound 和 NGINX 接口的公共 IP 以及 3 个 MinIO 节点的私有 IP,类似于以下内容。

hello_minio_aws_instance_nginx = "<public_ip>"
hello_minio_aws_instance_unbound = "<public_ip>"
minio_hostname_ips_map = {
"server-1.minio.local" = "<private_ip>"
"server-2.minio.local" = "<private_ip>"
"server-3.minio.local" = "<private_ip>"
}

不要忘记使用前面步骤中配置 unbound 时显示的配置来配置 Unbound A 记录。

登录到站点 1 中的 NGINX 节点之一以设置所有三个站点的 mc alias。确保没有任何站点包含数据。

mc alias set minio1 http://<nginx_public_ip> minioadmin minioadmin
mc alias set minio2 http://<nginx_public_ip> minioadmin minioadmin
mc alias set minio3 http://<nginx_public_ip> minioadmin minioadmin

让我们将其设置以便它跨所有 3 个站点进行复制

$ mc admin replicate add minio1 minio2 minio3
Requested sites were configured for replication successfully.

验证 3 个站点是否配置正确

mc admin replicate info minio1
SiteReplication enabled for:
Deployment ID                    	| Site Name   	| Endpoint
f96a6675-ddc3-4c6e-907d-edccd9eae7a4 | minio1      	| http://<nginx_public_ip>
0dfce53f-e85b-48d0-91de-4d7564d5456f | minio2      	| http://<nginx_public_ip>
8527896f-0d4b-48fe-bddc-a3203dccd75f | minio3      	| http://<nginx_public_ip>

检查以确保复制正常工作

mc admin replicate status minio1
Bucket replication status:
No Buckets present
Policy replication status:
●  5/5 Policies in sync
User replication status:
No Users present
Group replication status:
No Groups present

在 minio1 中创建一个桶

/opt/minio-binaries/mc mb minio1/testbucket

将任何对象添加到桶中

/opt/minio-binaries/mc cp my_object  minio1/testbucket

列出其他站点中的对象,在本例中为 minio2 和 minio3

/opt/minio-binaries/mc ls minio2/testbucket
[2022-12-19 18:52:09 UTC] 3.0KiB STANDARD my_object 
/opt/minio-binaries/mc ls minio3/testbucket
[2022-12-19 18:52:09 UTC] 3.0KiB STANDARD my_object

正如您所看到的,即使这些站点在地理位置上相距甚远,将数据复制到其他站点也是几乎瞬时的。对于几个对象,您可以使用 ls,但对于 MinIO 桶中的大量对象,可以使用 mc diff 查看它们之间的差异。

最后的想法

随着电子邮件量的增加,电子邮件不仅需要防止损坏和丢失,还必须完成将数据分布到负载均衡和 BC/DR 的艰巨任务。在本博文中,我们重点介绍了使用主动-主动复制进行电子邮件数据复制的最佳实践。站点复制通过设置多个站点并在服务器端处理复制,实现了 MinIO 多云架构的功能。这样可以避免电子邮件应用程序在出现整个站点或单个磁盘故障时需要进行任何额外的修改。

您还在等什么?如果您对我们的任何复制策略有任何疑问,请务必在 Slack 上与我们联系!