多站点主动-主动复制
在多个数据中心之间同步数据是任何对象存储服务的核心竞争力。MinIO 已经通过其性能优化的Server-Side Active-Active Bucket Replication勾选了这个框。最初,MinIO 只推荐了两个 MinIO 部署。
双活复制支持以下场景:
同数据中心复制
跨数据中心复制
同区复制
跨区域复制
主动-主动复制是寻求多主拓扑、快速热-热故障转移和多地域弹性的组织的关键工具。
从我们最新的MinIO 服务器版本开始,MinIO 支持多站点、主动-主动复制,用于在任意数量的 MinIO 部署之间同步对象。将多站点复制想象成一个网状网络——每个桶在多个网状节点之间同步。这进一步提高了 MinIO 复制的灵活性,适用于对多 DC 或多区域同步有更复杂要求的组织。

多站点复制建立在 Two-Way Active-Active 框架之上,并保留了关键功能,例如删除操作的复制、删除标记、现有对象和副本元数据更改。此博客重点介绍使用 MinIO 控制台配置多站点复制 - 如果您想了解有关 MinIO 复制的更多信息,请查看这些资源:
架构注意事项
多站点复制共享双向主动-主动复制的基本注意事项,以及一些关于延迟的额外注意事项:
硬件: MinIO 建议在参与多站点复制配置的所有部署上使用相同的硬件。每个添加的具有异构硬件配置文件的 MinIO 部署都会增加复杂性并减慢对潜在问题的识别。
网络:参与多站点存储桶复制的每个 MinIO 部署都会增加复制配置中所有其他部署的带宽和吞吐量要求。确保整个网络——NIC、交换机和电缆本身——提供比站点间复制的数据量所需的更多的吞吐量和带宽。
延迟:多站点复制增加了延迟敏感性,因为 MinIO 不会将对象视为已复制,直到它已同步到所有配置的远程目标。因此,复制延迟由复制网格中最慢的链接决定。
规模:多站点复制规模的主要限制是参与配置的每个 MinIO 部署的管理开销。每个 MinIO 部署都是一个独立的对象存储服务——复制只在配置的桶之间同步对象。管理员仍然负责同步服务器级配置,例如身份和访问管理或网络入口。
配置多站点复制
多站点复制从配置“源”部署将数据复制到的远程 MinIO 部署开始。我们需要为参与多站点复制配置的每个 MinIO 部署执行此操作。如果我有三个 MinIO 部署,我将不得不总共重复此步骤三次。
我们将使用 MinIO 控制台来简化操作,尽管这也可以通过命令行中的“mc”来完成。您可以从您的 Web 浏览器登录控制台开始——只需输入任何一个MinIO部署的 IP 地址或主机名。我正在端口 9001 上本地运行分布式MinIO 部署(1 个节点,4 个驱动器),所以我将浏览到http://localhost:9001。

重要的是,您登录的用户具有配置复制所需的权限。为简单起见,我使用 root 凭据 - 但对于生产部署,您应该遵循最小权限原则并创建一个(或多个)用户以支持与复制相关的配置。
登录后,从左侧导航菜单中选择Buckets 。选择右上角的Create Bucket +按钮以打开Create Bucket模式。

指定存储桶的名称并启用版本控制。复制需要版本控制,在这里启用它很容易。
我还将启用对象锁定,以便稍后可以选择在此存储桶上设置保留设置。AWS S3 规范要求在创建存储桶时启用对象锁定,因此我们必须在此处执行此操作。
对参与多站点复制配置的每个 MinIO Deployment重复此步骤。对于我的本地设置,我有三个 MinIO 部署,所以我总共需要执行三次。我还将设置多个存储桶,以便我们可以展示作为此版本的一部分添加的新功能:

请记住 - 每个存储桶必须在所有 MinIO 部署中具有一致的版本控制、对象锁定和加密(如果配置)设置。MinIO 要求并强制执行这一点,以确保对象始终具有相同的行为,无论它驻留在哪个 MinIO 部署上。否则,您可能会有一个部署,其中一个对象被 WORM 锁定,而另一个部署允许该对象发生变化。
准备好所有存储桶后,我将为所有三个存储桶批量配置复制。
首先,选择“批量选择”按钮以启用批量选择。这会为每个 Bucket 激活一个复选框。选择要为其配置复制的存储桶,然后选择“设置复制”按钮以打开“设置多存储桶复制”模式。

我将在此处填写远程部署用户的访问密钥和秘密密钥 - 同样,具有正确权限的用户 - 以及部署主机名。因为我是在本地完成这一切,所以我只是指定 IP 地址和端口,并禁用 TLS。对于生产环境,这应该是管理 MinIO 部署节点之间流量的负载均衡器的主机名。
选择Next开始为每个存储桶分配其远程目标。由于这是主动-主动复制,我对源和目标使用相同的存储桶名称。这确保应用程序可以在所有 MinIO 部署中一致地访问给定的对象路径:

我可以通过选择“管理”按钮查看存储桶详细信息,然后选择“复制”来查看我刚刚创建的复制规则。
现在我已经在我的第一个部署中完成了这个配置,我需要对所有其他部署重复这个过程。如果我们在 shell 或终端中执行此操作,我们将使用 `mc` 命令行工具运行多个 `mc admin bucket remote add` 和 `mc replicate add` 命令,每个节点一次,为每个规则设置唯一的优先级。控制台在单个 UI 模式中为我们处理所有繁重的工作,这大大降低了此过程的复杂性。
一旦我为存储桶复制配置了我的所有部署,我可以通过将文件写入任何一个部署并尝试从另一个部署读取它来进行测试以确认。我也可以在这里使用 MinIO 控制台在一个部署中将一个简单的文件上传到照片存储桶,然后在另一个部署中检查该存储桶的内容:纽约布朗克斯动物园:

我将在我的另一个本地部署中检查同一个文件——这次我要查看对象元数据:

请注意X-Amz-Replication-Status元数据为REPLICA。这表明该对象是从另一个存储桶中复制的。如果我在最初上传对象的部署中检查同一个文件,元数据将改为显示COMPLETED。
好吧……
多站点复制具有强大的功能,同时也增加了一定的复杂性。我们知道会有很多关于如何使用此功能的问题,我们将尝试在这里回答其中的一些问题:
当复制目标出现故障时会发生什么?
与单向和双向复制类似,MinIO 保留一个未复制对象队列,并不断尝试随着时间的推移完成复制。一旦目标重新联机,MinIO 就可以开始将数据从队列复制到该目标。
这里有一个警告——很大程度上取决于您配置的是同步复制还是异步复制。我们在这里详细介绍,但快速总结是:
异步复制发生在返回写入成功后(如PUT、DELETE)
同步复制发生在返回写入成功之前
这意味着如果复制目标出现故障,应用程序更有可能挂起并等待同步复制。
值得注意的是 - 在足够的网络基础设施下,MinIO 异步复制接近同步。即使在单向或双向设置中,也应该有相对较少的部署需要同步复制。在多站点设置中,在启用同步复制之前应格外小心。
我可以拥有多少个站点?
当涉及到您可以在它们之间配置主动-主动复制的站点数量时,MinIO 在这里没有施加任何限制。有经验的用户可能会认识到我们的教程本质上是为给定的存储桶配置多个双向主动-主动复制链接。
唯一真正的限制是管理和维护跨机架、数据中心甚至区域的多个 MinIO 部署的操作复杂性,同时保持必要的延迟和带宽要求以支持对象的近同步复制,而不会影响 MinIO 部署的整体吞吐量。这完全取决于您的组织的舒适程度。
我应该如何处理我的申请?
一般建议是使用负载均衡器来管理将应用程序定向到给定的 MinIO 部署或该部署中的节点。该指南仍然适用于多站点复制,尽管您有更多有趣的选择。
例如,如果您在特定地理区域的 MinIO 部署之间进行多站点复制,您可以将负载均衡器配置为执行最低延迟路由,以允许应用程序从地理上“最近”的 MinIO 部署执行读/写操作。
如果您的目标是在发生重大灾难时获得非常高的可用性(例如多 DC 热故障转移),您可以使用MinIO Sidekick在每个 MinIO 部署之间进行负载平衡。应用程序将根据指定给 Sidekick 的顺序自动定向到健康的 MinIO 部署。
我可以在 MinIO 控制台之外执行此操作吗?
MinIO 控制台包装了以下命令:
mc admin bucket remote - 创建和管理远程复制目标。
mc replicate - 创建和管理复制规则
我们的教程启用多站点服务器端存储桶复制包括使用 MinIO `mc` 命令行界面配置多站点复制的端到端示例。
如果我需要帮助怎么办?
如果您计划或正在配置多站点复制,那么您很可能正在处理企业级基础架构和规模。这需要企业级支持,您可以通过MinIO SUBNET获得。
SUBNET 包括有关规划和实施的直接工程指南,可以显着减少部署和管理多站点配置的操作负担。SUBNET 包括 24 小时和 1 小时 SLA 计划,具体取决于您组织的要求。