文档

站点复制概述

站点复制将多个独立的 MinIO 部署配置为一个由称为对等站点的副本组成的集群。

Diagram of a site replication deployment with two sites

一个包含两个对等站点的站点复制部署。负载均衡器管理到任一站点的操作路由。写入一个站点的数据会自动复制到另一个对等站点。

站点复制假定使用内置的 MinIO 身份提供程序 (IDP) *或* 外部 IDP。所有已配置的部署必须使用相同的 IDP。使用外部 IDP 的部署必须在所有站点中使用相同的配置。

有关站点复制架构和部署概念的更多信息,请参阅部署架构:复制的 MinIO 部署

MinIO 不建议在早期开发、评估或一般实验之外,在 MacOS、Windows 或非编排的容器化部署上使用站点复制。对于生产环境,请使用 LinuxKubernetes

概述

跨所有站点复制的内容

每个 MinIO 部署(“对等站点”)在其他对等站点之间同步以下更改:

  • 存储桶和对象的创建、修改和删除,包括

  • IAM 用户、组、策略的创建和删除,以及策略与用户或组的映射(对于 LDAP 用户或组)

  • 创建安全令牌服务 (STS) 凭证,用于生成可从本地 root 凭证验证的会话令牌

  • 创建和删除访问密钥root 用户拥有的密钥除外)

站点复制为所有复制站点上的所有新建和现有存储桶启用存储桶版本控制

mc 版本新增: RELEASE.2023-12-02T02-03-28Z

您可以选择在对等站点之间复制 ILM 过期规则。对于新的站点复制配置,请使用 mc admin replicate add 并附带 --replicate-ilm-expiry 标志。对于现有的站点复制配置,您可以使用 mc admin replicate update 并根据需要使用 --enable-ilm-expiry-replication--disable-ilm-expiry-replication 标志来启用或禁用该行为。

跨站点不复制的内容

站点复制配置中的 MinIO 部署*不会*复制以下项目的创建或修改:

初始站点复制过程

启用站点复制后,身份和访问管理 (IAM) 设置将按以下顺序同步:

  1. 策略

  2. 用户账户(对于本地用户)

  3. 用户组

  4. 访问密钥

    root 的访问密钥不会同步。

  5. 同步用户账户的策略映射

  6. 安全令牌服务 (STS) 用户的策略映射

  1. 策略

  2. 与具有有效 MinIO 策略 的 OIDC 账户关联的访问密钥。root 访问密钥不会同步。

  3. 同步用户账户的策略映射

  4. 安全令牌服务 (STS) 用户的策略映射

  1. 策略

  2. 用户组

  3. 与具有有效 MinIO 策略 的 LDAP 账户关联的访问密钥。root 访问密钥不会同步。

  4. 同步用户账户的策略映射

  5. 安全令牌服务 (STS) 用户的策略映射

在对等站点之间完成数据的初始同步后,MinIO 会持续复制和同步所有站点之间可复制的数据,只要任何站点上发生这些数据变更。

站点修复

站点复制配置中的任何 MinIO 部署都可以从拥有该数据最新版本的对等方重新同步损坏的可复制数据

版本 RELEASE.2023-07-18T17-49-40Z 中更改: 站点复制操作最多重试三 (3) 次。

对于尝试三次后仍复制失败的操作,MinIO 会将其移出复制队列。扫描器会在稍后时间发现这些受影响的对象,并将其重新排队等待复制。

版本 RELEASE.2022-08-11T04-37-28Z 中更改: 当执行任何 GETHEAD API 方法时,失败或待处理的复制会自动重新排队。例如,在站点恢复在线后,使用 mc statmc catmc ls 命令会触发修复机制重新排队。

版本 RELEASE.2022-12-02T23-48-47Z 中更改: 如果某个站点因任何原因丢失数据,请使用 mc admin replicate resync 从另一个健康站点重新同步数据。这将启动一个主动进程来重新同步数据,而无需等待被动的 MinIO 扫描器识别丢失的数据。

您可以使用 MINIO_SCANNER_SPEED 环境变量或 scanner speed 配置设置来调整 MinIO 如何平衡扫描器性能与读/写操作。

同步与异步复制

MinIO 支持为给定的远程目标指定异步(默认)或同步复制。

使用异步复制时,MinIO 在将对象放入复制队列*之前*完成原始的 PUT 操作。因此,原始客户端可能会在对象被复制*之前*看到成功的 PUT 操作。虽然这可能导致远程位置出现过时或丢失的对象,但它降低了因复制负载导致写入操作缓慢的风险。

使用同步复制时,MinIO 会在完成原始的 PUT 操作*之前*尝试复制对象。无论复制尝试是否成功,MinIO 都会返回一个成功的 PUT 操作。这降低了写入操作缓慢的风险,但可能导致远程位置出现过时或丢失的对象。

MinIO 强烈建议使用默认的异步站点复制。同步站点复制的性能很大程度上取决于站点之间的延迟,延迟越高可能导致 PUT 性能越低和复制延迟。要配置同步站点复制,请使用 mc admin replicate update 并附带 --mode 选项。

代理到其他站点

MinIO 对等站点可以将来对某个对象的 GET/HEAD 请求代理到其他对等站点,以检查该对象是否存在。这使得正在修复或落后于其他对等站点的站点仍然可以返回已持久化到其他站点的对象。

例如:

  1. 客户端向 Site1 发出 GET("data/invoices/january.xls") 请求

  2. Site1 无法找到该对象

  3. Site1 将请求代理到 Site2

  4. Site2 返回所请求对象的最新版本

  5. Site1 将代理的对象返回给客户端

对于*不*包含唯一版本 ID 的 GET/HEAD 请求,代理请求会返回该对象在对等站点上的*最新*版本。这可能导致检索到对象的非当前版本,例如当响应的对等站点也存在复制延迟时。

MinIO 不代理 LISTDELETEPUT 操作。

先决条件

首先备份集群设置

在配置站点复制之前,请使用 mc admin cluster bucket exportmc admin cluster iam export 命令分别创建存储桶元数据和 IAM 配置的快照。如果站点复制配置过程中出现错误,您可以使用这些快照来恢复存储桶/IAM 设置。

设置时只有一个站点有数据

在设置时,只有*一个*站点可以有数据。其他站点必须是空的,没有任何存储桶和对象。

配置站点复制后,第一个部署上的任何数据都会复制到其他站点。

所有站点必须使用相同的 IDP

所有站点必须使用相同的身份提供程序。站点复制支持内置的 MinIO IDP、OIDC 或 LDAP。

所有站点必须使用相同的 MinIO 服务器版本

所有站点必须具有匹配且一致的 MinIO 服务器版本。在 MinIO 服务器版本不匹配的站点之间配置复制可能会导致意外或不希望的复制行为。

您还应确保用于配置复制的 mc 版本与服务器版本紧密匹配。

访问相同的加密服务

对于通过密钥管理服务 (KMS) 实现的 SSE-S3SSE-KMS 加密,所有站点都必须能够访问一个中央 KMS 部署。

您可以通过一个中央 KES 服务器或多个 KES 服务器(例如每个站点一个)连接到一个中央支持的密钥库服务器来实现这一点。

复制需要版本控制

站点复制*需要*存储桶版本控制,并为所有创建的存储桶自动启用它。您不能在站点复制部署中禁用版本控制。

MinIO 无法复制存储桶中您已从版本控制中排除的前缀下的对象。

每个站点都安装负载均衡器

指定站点的负载均衡器、反向代理或类似网络控制平面组件的 URL 或 IP 地址。请求会自动路由到部署中的节点。

MinIO 建议不要为对等站点使用单个节点的主机名。这会造成单点故障:如果该节点离线,复制将失败。

从存储桶复制切换到站点复制

存储桶复制和多站点复制是互斥的。您不能在同一部署上同时使用这两种复制方法。

如果您之前设置了存储桶复制,现在希望使用站点复制,您必须首先在初始化站点复制时,删除拥有数据的部署上的所有存储桶复制规则。在命令行上使用 mc replicate rm 来移除存储桶复制规则。

设置站点复制时,只有一个站点可以有数据。所有其他站点必须是空的。

教程

配置站点复制

以下步骤为三个分布式部署创建一个新的站点复制配置。其中一个站点包含可复制的数据

这三个站点使用别名 minio1minio2minio3,并且只有 minio1 包含任何数据。

  1. 部署三个或更多独立的 MinIO 站点,使用相同的 IDP

    从空站点开始,*或者*确保不超过一个站点有任何可复制的数据

  2. 为每个站点配置一个别名

    指定站点的负载均衡器、反向代理或类似网络控制平面组件的 URL 或 IP 地址。请求会自动路由到部署中的节点。

    MinIO 建议不要为对等站点使用单个节点的主机名。这会造成单点故障:如果该节点离线,复制将失败。

    例如,对于三个 MinIO 站点,您可以创建别名 minio1minio2minio3

    使用 mc alias set 来定义管理到该站点的连接的负载均衡器的主机名或 IP。

    mc alias set minio1 https://minio1.example.com:9000 adminuser adminpassword
    mc alias set minio2 https://minio2.example.com:9000 adminuser adminpassword
    mc alias set minio3 https://minio3.example.com:9000 adminuser adminpassword
    

    或定义环境变量

    export MC_HOST_minio1=https://adminuser:adminpassword@minio1.example.com
    export MC_HOST_minio2=https://adminuser:adminpassword@minio2.example.com
    export MC_HOST_minio3=https://adminuser:adminpassword@minio3.example.com
    
  3. 添加站点复制配置

    mc admin replicate add minio1 minio2 minio3
    

    如果所有站点都是空的,别名的顺序无关紧要。如果其中一个站点包含任何可复制的数据,您必须将其列在最前面。

    最多只有一个站点可以包含任何可复制的数据。

  4. 查询站点复制配置以进行验证

    mc admin replicate info minio1
    

    您可以使用站点复制配置中任何对等站点的别名。

  5. 查询站点复制状态以确认任何初始数据已复制到所有对等站点。

    mc admin replicate status minio1
    

    您可以使用站点复制配置中任何对等站点的别名。输出应显示所有可复制的数据都已同步。

    输出可能类似于以下内容:

    Bucket replication status:
    ●  1/1 Buckets in sync
    
    Policy replication status:
    ●  5/5 Policies in sync
    
    User replication status:
    No Users present
    
    Group replication status:
    No Groups present
    

    有关查看站点复制的更多信息,请参阅站点复制状态教程

扩展站点复制

您可以向现有的站点复制配置中添加更多站点。

新站点必须满足以下要求:

  • 站点已完全部署,并可通过主机名或 IP 访问

  • 与配置中的所有其他站点共享 IDP 配置

  • 使用与其他已配置站点相同的 root 用户凭证

  • 不包含任何存储桶或对象数据

  1. 按照上述要求部署新的 MinIO 对等站点

  2. 为新站点配置一个别名

    指定站点的负载均衡器、反向代理或类似网络控制平面组件的 URL 或 IP 地址。请求会自动路由到部署中的节点。

    MinIO 建议不要为对等站点使用单个节点的主机名。这会造成单点故障:如果该节点离线,复制将失败。

    要检查现有别名,请使用 mc alias list

    使用 mc alias set 来定义管理到新站点的连接的负载均衡器的主机名或 IP。

    mc alias set minio4 https://minio4.example.com:9000 adminuser adminpassword
    

    或定义环境变量

    export MC_HOST_minio4=https://adminuser:adminpassword@minio4.example.com
    
  3. 添加站点复制配置

    使用 mc admin replicate add 命令将新的对等站点添加到站点复制配置中。指定*所有*现有对等站点的别名,然后指定要添加的新站点的别名。

    例如,以下命令将新的对等站点 minio4 添加到现有的站点复制配置中,该配置已包含现有站点 minio1minio2minio3

    mc admin replicate add minio1 minio2 minio3 minio4
    

    注意

    如果任何站点无法访问或永久丢失,您**必须**先使用 mc admin replicate rm 移除无法访问的站点,然后再添加新站点。

  4. 查询站点复制配置以进行验证

    mc admin replicate info minio1
    

修改站点的端点

如果对等站点的主机名发生变化,您可以修改复制配置以反映新的主机名。

  1. 使用 mc admin replicate info 获取站点的部署 ID

    mc admin replicate info <ALIAS>
    
  2. 使用 mc admin replicate update 更新站点的端点

    mc admin replicate update ALIAS --deployment-id [DEPLOYMENT-ID] --endpoint [NEW-ENDPOINT]
    

    将 [DEPLOYMENT-ID] 替换为要更新的站点的部署 ID。

    将 [NEW-ENDPOINT] 替换为该站点的新端点。

    指定站点的负载均衡器、反向代理或类似网络控制平面组件的 URL 或 IP 地址。请求会自动路由到部署中的节点。

    MinIO 建议不要为对等站点使用单个节点的主机名。这会造成单点故障:如果该节点离线,复制将失败。

从复制中移除站点

您可以随时从复制中移除一个站点。您可以在以后重新添加该站点,但必须首先完全清除该站点上的存储桶和对象数据。

使用 mc admin replicate rm

mc admin replicate rm ALIAS PEER_TO_REMOVE --force
  • ALIAS 替换为复制配置中任何对等站点的别名

  • PEER_TO_REMOVE 替换为要移除的对等站点的别名。

站点复制配置中所有健康的对等站点都会自动更新以移除指定的对等站点。

MinIO 需要 --force 标志才能将对等站点从站点复制配置中移除。

查看复制状态

MinIO 提供有关用户、用户组、策略或存储桶在站点间复制的信息。

摘要信息包括每个类别的**已同步**和**失败**项目的数量。

使用 mc admin replicate status

mc admin replicate status <ALIAS> --<flag> <value>

例如:

  • mc admin replicate status minio3 --bucket images

    显示 minio3 站点上 images 存储桶的复制状态。

    输出类似于以下内容:

    ●  Bucket config replication summary for: images
    
    Bucket          | MINIO2          | MINIO3          | MINIO4
    Tags            |                 |                 |
    Policy          |                 |                 |
    Quota           |                 |                 |
    Retention       |                 |                 |
    Encryption      |                 |                 |
    Replication     | ✔               | ✔               | ✔
    
  • mc admin replicate status minio3 --all

    显示 minio3 所属的所有复制站点的复制状态摘要。

    输出类似于以下内容:

    Bucket replication status:
    ●  1/1 Buckets in sync
    
    Policy replication status:
    ●  5/5 Policies in sync
    
    User replication status:
    ●  1/1 Users in sync
    
    Group replication status:
    ●  0/2 Groups in sync
    
    Group           | MINIO2          | MINIO3          | MINIO4
    ittechs         | ✗  in-sync      |                 | ✗  in-sync
    managers        | ✗  in-sync      |                 | ✗  in-sync
    
English 中文