站点复制概览
站点复制将多个相互独立的 MinIO 部署配置为一个由副本组成的集群,这些副本称为对等站点。
站点复制要求使用内置的 MinIO Identity Provider (IDP) 或 外部 IDP。 所有已配置的部署都必须使用同一个 IDP。 使用外部 IDP 的部署必须在各站点之间使用相同的配置。
有关站点复制架构和部署概念的更多信息,请参阅 Deployment Architecture: Replicated MinIO Deployments。
除早期开发、评估或一般性实验外,MinIO 不建议在站点复制中使用 MacOS、Windows 或未编排的容器化部署。 生产环境请使用 Linux 或 Kubernetes
概览
所有站点之间会复制哪些内容
每个 MinIO 部署(“对等站点”)都会将以下变更同步到其他对等站点:
存储桶和对象的创建、修改与删除,包括
存储桶与对象配置
锁定,包括保留和 legal hold 配置
IAM 用户、组、策略以及策略到用户或组的映射(针对 LDAP 用户或组)的创建与删除
为可由本地
root凭证验证的会话令牌创建 Security Token Service (STS) 凭证访问密钥 的创建与删除 (不包括
root用户拥有的访问密钥)
站点复制会在所有复制站点上,为所有新建和现有存储桶启用 存储桶版本控制。
New in version mc: RELEASE.2023-12-02T02-03-28Z
你可以选择在对等站点之间复制 ILM 过期规则。
对于新的站点复制配置,可使用带有
--replicate-ilm-expiry 标志的
mc admin replicate add。
对于现有站点复制配置,则可根据需要使用 mc admin replicate update
配合 --enable-ilm-expiry-replication
或 --disable-ilm-expiry-replication
标志启用或禁用该行为。
哪些内容不会在站点之间复制
处于站点复制配置中的 MinIO 部署 不会 复制以下项目的创建或修改:
站点复制的初始流程
启用站点复制后,身份与访问管理(IAM)设置会按以下顺序同步:
策略
用户账户(针对本地用户)
组
Access Keys
root的 Access Keys 不会同步。已同步用户账户的策略映射
策略
与具有有效 MinIO Policy 的 OIDC 账户关联的 Access Keys。
root的 Access Keys 不会同步。已同步用户账户的策略映射
策略
组
与具有有效 MinIO Policy 的 LDAP 账户关联的 Access Keys。
root的 Access Keys 不会同步。已同步用户账户的策略映射
在对等站点之间完成初始数据同步后,MinIO 会持续在所有站点之间复制并同步任何站点上新发生的 可复制数据。
站点自愈
站点复制配置中的任意 MinIO 部署,都可以从拥有该数据最新版本的对等站点重新同步受损的 可复制数据。
Changed in version RELEASE.2023-07-18T17-49-40Z: 站点复制操作最多重试三(3)次。
对于重试三次后仍复制失败的操作,MinIO 会将其移出队列。 scanner 会在稍后重新扫描这些受影响对象,并将其重新加入复制队列。
Changed in version RELEASE.2022-08-11T04-37-28Z: 执行任意 GET 或 HEAD API 方法时,失败或待处理的复制会自动重新入队。
例如,某个站点恢复在线后,使用 mc stat、mc cat 或 mc ls 命令会触发自愈重新入队。
Changed in version RELEASE.2022-12-02T23-48-47Z: 如果某个站点因任何原因丢失数据,可使用 mc admin replicate resync 从另一个健康站点重新同步数据。
这会启动一个主动进程来重新同步数据,而无需等待被动的 MinIO scanner 识别缺失数据。
你可以使用 MINIO_SCANNER_SPEED 环境变量或
scanner speed 配置项,
调整 MinIO 在扫描器性能与读写操作之间的平衡方式。
同步复制与异步复制
对于给定的远端目标,MinIO 支持指定异步复制(默认)或同步复制。
在异步复制模式下,MinIO 会在将对象放入
复制队列 之前 完成发起的 PUT 操作。
因此,发起请求的客户端可能会在对象完成复制 之前 就看到 PUT 操作成功。
虽然这可能导致远端对象陈旧或缺失,但它降低了因复制负载而导致写入变慢的风险。
在同步复制模式下,MinIO 会在完成发起的 PUT 操作 之前 尝试复制对象。
无论复制尝试是否成功,MinIO 都会返回一个成功的 PUT 操作结果。
这降低了写入变慢的风险,但代价是远端位置可能出现陈旧或缺失对象。
MinIO 强烈建议使用默认的异步站点复制。
同步站点复制的性能高度依赖站点之间的延迟,较高的延迟可能导致更低的 PUT 性能和复制滞后。
要配置同步站点复制,请使用 mc admin replicate update 并带上 --mode 选项。
代理到其他站点
MinIO 对等站点可以将对象的 GET/HEAD 请求代理到其他对等站点,以检查该对象是否存在。
这样一来,即使某个站点正在自愈或落后于其他对等站点,仍然可以返回已持久化到其他站点的对象。
例如:
客户端向
Site1发起GET("data/invoices/january.xls")Site1无法定位该对象Site1将请求代理到Site2Site2返回请求对象的最新版本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 Server 版本
所有站点都必须使用一致且匹配的 MinIO Server 版本。 在 MinIO Server 版本不匹配的站点之间配置复制,可能导致意外或不符合预期的复制行为。
还应确保用于配置复制的 mc 版本尽量与服务器版本保持接近。
访问同一个加密服务
如果通过 Key Management Service (KMS) 使用 SSE-S3 或 SSE-KMS 加密,则所有站点都必须能够访问同一个中心化 KMS 部署。
可以通过一个中心化 KES 服务器,或多个 KES 服务器(例如每个站点一个)连接到同一个受支持的中心化 key vault server 来实现。
复制要求启用版本控制
站点复制*要求*启用 存储桶版本控制,并会自动为所有新建存储桶启用该功能。 在站点复制部署中,不能禁用版本控制。
对于存储桶中被排除在版本控制之外的前缀,MinIO 无法复制其中的对象。
每个站点都应部署负载均衡器
指定该站点的负载均衡器、反向代理或类似网络控制平面组件的 URL 或 IP 地址。 请求会自动路由到部署中的各个节点。
MinIO 不建议为对等站点使用单个节点主机名。 这会形成单点故障:如果该节点离线,复制就会失败。
从存储桶复制切换到站点复制
存储桶复制 与多站点复制是互斥的。 不能在同一组部署上同时使用这两种复制方式。
如果此前已经配置了存储桶复制,而现在希望改用站点复制,则在初始化站点复制时,必须先删除包含数据的那个部署上的全部存储桶复制规则。
可在命令行中使用 mc replicate rm 删除存储桶复制规则。
设置站点复制时,只允许一个站点包含数据。 其他所有站点都必须为空。
教程
配置站点复制
以下步骤将为三个 分布式部署 创建一个新的站点复制配置。 其中一个站点包含 可复制数据。
这三个站点分别使用别名 minio1、minio2 和 minio3,且仅 minio1 包含数据。
使用相同的 IDP,部署 三个或更多彼此独立的 MinIO 站点
从空站点开始,或 确保最多只有一个站点包含任何 可复制数据。
为每个站点配置别名
指定该站点的负载均衡器、反向代理或类似网络控制平面组件的 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
如果所有站点均为空,则别名顺序无关紧要。 如果其中一个站点包含任何 可复制数据,则必须将其列在第一位。
最多只能有一个站点包含可复制数据。
查询站点复制配置进行验证
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
有关检查站点复制的更多信息,请参阅 站点复制状态教程。
扩展站点复制
可以向现有站点复制配置中添加更多站点。
新站点必须满足以下要求:
站点已完成部署,并可通过主机名或 IP 访问
与配置中的其他站点共享相同的 IDP 配置
使用与其他已配置站点相同的 root 用户凭证
不包含任何存储桶或对象数据
按照上述要求部署新的 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
Note
如果任一站点不可达或已永久丢失,则在使用新站点进行扩展前,必须先使用
mc admin replicate rm移除不可达站点。查询站点复制配置进行验证
mc admin replicate info minio1
修改站点的端点
如果某个对等站点变更了主机名,可以修改复制配置以反映新的主机名。
使用
mc admin replicate info获取站点的 Deployment IDmc admin replicate info <ALIAS>
使用
mc admin replicate update更新站点的端点mc admin replicate update ALIAS --deployment-id [DEPLOYMENT-ID] --endpoint [NEW-ENDPOINT]
将 [DEPLOYMENT-ID] 替换为要更新站点的 deployment ID。
将 [NEW-ENDPOINT] 替换为该站点的新端点。
指定该站点的负载均衡器、反向代理或类似网络控制平面组件的 URL 或 IP 地址。 请求会自动路由到部署中的各个节点。
MinIO 不建议为对等站点使用单个节点主机名。 这会形成单点故障:如果该节点离线,复制就会失败。
从复制中移除站点
可以随时将某个站点从复制中移除。 后续也可以重新添加该站点,但必须先彻底清除该站点上的存储桶和对象数据。
mc admin replicate rm ALIAS PEER_TO_REMOVE --force
将
ALIAS替换为复制配置中任意对等站点的 alias。将
PEER_TO_REMOVE替换为要移除的对等站点别名。
站点复制配置中的所有健康对等站点都会自动更新,以移除指定的对等站点。
MinIO 要求使用 --force 标志,才能将该对等站点从站点复制配置中移除。
查看复制状态
MinIO 提供跨站点的用户、组、策略或存储桶复制信息。
汇总信息包括各类别中 Synced 和 Failed 项目的数量。
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