Wypróbuj MinIO — samoobsługową obiektową pamięć masową zgodną z S3 o wysokiej wydajności

Photo of author

By maciekx

Poszukujesz rozwiązania do przechowywania obiektów, które mógłbyś hostować na własnym serwerze?

Zakładam, że tak!

Na rynku dostępne są liczne magazyny obiektowe oparte na chmurze, jak na przykład AWS S3, o których już wspominałem. Jeśli jednak preferujesz kontrolę nad danymi i chcesz je przechowywać na swoim serwerze, MinIO może być idealnym rozwiązaniem dla Twojego centrum danych.

MinIO to popularne, rozproszone oprogramowanie open source do przechowywania obiektów, które w pełni współpracuje z S3. Jest zaprojektowane do zastosowań korporacyjnych i wyróżnia się wysoką wydajnością.

MinIO znajdzie zastosowanie zarówno w prostych aplikacjach internetowych, jak i w rozbudowanych środowiskach dystrybucji danych, obsługujących analizę i uczenie maszynowe. Doskonale sprawdzi się w wielu scenariuszach użycia, takich jak:

  • Standardowe przechowywanie plików
  • Dystrybucja danych w środowiskach wielochmurowych
  • Odzyskiwanie danych po awarii
  • Analiza danych

Czy to nie brzmi jak skomplikowane oprogramowanie?

Wręcz przeciwnie! MinIO zajmuje zaledwie około 50 MB i jest przyjazny dla środowiska Kubernetes. Dane i metadane są zapisywane jako obiekty, co eliminuje potrzebę dodatkowej bazy danych lub specjalistycznego oprogramowania do przechowywania metadanych, co z kolei przekłada się na wyższą wydajność.

Poniżej znajduje się schemat architektury zaczerpnięty z oficjalnej strony projektu.

Przyjrzyjmy się bliżej cechom, które warto wziąć pod uwagę.

  • Wysoka wydajność – jak sugeruje nazwa, MinIO osiąga prędkość odczytu/zapisu rzędu 170 GB/s. Imponujące, prawda?
  • Skalowalność – możliwość tworzenia klastrów i elastycznego skalowania w zależności od potrzeb.
  • Natywne w chmurze – idealne do środowisk chmurowych.
  • Ochrona danych za pomocą kodowania nadmiarowego (Erasure coding).
  • Obsługa różnych metod szyfrowania, takich jak AES-CBC, AES-256-GCM i ChaCha20.
  • Kompatybilność z popularnymi systemami zarządzania kluczami (KMS).
  • Zarządzanie tożsamością użytkowników i aplikacjami.
  • Powiadomienia o zdarzeniach.
  • Federacja z wykorzystaniem etcd i CoreDNS.

MinIO to doskonały wybór w przypadku programowo definiowanej pamięci masowej. Przejdźmy teraz do konfiguracji.

Instalacja serwera MinIO

MinIO możesz zainstalować na systemach Linux, Windows, macOS oraz w środowisku Kubernetes. Jeśli preferujesz kompilację ze źródeł, również jest to możliwe, pod warunkiem, że masz zainstalowany język Golang.

Na potrzeby tego poradnika przeprowadzę instalację na serwerze CentOS, hostowanym przez Kamatera.

  • Zaloguj się do swojego serwera.
  • Utwórz folder w wybranym systemie plików, np. minio-server.
  • Przejdź do nowo utworzonego katalogu i wykonaj polecenie wget:
wget https://dl.min.io/server/minio/release/linux-amd64/minio

Powyższe polecenie pobierze plik binarny, który powinien wyglądać mniej więcej tak:

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

Ustaw plik jako wykonywalny za pomocą polecenia chmod:

chmod 755 minio

Teraz możemy uruchomić MinIO jako serwer:

./minio server /data &

W powyższym poleceniu, „/data” to system plików, w którym MinIO będzie przechowywać obiekty.

Uruchomienie przebiega błyskawicznie, a na ekranie powinny pojawić się informacje startowe, podobne do poniższych:

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'

Otwórz MinIO w przeglądarce, używając domyślnych poświadczeń – minioadmin:minioadmin.

Interfejs jest intuicyjny i przejrzysty, jednak w pierwszej kolejności należy zmienić domyślne dane uwierzytelniające, ponieważ stwarzają one zagrożenie bezpieczeństwa. Z poziomu przeglądarki nie ma możliwości zmiany danych administratora, należy to zrobić za pomocą zmiennych środowiskowych.

Aby zmienić domyślne poświadczenia MinIO, wyeksportujmy klucz dostępu i klucz tajny, a następnie uruchommy MinIO:

export MINIO_ACCESS_KEY=newsblog.pl
export MINIO_SECRET_KEY=geekpassword
./minio server /data &

Teraz MinIO nie powinno już zgłaszać ostrzeżenia o wykryciu domyślnych poświadczeń.

Spróbujmy teraz przesłać kilka plików.

  • Kliknij ikonę „+” w prawym dolnym rogu i utwórz nowy kubeł (bucket).
  • Przesłałem plik testowy, który od razu pojawił się w przeglądarce.

Sprawdźmy zawartość serwera:

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

Klikając przycisk udostępniania plików w przeglądarce, otrzymamy link do udostępniania z możliwością ustawienia daty ważności.

Klient MinIO

Klient MinIO to zaawansowane narzędzie, które pozwala zarządzać pamięcią masową w sposób zbliżony do aws-cli. Klient jest dostępny dla systemów Windows, macOS i Linux.

Aby zainstalować klienta MinIO na Linuksie, wykonaj następujące polecenia:

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

Uruchom polecenie mc, aby wyświetlić pomoc dotyczącą dostępnych komend:

[[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] ~]#

Spróbujmy teraz wyświetlić listę plików, które przesłaliśmy, używając polecenia mc.

Najpierw musimy skonfigurować alias dla magazynu, którym będziemy zarządzać:

[[email protected] ~]# ./mc alias set minio http://xx.71.141.xx:9000/ newsblog.pl geekpassword
Added `minio` successfully.
[[email protected] ~]#
  • minio to alias – możesz go dowolnie zmienić.
  • Zmień punkt końcowy HTTP na swój rzeczywisty.
  • Zmień klucz dostępu i klucz tajny na swoje własne.

Teraz, aby wyświetlić listę plików, użyjemy polecenia ls:

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

Świetnie, wszystko działa poprawnie!

Za pomocą klienta MinIO możesz wykonywać praktycznie wszystkie operacje. Możesz zarządzać nie tylko pamięcią masową MinIO, ale także GCS, AWS S3 i Azure.

Więcej szczegółów znajdziesz w skróconej instrukcji obsługi klienta.

Pakiety SDK MinIO

W zależności od technologii używanej w Twojej aplikacji, możesz programowo komunikować się z obiektową pamięcią masową za pomocą pakietu SDK. MinIO obsługuje języki Go, Python, Node.js, .NET, Haskell i Java.

Bramka MinIO

Możesz użyć bramki MinIO do połączenia z S3, Azure, NAS, HDFS, aby korzystać z przeglądarki MinIO i buforowania dysku.

Podsumowanie

Jeśli szukasz prywatnego, hybrydowego lub wielochmurowego rozwiązania do przechowywania obiektów, MinIO wydaje się bardzo obiecującą opcją. Zachęcam Cię do przetestowania go. Możesz skorzystać z wirtualnej maszyny MinIO od Kamatera lub zainstalować MinIO na dowolnym serwerze w chmurze.


newsblog.pl