Minio – сервер хранения объектов

Thank you for reading this post, don't forget to subscribe!

Minio – это откры­тый сер­вер хра­не­ния объ­ек­тов, кото­рый может хра­нить неструк­ту­ри­ро­ван­ные дан­ные – фото­гра­фии, видео­ро­ли­ки, обра­зы вир­ту­аль­ной маши­ны, кон­тей­не­ры и фай­лы логов – в каче­стве объ­ек­тов. В рас­пре­де­лен­ном режи­ме Minio предо­став­ля­ет еди­ный сер­вер хра­не­ния объ­ек­тов, кото­рый объ­еди­ня­ет несколь­ко дис­ков, рас­пре­де­лен­ных меж­ду несколь­ки­ми серверами.

Сер­вер Minio напи­сан на Go, постав­ля­ет­ся с кли­ен­том команд­ной стро­ки и интер­фей­сом бра­у­зе­ра и под­дер­жи­ва­ет про­стую служ­бу оче­ре­дей для AMQP, Elasticsearch, Redis, NATS и Postgres.

Про­то­кол хра­не­ния S3 стал попу­ляр­ным для хра­не­ния дан­ных. Одно из пре­иму­ществ S3 — воз­мож­ность досту­па через API, что поз­во­ля­ет орга­ни­зо­вать гиб­кое вза­и­мо­дей­ствие с хра­ни­ли­щем, вклю­чая пуб­лич­ный доступ на чте­ние, в то вре­мя как обнов­ле­ние инфор­ма­ции в хра­ни­ли­ще про­ис­хо­дит толь­ко авто­ри­зо­ван­ны­ми лицами.

Суще­ству­ет несколь­ко как откры­тых, так и част­ных реа­ли­за­ций хра­ни­лищ, рабо­та­ю­щих по про­то­ко­лу S3

В целом, Minio под­хо­дит для сле­ду­ю­щих случаев:

  • хра­ни­ли­ще без репли­ка­ции поверх надеж­ной фай­ло­вой систе­мы с досту­пом по S3 (малые и сред­ние хра­ни­ли­ща, раз­ме­щен­ные на NAS и SAN);
  • хра­ни­ли­ще без репли­ка­ции поверх нена­деж­ной фай­ло­вой систе­мы с досту­пом по S3 (для раз­ра­бот­ки и тестирования);
  • хра­ни­ли­ще с репли­ка­ци­ей на неболь­шой груп­пе сер­ве­ров в одной стой­ке с досту­пом по про­то­ко­лу S3 (отка­зо­устой­чи­вое хра­ни­ли­ще с доме­ном отка­за рав­ным стойке).

Часть вызо­вов API S3 в Minio не под­дер­жи­ва­ет­ся, одна­ко, для боль­шин­ства при­ме­не­ний это не явля­ет­ся ограничением.

Загру­зи­те бинар­ный файл Minio:

curl -O https://dl.minio.io/server/minio/release/linux-amd64/minio

В рабо­чий ката­лог будет загру­жен файл minio. Сде­лай­те его исполняемым:

chmod +x minio

Пере­ме­сти­те файл в /usr/local/bin, где его будет искать скрипт запуска.

mv minio /usr/local/bin

По сооб­ра­же­ни­ям без­опас­но­сти не сле­ду­ет запус­кать сер­вер Minio как root. Скрипт systemd (кото­рый исполь­зу­ет­ся в сле­ду­ю­щем раз­де­ле) ищет учет­ную запись поль­зо­ва­те­ля и груп­пу по име­ни minio-user, давай­те созда­дим их сейчас.

useradd -r minio-user -s /sbin/nologin

Пере­дай­те это­му поль­зо­ва­те­лю пра­ва на файл:

chown minio-user:minio-user /usr/local/bin/minio

Затем нуж­но создать ката­лог, в кото­ром Minio будет хра­нить файлы.

mkdir /usr/local/share/minio

Пере­дай­те пра­ва на ката­лог поль­зо­ва­те­лю minio-user:

chown minio-user:minio-user /usr/local/share/minio

Обыч­но кон­фи­гу­ра­ци­он­ные фай­лы Minio хра­нят­ся в ката­ло­ге /etc. Создай­те в нем отдель­ный подкаталог.

mkdir /etc/minio

Пере­дай­те пра­ва на ката­лог поль­зо­ва­те­лю minio-user:

chown minio-user:minio-user /etc/minio

С помо­щью тек­сто­во­го редак­то­ра создай­те файл сре­ды, в кото­ром мож­но изме­нить настрой­ки по умолчанию.

nano /etc/default/minio

Добавь­те в файл сле­ду­ю­щие переменные:

MINIO_VOLUMES="/usr/local/share/minio/"
MINIO_OPTS="-C /etc/minio --address 192.168.1.112:9000"

  • MINIO_VOLUMES: ука­зы­ва­ет на ката­лог для хра­не­ния объектов.
  • MINIO_OPTS: изме­ня­ет пове­де­ние сер­ве­ра. Флаг –C ука­зы­ва­ет, какой кон­фи­гу­ра­ци­он­ный файл дол­жен исполь­зо­вать сер­вер Minio. Флаг —address при­вя­зы­ва­ет Minio к опре­де­лен­но­му IP-адре­су и пор­ту. Если IP-адрес не ука­зан, Minio при­вя­жет­ся ко всем адре­сам, настро­ен­ным на сер­ве­ре, вклю­чая localhost и IP-адре­са, свя­зан­ные с Docker. Пото­му луч­ше ука­зать один IP-адрес. По умол­ча­нию исполь­зу­ет­ся порт 9000, но вы може­те выбрать любой дру­гой порт.

Сохра­ни­те и закрой­те файл.

Теперь нуж­но доба­вить Minio в систе­му ини­ци­а­ли­за­ции systemd. Для нача­ла загру­зи­те дескрип­тор Minio:

curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

После завер­ше­ния загруз­ки в рабо­чем ката­ло­ге появит­ся файл minio.service.

Открой­те minio.service в тек­сто­вом редак­то­ре, что­бы про­смот­реть его содержимое:

vim minio.service

После это­го мож­но закрыть тек­сто­вый редактор.

Systemd хра­нит все unit-фай­лы в ката­ло­ге кон­фи­гу­ра­ций systemd. Открой­те этот каталог:

mv minio.service /etc/systemd/system

cat /etc/systemd/system/minio.service

[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

 

Запу­сти­те сле­ду­ю­щую коман­ду, что­бы пере­за­пу­стить сер­ви­сы systemd:

systemctl daemon-reload

Добавь­те Minio в автозагрузку:

systemctl enable minio
systemctl start minio

systemctl status minio

если есть сер­ти­фи­кат то заки­нуть его мож­но сюда:
cp private.key /etc/minio/certs/
cp public.crt /etc/minio/certs/

Пере­за­пу­сти­те Minio, что­бы сер­вер нашел сер­ти­фи­ка­ты и начал исполь­зо­вать HTTPS.

systemctl restart minio

Попро­буй­те под­клю­чить­ся к Minio по HTTPS, создать bucket и доба­вить объекты.

Открой­те в браузере:

https://192.168.1.112:9000

в каче­стве лого­па­са исполь­зуй­те дан­ные из systemctl status minio minioadmin:minioadmin

Теперь вой­ди­те в основ­ной интер­фейс, вве­дя свои учет­ные дан­ные и нажав круг­лую кноп­ку со стрелкой.

Затем нажми­те крас­ную кноп­ку + в пра­вом ниж­нем углу интер­фей­са, что­бы открыть две допол­ни­тель­ные жел­тые кнопки.

Клик­ни­те по сред­ней жел­той кноп­ке и вве­ди­те назва­ние для bucket. Нажми­те ENTER, что­бы про­дол­жить. Новый bucket готов.

Что­бы доба­вить в bucket объ­ек­ты, клик­ни­те по той же крас­ной кноп­ке, и нажми­те верх­нюю жел­тую кноп­ку, что­бы загру­зить файлы.

При­ме­ча­ние: Сер­вер Minio может хра­нить объ­ек­ты раз­ме­ром до 5 ТБ.

Так­же этот интер­фейс поз­во­ля­ет гене­ри­ро­вать новые учет­ные дан­ные для вхо­да, уста­нав­ли­вать даты исте­че­ния сро­ка дей­ствия для общих ссы­лок на объ­ек­ты и уда­лять объекты.

 

Minio client

wget https://dl.minio.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc help

./mc config host add minio http://192.168.1.112:9000 accessCode secretCode

создать bucket
./mc mb minio/photos

посмот­реть файлы:
./mc ls minio/photos

загру­зить:
./mc cp ~/Downloads/centos.png minio/photos/

 

 

========================================================

Допол­не­ние к статье

люсы исполь­зо­ва­ния:
  • Стан­дарт­ное хра­ни­ли­ще плос­ких файлов
  • Рас­пре­де­ле­ние дан­ных в несколь­ких облаках
  • Ава­рий­ное восстановление
  • Ана­ли­ти­ка данных

Это громоздкое программное обеспечение?

Нет, оно весит 50 МБ и под­хо­дит для Kubernetes.

Minio запи­сы­ва­ет дан­ные и мета­дан­ные как объект.

Это устра­ня­ет зави­си­мость от нали­чия допол­ни­тель­ной базы дан­ных или про­грамм­но­го обес­пе­че­ния для хра­не­ния мета­дан­ных и повы­ше­ния производительности.

Архи­тек­ту­ра с их офи­ци­аль­но­го сайта:

Давай­те рас­смот­рим неко­то­рые осо­бен­но­сти, на кото­рые сто­ит обра­тить внимание.
  • Высо­кая про­из­во­ди­тель­ность! Minio спо­со­бен читать/писать со ско­ро­стью ~ 170 ГБ /с. Это мно­го!
  • Мас­шта­би­ру­е­мость – исполь­зуй­те кла­сте­ри­за­цию и мас­шта­би­руй­те по мере необходимости
  • Cloud-native
  • Защи­та дан­ных с исполь­зо­ва­ни­ем мето­да Erasure code
  • Под­дер­жи­ва­ет­ся мно­же­ствен­ное шиф­ро­ва­ние, вклю­чая AES-CBC, AES-256-GCM, ChaCha20
  • Сов­ме­стим с обыч­ным KMS
  • Уве­дом­ле­ние о событии
  • Сов­ме­стим с исполь­зо­ва­ни­ем etcd и CoreDNS
MinIO – хоро­ший выбор про­грамм­но рас­пре­де­лен­но­го хранилища.