停用服务器池
MinIO支持停用和移除服务器池在具有两个或更多存储池的部署中。 要执行退役操作,必须至少保留一个具有足够可用空间的存储池,以接收来自退役存储池的对象。
从...开始RELEASE.2023-01-18T04-36-38ZMinIO 支持队列功能多个池在单个停用命令中。
列出的每个池立即进入只读状态,但排空操作会逐个池进行。
停用功能旨在移除较旧的服务器池,这些池的硬件性能或容量已无法与部署中的其他池相比。 MinIO 会根据每个池中可用空闲空间的比例,自动将数据从已停用的池迁移到部署中剩余的池。
在停用过程中,MinIO会将读取操作(例如GET, LIST, HEAD) 正常。
MinIO 路由写入操作(例如PUT版本化的DELETE) 到部署中剩余的"活动"池。
版本化对象在整个迁移过程中保持其顺序。
本页面的程序用于停用和移除一个或多个服务器池分布式MinIO 部署指南至少两个服务器池。
停用是永久性的
一旦 MinIO 开始停用一个存储池,就会将该池标记为永久地非活动(“排空中”)。 取消或以其他方式中断停用过程不会不将存储池恢复到活动状态。 在停用多个存储池时请格外小心。
停用是一项重大的管理操作,需要在规划和执行时谨慎对待,绝非琐碎或"日常"任务。
MinIO SUBNET用户可以使用登录并创建一个与下线相关的新问题。 通过与MinIO工程团队在SUBNET上进行协调,可以确保成功完成下线操作,包括性能测试和健康诊断。
社区用户可以在以下平台寻求支持:MinIO Community Slack社区支持仅为尽力而为,不保证响应时间的服务等级协议。
前提条件
首先备份集群设置
使用mc admin cluster bucket export和mc admin cluster iam export在开始停用之前分别拍摄存储桶元数据和IAM配置快照的命令。
您可以使用这些快照在必要时恢复存储桶/IAM设置,以从用户或流程错误中恢复。
网络与防火墙
每个节点应该能够与部署中的其他每个节点建立完全的双向网络连接。对于容器化或编排的基础设施,这可能需要对网络和路由组件(如入口或负载均衡器)进行特定配置。某些操作系统可能还需要设置防火墙规则。例如,以下命令显式打开默认的MinIO服务器API端口9000在使用服务器时firewalld:
firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --reload
如果你设置了静态MinIO 控制台端口(例如:9001你必须也授予该端口访问权限,以确保外部客户端的连接。
MinIO强烈推荐使用负载均衡器来管理到集群的连接。负载均衡器应使用"最少连接"算法将请求路由到MinIO部署,因为部署中的任何MinIO节点都可以接收、路由或处理客户端请求。
以下负载均衡器已知与 MinIO 兼容良好:
配置防火墙或负载均衡器以支持 MinIO 超出了本流程的范围。
部署必须具有足够的存储空间
停用过程将对象从目标池迁移到部署中的其他池。 部署中的总可用存储空间必须超过已停用池的总存储容量。
使用Erasure Code Calculator确定可用的存储容量。 然后减去部署中已有对象的大小。
例如,考虑一个具有以下已用和空闲存储分布的部署:
Pool 1 |
100TB 已使用 |
200TB 总容量 |
|---|---|---|
Pool 2 |
100TB 已使用 |
200TB 总容量 |
Pool 3 |
100TB 已使用 |
200TB 总容量 |
停用存储池1需要将100TB的已使用存储空间分配到剩余存储池中。 存储池2和存储池3各自拥有100TB的未使用存储空间,可以安全地吸收存储池1上的数据。
然而,如果存储池1已满(例如已使用200TB空间),停用该存储池将完全占满剩余存储池的空间,并可能阻止任何进一步的写入操作。
注意事项
替换服务器池
在硬件升级周期中,当您用新存储池替换旧存储池硬件时,您应该通过扩展添加新池在开始停用旧存储池之前。 首先添加新存储池可以让停用过程以平衡的方式在所有可用存储池(包括现有和新存储池)之间传输对象。
完成任何计划好的硬件扩展在停用旧硬件池之前。
停用过程要求集群的拓扑结构在池排空过程中保持稳定。不尝试在单个步骤中执行扩展和停用变更。
停用操作可恢复
如果因部署重启或网络故障等瞬态问题中断,MinIO 会继续执行停用操作。
对于手动取消或失败的退役尝试,MinIO 只会在您手动重新启动退役操作后继续执行。
池子仍处于停用状态无论如何中断。 一个池可以从不在退役开始后恢复活动状态。
停用操作是无中断的
停用服务器池的移除需要重启操作全部MinIO 部署中的节点大约在同一时间。
MinIO 强烈建议同时重启部署中的所有 MinIO 服务器进程。 MinIO 操作具有原子性和严格一致性。 因此,重启过程不会中断应用程序和正在进行的操作。
Do 不执行"滚动"(例如一次一个节点)重启。
停用忽略过期对象和尾随DeleteMarker
从...开始RELEASE.2023-05-27T05-56-19Z停用会忽略那些仅剩版本为删除标记的对象。DeleteMarker这避免了在剩余服务器池中为实际上已完全删除的对象创建空元数据。
从...开始RELEASE.2023-06-23T20-26-00Z停用操作也会忽略基于配置已过期的对象版本。生命周期规则对于父存储桶。
从以下版本开始:RELEASE.2023-06-29T05-12-28Z您可以在退役过程中监控被忽略的删除标记和过期的对象mc admin trace --call decommission.
一旦退役过程完成,您就可以安全地关闭该存储池。
因为剩余的唯一数据已被安排删除or只是一个DeleteMarker根据您的内部流程,您可以安全地清除或销毁这些驱动器。
行为
最终清单检查
在停用过程结束时,MinIO 会检查存储池中的项目列表。 如果列表返回为空,MinIO 会将停用标记为成功完成。 如果返回任何对象,MinIO 将返回停用过程失败的错误。
如果退役失败,客户应打开一个MinIO SUBNET在重试停用之前,请寻求进一步协助。 没有SUBNET订阅的社区用户可以重试停用流程,或通过以下方式寻求额外支持:MinIO Community SlackMinIO 仅提供尽力而为的社区支持,不提供任何SLA围绕响应性。
停用启用分层功能的服务器
在版本 RELEASE.2023-03-20T20-16-18Z 中更改。
对于启用了分层功能且处于活动状态的部署,停用操作会将对象引用移动到新的活动存储池。 应用程序可以继续对这些对象发出GET请求,MinIO会透明地处理从远程层检索这些对象的过程。
在旧版 MinIO 中,分层配置会阻止退役操作。
停用服务器池
1) 评审MinIO部署拓扑
Themc admin decommission该命令返回 MinIO 部署中的所有存储池列表:
mc admin decommission status myminio
该命令返回的输出类似于以下内容:
┌─────┬────────────────────────────────────────────────────────────────┬──────────────────────────────────┬────────┐
│ ID │ Pools │ Capacity │ Status │
│ 1st │ https://minio-{01...04}.example.com:9000/mnt/disk{1...4}/minio │ 10 TiB (used) / 10 TiB (total) │ Active │
│ 2nd │ https://minio-{05...08}.example.com:9000/mnt/disk{1...4}/minio │ 60 TiB (used) / 100 TiB (total) │ Active │
│ 3rd │ https://minio-{09...12}.example.com:9000/mnt/disk{1...4}/minio │ 40 TiB (used) / 100 TiB (total) │ Active │
└─────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────┴────────┘
上述示例部署包含三个池。每个池有四台服务器,每台服务器配备四个驱动器。
确定要停用的目标池并检查当前容量。 部署中的剩余池必须有足够的总容量来迁移停用存储池中存储的所有对象。
在上面的示例中,该部署总共有210TiB存储空间,其中已使用110TiB。
第一个池(minio-{01...04}) 是停用目标,因为该池在 MinIO 部署创建时被配置且目前已完全写满。其余较新的存储池可以承接第一个池上的所有对象存储,而不会显著影响总体可用存储容量。
2) 启动退役流程
停用是永久性的
一旦 MinIO 开始停用一个存储池,就会将该池标记为永久地inactive (“draining”). 取消或以其他方式中断 decommissioning 程序不会不将池恢复到活动状态。
审查并确认您正在停用正确的存储池之前运行以下命令。
使用mc admin decommission start开始停用目标池的命令。指定别名部署的详细信息以及要停用的池的完整描述,包括所有主机、磁盘和文件路径。
mc admin decommission start myminio/ https://minio-{01...04}.example.net:9000/mnt/disk{1...4}/minio
示例命令开始停用匹配的服务器池myminio部署。
在停用过程中,MinIO 继续路由读取操作(GET, LIST, HEAD) 到存储池中,用于那些尚未迁移的对象。MinIO 将所有新的写入操作(PUT) 到部署中的其余池。
负载均衡器、反向代理或其他管理部署连接的网络控制组件目前无需修改其配置。
3) 监控退役流程
使用mc admin decommission status监控退役过程的命令。
mc admin decommission status myminio
该命令返回的输出类似于以下内容:
┌─────┬────────────────────────────────────────────────────────────────┬──────────────────────────────────┬──────────┐
│ ID │ Pools │ Capacity │ Status │
│ 1st │ https://minio-{01...04}.example.com:9000/mnt/disk{1...4}/minio │ 10 TiB (used) / 10 TiB (total) │ Draining │
│ 2nd │ https://minio-{05...08}.example.com:9000/mnt/disk{1...4}/minio │ 60 TiB (used) / 100 TiB (total) │ Active │
│ 3rd │ https://minio-{09...12}.example.com:9000/mnt/disk{1...4}/minio │ 40 TiB (used) / 100 TiB (total) │ Active │
└─────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────┴──────────┘
您可以通过向命令指定服务器池的描述来获取更详细的信息:
mc admin decommission status myminio https://minio-{01...04}.example.com:9000/mnt/disk{1...4}/minio
该命令返回的输出类似于以下内容:
Decommissioning rate at 100MiB/sec [1TiB/10TiB]
Started: 30 minutes ago
mc admin decommission status标记状态 as
完成一旦退役完成。一旦退役完成,您就可以继续进行下一步。
If 状态读取失败,您可以重新运行mc admin decommission start恢复进程的命令。
对于持续故障,请使用mc admin logs或审查systemd日志(例如journalctl -u minio) 以识别更具体的错误。
4) 从部署配置中移除已停用的池
当每个池完成停用后,您可以安全地将其从部署配置中移除。修改部署中每个剩余 MinIO 服务器的启动命令,并移除已停用的池。
The.deb or .rpmpackages install asystemd服务文件到/lib/systemd/system/minio.service对于二进制安装,此
过程假设文件是按照以下方式手动创建的:安装与管理过程。
Theminio.servicefile 使用位于的环境文件/etc/default/minio用于获取配置设置,包括
启动设置。具体来说,MINIO_VOLUMESvariable sets the startup
command:
cat /etc/default/minio | grep "MINIO_VOLUMES"
该命令返回的输出类似于以下内容:
MINIO_VOLUMES="https://minio-{1...4}.example.net:9000/mnt/disk{1...4}/minio https://minio-{5...8}.example.net:9000/mnt/disk{1...4}/minio https://minio-{9...12}.example.net:9000/mnt/disk{1...4}/minio"
编辑环境文件并从中移除已停用的池MINIO_VOLUMES值。
5) 更新网络控制平面
更新所有负载均衡器、反向代理或其他网络控制平面, 从 MinIO 部署的连接配置中移除已停用的服务器池。
配置网络控制平面组件的具体说明不在本流程的范围内。
6) 重启 MinIO 部署
在每个节点上执行以下命令同时在部署中 要重启 MinIO 服务:
sudo systemctl restart minio.service
使用以下命令确认服务在线且功能正常:
sudo systemctl status minio.service
journalctl -f -u minio.service
MinIO 在服务器进程连接和同步期间可能会记录数量增加的非关键警告。这些警告通常是暂时性的,应在部署上线后自行解决。
MinIO 强烈建议同时重启部署中的所有 MinIO 服务器进程。 MinIO 操作具有原子性和严格一致性。 因此,重启过程不会中断应用程序和正在进行的操作。
Do 不执行"滚动"(例如一次一个节点)重启。
一旦部署上线,请使用mc admin info确认部署中所有剩余服务器的运行时间。
停用多个服务器池
在版本 RELEASE.2023-01-18T04-36-38Z 中更改。
您可以在发出停用命令时启动多个服务器池的停用流程。
输入命令后:
MinIO 会立即停止对要停用的所有池的写入访问。
退役操作一次只针对一个存储池进行。
每个池在MinIO开始排空下一个池之前完成退役排空过程。
要在一个命令中停用多个服务器池,请将要停用的每个服务器池的完整描述以逗号分隔列表的形式添加。
在对多台服务器执行退役流程时,所有其他相关注意事项同样适用。
停用是永久性的。
一旦您将存储池标记为已停用,您无法恢复它们。
确认您选择了预期的池。
1) 评审MinIO部署拓扑
Themc admin decommission该命令返回 MinIO 部署中的所有存储池列表:
mc admin decommission status myminio
该命令返回的输出类似于以下内容:
┌─────┬────────────────────────────────────────────────────────────────┬──────────────────────────────────┬────────┐
│ ID │ Pools │ Capacity │ Status │
│ 1st │ https://minio-{01...04}.example.com:9000/mnt/disk{1...4}/minio │ 10 TiB (used) / 10 TiB (total) │ Active │
│ 2nd │ https://minio-{05...08}.example.com:9000/mnt/disk{1...4}/minio │ 95 TiB (used) / 100 TiB (total) │ Active │
│ 3rd │ https://minio-{09...12}.example.com:9000/mnt/disk{1...4}/minio │ 40 TiB (used) / 500 TiB (total) │ Active │
│ 4th │ https://minio-{13...16}.example.com:9000/mnt/disk{1...4}/minio │ 0 TiB (used) / 500 TiB (total) │ Active │
└─────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────┴────────┘
上述示例部署包含三个存储池。 每个存储池有四台服务器,每台服务器配备四个驱动器。
确定要停用的目标池并检查当前容量。 部署中的剩余池必须有足够的总容量来迁移停用池中存储的所有对象。
在上面的示例中,该部署总存储容量为1110TiB,已使用145TiB。
第一个池子(
minio-{01...04}) 是第一个停用目标,因为它在 MinIO 部署创建时被配置且目前已完全写满。第二个池子(
minio-{05...08}) 是第二个停用目标,因为它在 MinIO 部署创建时也被配置了,并且几乎已满。第四个池子(
minio-{13...16}) 是一个新增的存储池,配备了服务器扩容完成后新增的硬件设备。
第三个和第四个存储池可以吸收第一个存储池上存储的所有对象,而不会显著影响总可用存储容量。
重要
在开始停用流程_之前_,完成所有服务器扩展以添加新的存储资源。
2) 启动退役流程
停用是永久性的
一旦 MinIO 开始停用存储池,它会将这些存储池标记为永久地非活动(“排空中”)。 取消或以其他方式中断停用过程不会不将池恢复到活动状态。
审查并确认您正在停用正确的存储池之前运行以下命令。
使用mc admin decommission start开始停用目标池的命令。
指定别名部署的详细信息以及要停用的每个池的完整描述(包括所有主机、磁盘和文件路径)的逗号分隔列表。
mc admin decommission start myminio/ https://minio-{01...04}.example.net:9000/mnt/disk{1...4}/minio,https://minio-{05...08}.example.net:9000/mnt/disk{1...4}/minio
示例命令开始停用列出的两个匹配服务器池。myminio部署。
在停用过程中,MinIO 继续路由读取操作(GET, LIST, HEAD) 操作路由到尚未迁移对象的存储池。
MinIO 将所有新的写入操作(PUT) 部署中未计划停用的其余池。
退役存储池的排空操作每次只处理一个池,按顺序完成每个池的退役过程。 所有正在退役的存储池_不会_同时进行排空操作。
负载均衡器、反向代理或其他管理部署连接的网络控制组件目前无需修改其配置。
3) 监控退役流程
使用mc admin decommission status监控退役过程的命令。
mc admin decommission status myminio
该命令返回的输出类似于以下内容:
┌─────┬────────────────────────────────────────────────────────────────┬──────────────────────────────────┬──────────┐
│ ID │ Pools │ Capacity │ Status │
│ 1st │ https://minio-{01...04}.example.com:9000/mnt/disk{1...4}/minio │ 10 TiB (used) / 10 TiB (total) │ Draining │
│ 2nd │ https://minio-{05...08}.example.com:9000/mnt/disk{1...4}/minio │ 95 TiB (used) / 100 TiB (total) │ Pending │
│ 3rd │ https://minio-{09...12}.example.com:9000/mnt/disk{1...4}/minio │ 40 TiB (used) / 500 TiB (total) │ Active │
│ 4th │ https://minio-{13...16}.example.com:9000/mnt/disk{1...4}/minio │ 0 TiB (used) / 500 TiB (total) │ Active │
└─────┴────────────────────────────────────────────────────────────────┴──────────────────────────────────┴──────────┘
您可以通过向命令指定服务器池的描述来获取更详细的信息:
mc admin decommission status myminio https://minio-{01...04}.example.com:9000/mnt/disk{1...4}/minio
该命令返回的输出类似于以下内容:
Decommissioning rate at 100MiB/sec [1TiB/10TiB]
Started: 30 minutes ago
mc admin decommission status标记状态 as 完成一旦所有存储池的 MinIO 停用完成。
您可以在 MinIO 完成所有存储池的停用后继续下一步。
If 状态读取失败,您可以重新运行mc admin decommission start恢复进程的命令。
对于持续故障,请使用mc admin logs或查看systemd日志(例如journalctl -u minio) 以识别更具体的错误。
4) 从部署配置中移除已停用的资源池
一旦退役完成,您就可以安全地从部署配置中移除这些存储池。 修改部署中每个剩余 MinIO 服务器的启动命令,并移除已退役的存储池。
The.deb or .rpmpackages install asystemd服务文件到/lib/systemd/system/minio.service对于二进制安装,此过程假设文件是按照安装与管理过程。
Theminio.servicefile 使用位于的环境文件/etc/default/minio用于获取配置设置,包括启动配置。
具体来说,MINIO_VOLUMESvariable sets the startup command:
cat /etc/default/minio | grep "MINIO_VOLUMES"
该命令返回的输出类似于以下内容:
MINIO_VOLUMES="https://minio-{1...4}.example.net:9000/mnt/disk{1...4}/minio https://minio-{5...8}.example.net:9000/mnt/disk{1...4}/minio https://minio-{9...12}.example.net:9000/mnt/disk{1...4}/minio"
编辑环境文件并从其中移除已停用的池MINIO_VOLUMES值。
5) 更新网络控制平面
更新所有负载均衡器、反向代理或其他网络控制平面,从 MinIO 部署的连接配置中移除已停用的服务器池。
配置网络控制平面组件的具体说明不在本流程的讨论范围内。
6) 重启 MinIO 部署
在每个节点上执行以下命令同时在部署中重启 MinIO 服务:
sudo systemctl restart minio.service
使用以下命令确认服务在线且功能正常:
sudo systemctl status minio.service
journalctl -f -u minio.service
MinIO 在服务器进程连接和同步期间可能会记录数量增加的非关键警告。这些警告通常是暂时性的,应在部署上线后自行解决。
MinIO 强烈建议同时重启部署中的所有 MinIO 服务器进程。 MinIO 操作具有原子性和严格一致性。 因此,重启过程不会中断应用程序和正在进行的操作。
Do 不执行"滚动"(例如一次一个节点)重启。
一旦部署上线,请使用mc admin info确认部署中所有剩余服务器的运行时间。