文档

站点复制概述

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

Diagram of a site replication deployment with two sites

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

站点复制假设使用包含的 MinIO 身份提供程序 (IDP) *或* 外部 IDP。所有配置的部署都必须使用相同的 IDP。使用外部 IDP 的部署必须跨站点使用相同的配置。

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

概述

跨所有站点复制的内容

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

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

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

  • 为可从本地 root 凭据验证的会话令牌创建安全令牌服务 (STS) 凭据

  • 创建和删除访问密钥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. 访问密钥

    root 的访问密钥不会同步。

  4. 已同步用户帐户的策略映射

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

  1. 策略

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

  3. 已同步用户帐户的策略映射

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

  1. 策略

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

  3. 已同步用户帐户的策略映射

  4. 安全令牌服务 (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 选项的mc admin replicate update

代理到其他站点

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命令行或 MinIO 控制台删除桶复制规则。

设置站点复制时,只能有一个站点包含数据。所有其他站点必须为空。

教程

配置站点复制

  1. 部署两个或多个独立的 MinIO 站点,每个站点使用相同的身份提供商

    只有一个站点可以包含任何桶或对象。其他站点必须为空。

  2. 在浏览器中,访问包含数据(如果有)的站点的控制台

    例如,https://<addressforsite>:9000

    <addressforsite>替换为管理到 MinIO 部署的连接的负载均衡器、反向代理或类似控制平面的主机名或 IP 地址。

  3. 选择**设置**,然后选择**站点复制**

  4. 选择添加站点 +

  5. 填写所需信息

    此站点

    • 站点名称:

      与站点关联的名称或其他识别文本。

    • 端点:

      (必填) 管理到站点的连接的负载均衡器的主机名或 IP。

    • 访问密钥:

      (必填) 用于登录站点的root用户的用户名。

    • 密钥:

      (必填) 用于登录站点的root用户的密码。

    对等站点

    • 站点名称:

      与站点关联的名称或其他识别文本。

    • 端点:

      (必填) 管理到站点的连接的负载均衡器的主机名或 IP。

    • 访问密钥:

      (必填) 用于登录站点的对等站点root用户的用户名。

    • 密钥:

      (必填) 用于登录站点的对等站点root用户的密码。

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

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

    要添加两个站点以外的其他站点,请选择站点条目之一旁边的+按钮。要删除之前添加的站点,请选择站点旁边的-按钮。

    站点复制会在每个站点的root用户下添加一个svcacct,以执行复制活动。

  6. 选择**保存**

  7. 选择复制状态按钮以验证复制是否已在对等站点之间完成。

    任何可复制数据都应显示为已成功同步。

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

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

这三个站点使用别名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. 在浏览器中,访问一个现有复制站点的控制台

    例如,https://<addressforsite>:9000

  3. 选择**设置**,然后选择**站点复制**

  4. 选择添加站点 +

  5. 进行以下条目

    访问密钥:

    (必填) 用于登录每个站点的用户名。在所有站点中都应相同。

    密钥:

    (必填) 用于登录每个站点的用户名的密码。在所有站点中都应相同。

    站点名称:

    用于站点名称的别名。

    端点:

    (必填) 管理到站点的连接的负载均衡器的主机名或 IP。

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

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

    要添加两个站点以外的其他站点,请选择最后一个站点条目旁边的+按钮。

  6. 选择保存

  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. 在浏览器中,访问其中一个复制站点的控制台

    例如,https://<addressforsite>:9000

  2. 选择**设置**,然后选择**站点复制**

  3. 选择要更新的站点旁边的铅笔编辑图标

  4. 进行以下条目

    新端点:

    (必填) 要使用的新的端点地址和端口。

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

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

  5. 选择更新

  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 建议不要对对等站点使用单个节点主机名。这会创建一个单点故障:如果该节点离线,则复制将失败。

从复制中删除站点

您可以随时从复制中删除站点。您可以在以后重新添加站点,但必须首先完全擦除站点上的桶和对象数据。

  1. 在浏览器中,访问其中一个复制站点的控制台

    例如,https://<addressforsite>:9000

  2. 选择**设置**,然后选择**站点复制**

  3. 选择要更新的站点旁边的垃圾桶删除图标

  4. 通过选择删除确认提示中的站点删除

使用mc admin replicate rm

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

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

站点复制配置中的所有正常对等方都会自动更新以删除指定的对等方。

MinIO 要求使用 --force 标志才能从站点复制配置中删除对等方。

查看复制状态

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

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

  1. 在浏览器中,访问其中一个复制站点的控制台

    例如,https://<addressforsite>:9000

  2. 选择**设置**,然后选择**站点复制**

  3. 选择复制状态

  4. (可选) 查看特定项目的复制状态

    查看以下项目的复制状态:下拉菜单中选择要查看的项目类型

    指定要查看的特定桶、组、策略或用户的名称

  5. (可选) 通过选择刷新更新信息

使用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