Welcome to the upcoming version of the MinIO Documentation! The content on this page is under active development and may change at any time. If you can't find what you're looking for, check our legacy documentation. Thank you for your patience.

Introduction

MinIO is a High Performance Object Storage released under Apache License v2.0. It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure for machine learning, analytics and application data workloads.

What Is Object Storage?

An object is binary data, sometimes referred to as a Binary Large OBject (BLOB). Blobs can be images, audio files, spreadsheets, or even binary executable code. Object Storage platforms like MinIO provide dedicated tools and capabilities for storing, retrieving, and searching for blobs.

MinIO Object Storage uses buckets to organize objects. A bucket is similar to a folder or directory in a filesystem, where each bucket can hold an arbitrary number of objects. MinIO buckets provide the same functionality as AWS S3 buckets.

For example, consider an application that hosts a web blog. The application needs to store a variety of blobs, including rich multimedia like videos and images. The structure of objects on the MinIO server might look similar to the following:

/ #root
/images/
   2020-01-02-MinIO-Diagram.png
   2020-01-03-MinIO-Advanced-Deployment.png
   MinIO-Logo.png
/videos/
   2020-01-04-MinIO-Interview.mp4
/articles/
   /john.doe/
      2020-01-02-MinIO-Object-Storage.md
      2020-01-02-MinIO-Object-Storage-comments.json
   /jane.doe/
      2020-01-03-MinIO-Advanced-Deployment.png
      2020-01-02-MinIO-Advanced-Deployment-comments.json
      2020-01-04-MinIO-Interview.md

MinIO supports multiple levels of nested directories and objects to support even the most dynamic object storage workloads.

Deployment Architecture

Erasure Set

A set of disks that supports MinIO Erasure Coding. Erasure Coding provides high availability, reliability, and redundancy of data stored on a MinIO deployment.

MinIO divides objects into chunks and evenly distributes them among each drive in the Erasure Set. MinIO can continue seamlessly serving read and write requests despite the loss of any single drive. At the highest redundancy levels, MinIO can serve read requests with minimal performance impact despite the loss of up to half (N/2) of the total drives in the deployment.

Server Pool

A set of MinIO minio server nodes which pool their drives and resources for supporting object storage/retrieval requests. The HOSTNAME argument passed to the minio server command represents a Server Pool:

minio server https://minio{1...4}.example.net/mnt/disk{1...4}

             |                    Server Pool                |

The above example describes a single Server Pool with 4 minio server nodes and 4 drives each for a total of 16 drives. MinIO requires starting each minio server in the set with the same startup command to enable awareness of all set peers.

See minio server for complete syntax and usage.

MinIO calculates the size and number of Erasure Sets in the Server Pool based on the total number of drives in the set and the number of minio servers in the set. See Erasure Sets for more information.

Cluster

The whole MinIO deployment consisting of one or more Server Pools. Each HOSTNAME argument passed to the minio server command represents one Server Pool:

minio server https://minio{1...4}.example.net/mnt/disk{1...4} \
             https://minio{5...8}.example.net/mnt/disk{1...4}

             |                    Server Pool                |

The above example describes two Server Pools, each consisting of 4 minio server nodes with 4 drives each for a total of 32 drives. MinIO always stores each unique object and all versions of that object on the same Server Pool.

Server Pool expansion is a function of Horizontal Scaling, where each new set expands the cluster storage and compute resources. Server Pool expansion is not intended to support migrating existing sets to newer hardware.

MinIO Standalone clusters consist of a single Server Pool with a single minio server node. Standalone clusters are best suited for initial development and evaluation. MinIO strongly recommends production clusters consist of a minimum of 4 minio server nodes in a Server Pool.

Deploying MinIO

Users deploying onto a Kubernetes cluster should start with our Kubernetes documentation.

For bare-metal environments, including private cloud services or containerized environments, install and run the minio server on each host in the MinIO deployment. See Deployment and Management for more information.