Спробуйте MinIO – високоефективне сховище об’єктів, сумісне з S3

Розглядаєте можливість використання власного серверного рішення для зберігання об’єктів?

Ймовірно, так.

Сьогодні існує велика кількість хмарних сховищ, таких як AWS S3 та інші. Проте, якщо ваше завдання – розмістити дані безпосередньо на сервері, MinIO стане вашим надійним помічником у власних дата-центрах.

MinIO – це розповсюджене програмне забезпечення з відкритим вихідним кодом для розподіленого зберігання об’єктів, сумісне з S3. Воно позиціонується як рішення корпоративного рівня, відоме своєю вражаючою продуктивністю.

MinIO знайде застосування як у простих веб-застосунках, так і у великих системах обробки даних для аналітики та машинного навчання. Його функціонал покриває широкий спектр сценаріїв використання:

  • Стандартне сховище для файлів у плоскій структурі
  • Розподіл даних між різними хмарними середовищами
  • Аварійне відновлення даних
  • Аналіз даних

Чи є це програмне забезпечення важким і ресурсомістким?

Зовсім ні. Його розмір становить лише близько 50 МБ, що робить його ідеальним для використання з Kubernetes. MinIO зберігає дані та метадані як об’єкти, усуваючи необхідність у додатковій базі даних або спеціалізованому програмному забезпеченні для керування метаданими, що позитивно впливає на продуктивність.

Нижче наведена архітектура системи, взята з офіційного сайту.

Давайте розглянемо деякі з ключових особливостей MinIO.

  • Висока продуктивність – це його візитна картка. Здатний забезпечувати швидкість читання/запису до ~170 ГБ/с. Вражаюче, чи не так?
  • Масштабованість – можливість кластеризації та масштабування у міру потреби
  • Орієнтованість на хмарні технології
  • Захист даних за допомогою методу Erasure code
  • Підтримка декількох методів шифрування, включаючи AES-CBC, AES-256-GCM, ChaCha20
  • Сумісність з KMS
  • Аутентифікація додатків та користувачів
  • Сповіщення про події
  • Об’єднання з etcd та CoreDNS

MinIO – це відмінний вибір для програмно-визначеного сховища. Давайте розглянемо процес його встановлення.

Інсталяція сервера MinIO

Ви можете встановити MinIO на Linux, Windows, macOS, а також використовувати Kubernetes. Якщо ви бажаєте зібрати його з вихідного коду, то за наявності встановленого Golang, це також можливо.

У цьому прикладі я встановлю MinIO на CentOS, який розміщено на Kamatera.

  • Увійдіть на сервер.
  • Створіть каталог у необхідній файловій системі, наприклад, “minio-server”.
  • Перейдіть до створеного каталогу та виконайте команду wget:
wget https://dl.min.io/server/minio/release/linux-amd64/minio

Після цього буде завантажено бінарний файл, який буде виглядати приблизно так:

-rw-r--r--  1 root root 48271360 Oct 18 21:57 minio

Зробіть файл виконуваним за допомогою команди chmod:

chmod 755 minio

Тепер запустимо MinIO як сервер:

./minio server /data &

Параметр `/data` вказує на файлову систему, де MinIO буде зберігати об’єкти.

Запуск відбувається досить швидко, і ви побачите інформацію про запуск, подібну до наступної:

Endpoint:  http://xx.71.141.xx:9000 http://127.0.0.1:9000      
AccessKey: minioadmin 
SecretKey: minioadmin 

Browser Access:
   http://xx.71.141.xx:9000 http://127.0.0.1:9000      

Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide
   $ mc alias set myminio http://xx.71.141.xx:9000 minioadmin minioadmin

Object API (Amazon S3 compatible):
   Go:         https://docs.min.io/docs/golang-client-quickstart-guide
   Java:       https://docs.min.io/docs/java-client-quickstart-guide
   Python:     https://docs.min.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately using 'MINIO_ACCESS_KEY' and 'MINIO_SECRET_KEY'

Спробуємо отримати доступ до MinIO через браузер, використовуючи облікові дані за замовчуванням: `minioadmin:minioadmin`.

Інтерфейс користувача виглядає досить лаконічно та зрозуміло, але насамперед нам потрібно змінити облікові дані адміністратора за замовчуванням, оскільки це становить загрозу безпеці. Зміна облікових даних адміністратора через браузер неможлива, для цього необхідно використовувати змінні середовища.

Для зміни облікових даних MinIO за замовчуванням необхідно експортувати змінні `MINIO_ACCESS_KEY` та `MINIO_SECRET_KEY`, як показано нижче, та перезапустити MinIO:

export MINIO_ACCESS_KEY=techukraine.net
export MINIO_SECRET_KEY=geekpassword
./minio server /data &

Після цього ви не повинні бачити попередження про виявлення облікових даних за замовчуванням.

Спробуємо завантажити кілька файлів.

  • Натисніть на значок “+” у нижньому правому куті та створіть відро (bucket).
  • Я завантажив тестовий файл, і він одразу з’явився у браузері.

І на сервері:

[[email protected] geekflare]# ls -ltr
total 4
-rw-r--r-- 1 root root 11 Oct 19 11:09 MinIO-Test.txt
[[email protected] geekflare]#

При натисканні на кнопку “Поділитися файлом” у веб-інтерфейсі, ви отримаєте посилання для спільного доступу та зможете встановити термін його дії.

Клієнт MinIO

Клієнт MinIO – це потужний інструмент на кшталт `aws-cli`, що дозволяє керувати вашим сховищем. Клієнт доступний для Windows, macOS та Linux.

Щоб встановити його в Linux, виконайте наступні команди:

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod 755 mc

Виконайте команду `mc`, щоб переглянути довідку по командам:

[[email protected] ~]# ./mc
NAME:
  mc - MinIO Client for cloud storage and filesystems.

USAGE:
  mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]

COMMANDS:
  alias      set, remove and list aliases in configuration file
  ls         list buckets and objects
  mb         make a bucket
  rb         remove a bucket
  cp         copy objects
  mirror     synchronize object(s) to a remote site
  cat        display object contents
  head       display first 'n' lines of an object
  pipe       stream STDIN to an object
  share      generate URL for temporary access to an object
  find       search for objects
  sql        run sql queries on objects
  stat       show object metadata
  mv         move objects
  tree       list buckets and objects in a tree format
  du         summarize disk usage recursively
  retention  set retention for object(s)
  legalhold  manage legal hold for object(s)
  diff       list differences in object name, size, and date between two buckets
  rm         remove objects
  version    manage bucket versioning
  ilm        manage bucket lifecycle
  encrypt    manage bucket encryption config
  event      manage object notifications
  watch      listen for object notification events
  undo       undo PUT/DELETE operations
  policy     manage anonymous access to buckets and objects
  tag        manage tags for bucket and object(s)
  replicate  configure server side bucket replication
  admin      manage MinIO servers
  update     update mc to latest release
  
GLOBAL FLAGS:
  --autocompletion              install auto-completion for your shell
  --config-dir value, -C value  path to configuration folder (default: "/root/.mc")
  --quiet, -q                   disable progress bar display
  --no-color                    disable color theme
  --json                        enable JSON lines formatted output
  --debug                       enable debug output
  --insecure                    disable SSL certificate verification
  --help, -h                    show help
  --version, -v                 print the version
  
TIP:
  Use 'mc --autocompletion' to enable shell autocompletion

VERSION:
  RELEASE.2020-10-03T02-54-56Z
[[email protected] ~]#

Спробуємо переглянути список файлів, які я завантажив, за допомогою команди `mc`.

Спочатку нам потрібно встановити псевдонім для сховища, яким ми хочемо керувати:

[[email protected] ~]# ./mc alias set minio http://xx.71.141.xx:9000/ techukraine.net geekpassword
Added `minio` successfully.
[[email protected] ~]#
  • `minio` – це псевдонім, ви можете змінити його на будь-який зручний для вас.
  • Замініть HTTP-кінцеву точку на вашу.
  • Замініть ключ доступу та секретний ключ на ваші.

Для отримання списку використаємо команду `ls`, як показано нижче:

[[email protected] ~]# ./mc ls --recursive minio 
[2020-10-19 11:09:06 UTC]    11B techukraine.net/MinIO-Test.txt
[[email protected] ~]#

Чудово, все працює!

За допомогою клієнта можна робити практично все. Ви можете керувати не лише хмарним сховищем MinIO, але й GCS, AWS S3, Azure.

Детальнішу інформацію ви можете знайти у цьому короткому посібнику по клієнту.

MinIO SDK

Залежно від вашого технологічного стеку, ви можете програмно взаємодіяти зі сховищем об’єктів, використовуючи SDK. MinIO підтримує Go, Python, Node.js, .NET, Haskell та Java.

Шлюз MinIO

Використовуйте шлюз MinIO з S3, Azure, NAS, HDFS, щоб використовувати переваги браузера MinIO та кешування на диску.

Висновок

Якщо ви шукаєте приватне, гібридне або мультихмарне сховище об’єктів, MinIO є дуже перспективним варіантом. Спробуйте, і ви будете вражені. Для тестування ви можете скористатися MinIO VM на Kamatera або встановити його самостійно на будь-якому хмарному сервері.