多站点双活复制

Multi-Site Active-Active Replication

在多个数据中心之间同步数据是任何对象存储服务的核心竞争力。MinIO 已经通过其性能优化的 服务器端双向主动式桶复制 满足了这个需求。最初,MinIO 只推荐了两个 MinIO 部署。

双向主动式复制支持以下场景:

  • 同数据中心复制
  • 跨数据中心复制
  • 同区域复制
  • 跨区域复制

双向主动式复制是寻求多主拓扑、快速热热故障转移和多地理位置弹性的组织的关键工具。

从我们最新的 MinIO 服务器版本 开始,MinIO 支持多站点双向主动式复制,用于在任意数量的 MinIO 部署之间同步对象。可以将多站点复制视为网状网络 - 每个桶都在多个网状节点之间同步。这进一步提高了 MinIO 复制对具有更复杂的多数据中心或多区域同步需求的组织的灵活性。


多站点复制建立在双向主动式框架之上,并保留关键的 功能,例如删除操作、删除标记、现有对象和副本元数据更改的复制。本博文重点介绍使用 MinIO 控制台配置多站点复制 - 如果您想了解有关 MinIO 复制的更多信息,请查看以下资源

架构注意事项

多站点复制与双向主动式复制共享基本注意事项,但围绕延迟有一些额外的注意事项

硬件:MinIO 建议在参与多站点复制配置的所有部署中使用相同的硬件。每个添加的具有异构硬件配置文件的 MinIO 部署都会增加复杂性,并减慢潜在问题的识别速度。

网络:每个参与多站点桶复制的 MinIO 部署都会增加复制配置中所有其他部署的带宽和吞吐量需求。确保整个网络(包括网卡、交换机和电缆本身)提供的吞吐量和带宽超过复制配置之间复制的数据量所需的吞吐量和带宽。

延迟:多站点复制对延迟的敏感性更高,因为 MinIO 不会将对象视为已复制,除非它已同步到所有配置的远程目标。因此,复制延迟取决于复制网状结构中最慢的链接。

规模:多站点复制规模的主要限制是参与配置的每个 MinIO 部署的管理开销。每个 MinIO 部署都是一个独立的对象存储服务 - 复制仅在配置的桶之间同步对象。管理员仍然负责同步服务器级配置,例如身份和访问管理或网络入口。

配置多站点复制

多站点复制首先配置“源”部署将数据复制到的远程 MinIO 部署。我们必须为参与多站点复制配置的每个 MinIO 部署执行此操作。如果我有三个 MinIO 部署,我需要总共重复此步骤三次。

我们将使用 MinIO 控制台使操作更轻松,尽管也可以通过命令行使用“mc”来完成。您可以从 Web 浏览器登录控制台开始 - 只需输入任何一个 MinIO 部署的 IP 地址或主机名。我正在本地端口 9001 上运行一个 分布式 MinIO 部署(1 个节点,4 个驱动器),因此我只需浏览到 http://localhost:9001


您登录使用的用户必须具有 必要的权限 来配置复制。为简单起见,我使用的是根凭据 - 但对于生产部署,您应该遵循最小权限原则,并为支持复制相关配置创建用户(或用户)。

登录后,从左侧导航菜单中选择。选择右上角的创建桶 + 按钮以打开创建桶 模态。


为桶指定一个名称并启用版本控制。复制需要版本控制,并且可以轻松在这里启用它。

我还将启用对象锁定,以便稍后可以选择为此桶设置保留设置。AWS S3 规范要求在创建桶时启用对象锁定,因此我们必须在这里执行此操作。

对参与多站点复制配置的每个 MinIO 部署重复此步骤。对于我的本地设置,我有三个 MinIO 部署,因此我必须总共执行此操作三次。我还要设置多个桶,以便我们可以展示此版本中添加的新功能


请记住 - 每个桶必须在所有 MinIO 部署中都具有版本控制、对象锁定和加密(如果已配置)的一致设置。MinIO 要求并强制执行这一点,以确保无论对象位于哪个 MinIO 部署上,其行为都始终相同。否则,您可能在一个部署中将对象锁定为 WORM,而在另一个部署中允许对该对象进行更改。

准备好所有桶后,我将批量配置所有三个桶的复制。

首先,选择批量选择 按钮以启用批量选择。这将为每个桶激活一个复选框。选择要为其配置复制的桶,然后选择设置复制 按钮以打开设置多个桶复制 模态。

我将在此处填写远程部署上的用户(再次,必须具有正确的 权限)的访问密钥和密钥,以及部署主机名。由于我是在本地执行此操作,因此我只需要指定 IP 地址和端口,并禁用 TLS。对于生产环境,这应该是管理 MinIO 部署节点之间流量的负载均衡器的主机名。

选择下一步 开始为每个桶分配其远程目标。由于这是双向主动式复制,因此我为源和目标使用相同的桶名称。这可确保应用程序可以始终如一地访问所有 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 部署执行读写操作。

如果您的目标是在发生重大灾难(例如多数据中心热备)时实现高可用性,则可以使用 MinIO Sidekick 在每个 MinIO 部署之间进行负载均衡。应用程序将根据指定给 Sidekick 的顺序自动定向到健康的 MinIO 部署。

我可以在 MinIO 控制台之外执行此操作吗?

MinIO 控制台封装了以下命令

我们的教程 启用多站点服务器端存储桶复制 包括使用 MinIO `mc` 命令行界面配置多站点复制的端到端示例。

如果我需要帮助怎么办?

如果您计划或正在配置多站点复制,那么您很可能正在处理企业级基础设施和规模。这需要企业级支持,您可以通过 MinIO SUBNET 获得。

SUBNET 包括围绕规划和实施的直接工程指导,可以显著降低部署和管理多站点配置的运营负担。SUBNET 包括针对 24 小时和 1 小时 SLA 的计划,具体取决于您组织的要求。