部署架构
此页面从生产角度概述了 MinIO 部署架构。有关特定硬件或软件配置的信息,请参见
分布式 MinIO 部署
- 生产环境的 MinIO 部署至少包含 4 个 MinIO 主机,具有同构的存储和计算资源。
MinIO 将这些资源聚合在一起作为池,并呈现为单个对象存储服务。
- 当使用本地连接的存储(例如连接到主机上 PCI-E 控制器板的 NVMe 或 SSD 驱动器)时,MinIO 可提供最佳性能。
存储控制器应以“Just a Bunch of Drives”(JBOD)配置呈现 XFS 格式的驱动器,没有 RAID、池化或其他硬件/软件弹性层。MinIO 建议不要使用缓存,无论是驱动器层还是控制器层。任何类型的缓存都可能导致I/O 尖峰,因为缓存会填满和清除,从而导致性能不可预测。
- MinIO 会自动将池中的驱动器分组到擦除集中。
擦除集是 MinIO 可用性和弹性 的基础组件。MinIO 对称地将擦除集跨池中的节点进行条带化,以保持擦除集驱动器的均匀分布。然后,MinIO 根据部署奇偶校验 将对象划分为数据和奇偶校验分片,并将它们分布到擦除集中。
- MinIO 使用基于对象名称和路径的确定性哈希算法来选择给定对象的擦除集。
对于每个唯一的对象命名空间
BUCKET/PREFIX/[PREFIX/...]/OBJECT.EXTENSION
,MinIO 始终为读/写操作选择相同的擦除集。MinIO 处理池和擦除集内的所有路由,使选择/读取/写入过程对应用程序完全透明。- 每个 MinIO 服务器都拥有分布式拓扑的完整视图,这样应用程序就可以连接并针对部署中的任何节点执行操作。
响应的 MinIO 节点会自动处理将内部请求路由到部署中的其他节点以及将最终响应返回给客户端的操作。
应用程序通常不应该管理这些连接,因为对部署拓扑的任何更改都需要更新应用程序。生产环境应该改为部署负载均衡器或类似的网络控制平面组件来管理与 MinIO 部署的连接。例如,可以部署 NGINX 负载均衡器来针对部署中可用的节点执行“最少连接”或“轮询”负载均衡。
- 可以通过 池扩展 扩展 MinIO 部署的可用存储。
每个池都包含一个独立的节点组,这些节点组拥有自己的擦除集。MinIO 必须查询每个池以确定它将读取和写入操作定向到的正确擦除集,这样每个附加池都会增加每次调用时的节点间流量。包含正确擦除集的池随后会响应操作,对应用程序来说完全透明。
如果通过池扩展修改了 MinIO 拓扑,可以通过修改负载均衡器以包含新池的节点来更新应用程序。应用程序可以继续使用负载均衡器地址来访问 MinIO 部署,而无需任何更新或修改。这确保了请求在所有池之间均匀分布,同时应用程序继续使用单个负载均衡器 URL 来执行 MinIO 操作。
- 客户端应用程序可以使用任何与 S3 兼容的 SDK 或库与 MinIO 部署进行交互。
MinIO 发布了自己的 SDK,专门用于与与 S3 兼容的部署一起使用。
MinIO 严格地实现了 S3 API,包括要求客户端使用 AWS Signature V4 或旧版 Signature V2 对所有操作进行签名。AWS 签名计算使用客户端提供的标头,这样负载均衡器、代理、安全程序或其他组件对这些标头的任何修改都会导致签名不匹配错误和请求失败。确保任何这样的中间组件都支持将未经修改的标头从客户端传送到服务器。
虽然 S3 API 使用诸如
GET
和POST
之类的 HTTP 方法来执行所有操作,但应用程序通常使用 SDK 来执行 S3 操作。特别是,签名计算的复杂性通常会使得通过curl
或类似的 REST 客户端进行交互变得不切实际。MinIO 建议使用与 S3 兼容的 SDK 或库,这些库会自动执行签名计算作为操作的一部分。
复制的 MinIO 部署
- MinIO 站点复制 提供了对同步不同的独立部署的支持。
可以在不同的机架、数据中心或地理区域部署对等站点,以支持诸如 BC/DR 或在全球分布式 MinIO 对象存储中进行地理位置读取/写入性能之类的功能。
- 复制性能主要取决于每个对等站点之间的网络延迟。
对于地理位置分散的对等站点,站点之间的高延迟会导致显著的复制延迟。这可能会与接近或处于部署整体性能容量的工作负载相叠加,因为复制过程本身需要足够的可用 I/O 来同步对象。
- 部署支持站点到站点故障转移协议的全球负载均衡器或类似的网络设备对于多站点部署的功能至关重要。
负载均衡器应该支持健康探测/检查设置,以检测一个站点的故障并自动将应用程序重定向到任何剩余的正常对等。
负载均衡器应该满足与单站点部署相同的连接均衡和标头保留要求。MinIO 复制通过将对象排队进行复制来处理瞬态故障。