站点复制概述
站点复制将多个独立的 MinIO 部署配置为称为对等站点的副本集群。
站点复制假定使用包含的MinIO身份提供程序(IDP) 或 外部IDP。 所有配置的部署必须使用相同的IDP。 使用外部IDP的部署必须在站点之间使用相同的配置。
有关站点复制架构和部署概念的更多信息,请参见 部署架构: Replicated MinIO Deployments。
概述
所有站点上都复制了哪些内容
每个 MinIO 部署(“对等站点”)都会在其他对等站点之间同步以下更改:
- 存储桶和对象的创建、修改和删除,包括 
- 创建和删除 IAM 用户、组、策略以及到用户或组的策略映射(对于 LDAP 用户或组) 
- 为可从本地 - root凭据验证的会话令牌创建安全令牌服务(STS)凭据
- 创建和删除 访问密钥 ( - root用户拥有的密钥除外)
站点复制 enables 桶版本控制 适用于所有复制站点上的所有新存储桶和现有存储桶。
以下内容不会在站点之间复制
站点复制配置中的 MinIO 部署 不 复制以下项目的创建或修改:
- 站点配置文件和设置 
初始站点复制过程
启用站点复制后,身份验证和访问管理(IAM)设置按以下顺序同步:
- 策略 
- 用户帐户 (针对本地用户) 
- 用户组 
- 访问密钥 - root账户的访问密钥未同步
- 已同步用户账户的策略映射 
- 安全令牌服务(STS)用户的策略映射,如 minio-security-token-service 所述 
- 策略 
- 具有有效 MinIO 策略 的 OIDC 账户关联的访问密钥。 - root访问密钥不会同步。
- 同步用户帐户的策略映射 
- 安全令牌服务 (STS) 用户 的策略映射 
- 策略 
- Groups 
- 与具有有效 MinIO 策略 的 LDAP 帐户关联的访问密钥。 - root访问密钥不同步。
- 同步用户帐户的策略映射 
- 安全令牌服务 (STS) 用户 的策略映射 
一旦对等站点之间的数据初始化同步完成,MinIO 就会持续不断地在所有站点之间复制和同步可复制的数据(即:replicable data),无论这些数据在哪个站点上发生。”
现场修复
站点复制配置中的任何 MinIO 部署都可以将来自对等方的损坏的 副本合格数据 与该数据的最新更新 (“最新”) 版本重新同步。
在 RELEASE.2023-07-18T17-49-40Z 版本发生变更: 站点复制操作最多会重试三(3)次。
在三次尝试后,MinIO 会取消未能成功复制的复制操作。 扫描器 会在稍后的时间捡起那些受影响的对象,并将它们重新排队以进行复制。
在 RELEASE.2022-08-11T04-37-28Z 版本发生变更: 在执行任何 GET 或 HEAD API 方法时,失败或挂起的复制操作会自动重新排队。
例如,在站点重新上线后,执行类似 mc stat, mc cat, 或 mc ls 命令会提示healing重新排队。
在 RELEASE.2022-12-02T23-48-47Z 版本发生变更: 如果某个站点因任何原因丢失了数据,请使用 mc admin replicate resync 命令从另一个正常站点同步数据。
这将启动一个主动进程,无需等待被动的 MinIO扫描器 识别缺失的数据即可完成数据重新同步。
您可以使用 MINIO_SCANNER_SPEED 环境变量或 scanner speed 配置设置来调整MinIO在扫描器性能与读/写操作之间的平衡。
同步与异步复制
MinIO 支持为给定的远程目标指定异步(默认)或同步复制。
通过异步复制,MinIO 在将对象放入  replication queue  之前 完成原始的 PUT 操作。
因此,在复制对象之前,原始客户端可能会看到成功的 PUT 操作。
虽然这可能会导致远程对象过时或丢失,但它可以减轻由于复制负载而导致写入操作缓慢的风险。
通过同步复制,MinIO 尝试在完成原始 PUT  操作之前复制对象。
无论复制尝试是否成功,MinIO 都会返回成功的 PUT  操作。
这降低了写入操作缓慢的风险,而可能导致远程位置上的对象过时或丢失。
MinIO强烈建议使用默认的异步站点复制方式。
同步站点复制的性能强烈依赖于站点之间的延迟,较高的延迟可能导致较低的PUT性能和复制滞后。
要配置同步站点复制,请使用 --mode 和 mc admin replicate update 选项。
代理到其他网站
MinIO节点站点可以代理 GET/HEAD 请求到其他节点上去验证对象是否存在。
这种功能使得处于修复过程中或者滞后于其他节点的站点仍能够检索到已经持久化在其他站点上的对象。
例如:
- 客户端向 - Site1发送了- GET("data/invoices/january.xls")的请求
- Site1无法找到所请求的对象。
- Site1将请求转发给了- Site2
- Site2响应了请求的对象的最新版本
- Site1将转发的对象返回给客户端。
对于 没有 包含唯一版本 ID 的 GET/HEAD 请求,转发的请求会返回对等站点上该对象的 最新 版本。
这可能会导致检索对象的非当前版本,例如响应对等站点也遇到复制滞后。
MinIO 不会转发 LIST , DELETE 和 PUT 操作。
先决条件
首先备份集群设置
在配置站点复制之前,分别使用 mc admin cluster bucket export 和 mc admin cluster iam export 命令创建存储桶元数据和 IAM 配置的快照。
如果在站点复制配置过程中出现错误配置,可以使用这些快照来恢复存储桶 / IAM 设置。
使用现有数据设置站点
在设置过程中,只有 一个 站点可以具有数据。 在设置过程中,其他站点不能有任何存储桶或对象。
一旦配置了站点复制,第一个部署中存在的任何数据都将复制到其他站点。
所有站点必须使用相同的 IDP
所有站点必须在使用 Identity Provider 方面保持一致。 站点复制功能支持MinIO内置的IDP,以及OIDC和LDAP。
所有站点必须使用相同的 MinIO 服务器版本
所有站点必须具有匹配且一致的MinIO 服务器版本。 在不匹配的MinIO 服务器版本之间配置站点复制可能会导致意外或不希望的复制行为。
此外,建议确保用于配置的 mc 版本与服务器版本密切匹配。
访问相同的加密服务
如果您计划使用通过密钥管理服务(KMS)实现的 SSE-S3 或 SSE-KMS 加密,则所有站点都必须能够访问中央KMS部署。
要实现这一目标,您可以使用中央KES服务器或多个KES服务器(每个站点一个),通过中央支持的 密钥库服务器 进行关联。
复制需要版本控制
值得注意的是,站点复制 需要 启用 桶版本控制,这将自动为所有新创建的存储桶启用版本控制。 请记住,在站点复制部署中,无法禁用版本控制。
请注意,MinIO无法复制存储桶中已排除版本控制的前缀内的对象。
在每个站点上都安装了负载均衡器
指定站点的负载均衡器、反向代理或类似网络控制平面组件的 URL 或 IP 地址。 请求会自动路由到部署中的节点。
MinIO 建议不要对对等站点使用单节点主机名。 这会产生单点故障:如果该节点脱机,复制就会失败。
从存储桶复制切换到站点复制
请注意, 存储桶复制 和多站点复制是互斥的。 在同一部署中无法同时使用两种复制方法
如果您之前设置了存储桶复制并希望现在使用站点复制,则必须首先删除初始化站点复制时具有数据的部署中的所有存储桶复制规则。
在命令行中使用 mc replicate rm 删除复制桶规则。
在设置站点复制时,只有一个站点可以拥有数据。 所有其他站点必须为空。
教程
配置站点复制
以下步骤将为三个 :ref:` 分布式部署 <deploy-minio-distributed>` 创建新的站点复制配置。 其中一个站点包含 replicable data 。
这三个站点使用别名 minio1 , minio2 和 minio3 ,只有 minio1 包含任何数据。
- 使用相同的 IDP 部署 Deploy 三个或更多独立的 MinIO 站点。 - 从空站点开始 或 不超过一个站点有任何 replicable data 。 
- 为每个站点配置别名 - 指定站点的负载均衡器、反向代理或类似网络控制平面组件的 URL 或 IP 地址。 请求会自动路由到部署中的节点。 - MinIO 建议不要对对等站点使用单节点主机名。 这会产生单点故障:如果该节点脱机,复制就会失败。 - 例如,可以为三个 MinIO 站点创建别名 - minio1,- minio2和- minio3。- 使用 - 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 
- 添加网站复制配置 - mc admin replicate add minio1 minio2 minio3 - 如果所有站点都是空的,别名的顺序并不重要。 如果其中一个站点包含任何 replicable data ,则必须先列出它。 - 不能有一个以上的站点包含任何可复制的数据。 
- 查询站点复制配置以验证 - mc admin replicate info minio1 - 您可以对站点复制配置中的任何对等站点使用别名。 
- 查询站点复制状态,以确认任何初始数据都已复制到所有对等站点。 - 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 有关查看站点复制的更多信息,请参考和阅读 :ref:`站点复制状态教程<minio-site-replication-status-tutorial>` 。 
扩展站点复制
可以通过包含其他站点来扩展现有的站点复制配置。
新站点必须符合以下要求:
- 网站已完全部署,可通过主机名或IP地址访问。 
- 与配置中的所有其他站点共享 IDP 配置。 
- 使用与其他配置站点相同的根用户凭据。 
- 不包含存储桶或对象数据。 
- 按照所述要求部署新的 MinIO 对等站点 
- 为新网站配置别名 - 指定站点的负载均衡器、反向代理或类似网络控制平面组件的 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 
- 添加站点复制配置 - 使用 - mc admin replicate add命令使用新对等站点扩展站点复制配置。 指定 所有 现有对等站点的别名,然后指定要添加的新站点的别名。- 例如,下面的命令将新的对等站点 - minio4添加到包括现有站点- minio1,- minio2和- minio3的现有站点复制配置中。- mc admin replicate add minio1 minio2 minio3 minio4 - 备注 - 如果任何站点无法访问或永久丢失,则 必须 先使用 - mc admin replicate rm删除无法访问的站点,然后再使用新站点进行扩展。
- 查询站点复制配置以验证 - mc admin replicate info minio1 
修改站点的端点
如果同级站点更改其主机名,则可以修改复制配置以反映新的主机名。
- 使用 - mc admin replicate info获取站点的部署 ID- mc admin replicate info <ALIAS> 
- 使用 - 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替换为复制配置中任何对等站点的 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存储桶的复制状态。- 输出类似于以下内容: - 显示 - minio3站点上- 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 
