MinIo для самых маленьких

MinIO — прекрасное решение, когда надо легко и просто организовать объектное хранилище. Элементарная настройка, множество платформ и хорошая производительность сделали своё дело на ниве народной любви. Так что у нас не было другого пути, как месяц назад заявить о совместимости Veeam Backup & Replication и MinIO. Включая такую важную функцию, как Immutability. На самом деле у MinIO есть целый раздел в документации, посвящённый нашей интеграции.

Поэтому сегодня мы поговорим о том, как:

  • Настроить MinIO очень быстро.
  • Настроить MinIO чуть менее быстро, но значительно качественней.
  • Использовать его в качестве Archive Tier для масштабируемого репозитория Veeam SOBR.

MinIo для самых маленьких

Что ты такое?

Краткая вводная для тех, кто не сталкивался с MinIO. Это опенсорсное объектное хранилище, совместимое с Amazon S3 API. Выпускается под лицензией Apache v2 и придерживается философии спартанского минимализма.

То есть у него нет развесистого GUI с дашбордами, графиками и многочисленными меню. MinIO просто запускает свой сервер одной командой, на котором можно просто хранить данные, используя всю мощь S3 API. Но надо заметить, что простота эта может быть обманчива, когда речь заходит об используемых ресурсах. RAM и CPU поглощаются на отлично, но о причинах будет ниже. И, к слову сказать, такие комбайны, как FreeNAS и TrueNAS под капотом используют именно MinIO.

На этом введение можно и заканчивать.

Настройка MinIO очень быстро

Настройка его настолько быстра, что мы рассмотрим её для Windows и Linux. Есть варианты и для докера, и для кубернетиса, и даже для макоси, но смысл  везде будет одинаковый.

Итак, в случае Windows идём на официальный сайт https://min.io/download#/windows и качаем последнюю версию. Там же наблюдаем инструкцию по запуску:

 minio.exe server F:Data

И там же ссылка на чуть более развёрнутый Quick start guide. Инструкции не верить смысла нет, поэтому запускаем и получаем примерно такой ответ.

MinIo для самых маленьких
На этом всё! Хранилище работает и можно начинать с ним работать. Я не шутил, когда говорил, что MinIO — это минимализм и просто работает. Если пройти по предложенной при запуке ссылке, то максимум доступных там функций — это создать бакет. И можно начинать писать данные.

Для любителей линуксов всё остаётся не менее простым. Простейшая инструкция:


wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data

Результат будет неотличим от виденного ранее. 

Настройка MinIO чуть более осмысленная

Как мы понимаем, предыдущий абзац — это баловство для тестовых целей. И, скажем честно, именно для тестирования MinIO у нас используется очень широко, в чём нам совершнно не стыдно признаться. Конечно, оно работает, но дальше тестовых стендов выносить такое стыдно. Поэтому берём в руки напильник и начинаем доводить до ума.

HTTPS

Первый обязательный шаг на пути к продакшену — шифрование. В сети уже есть миллион и тысяча мануалов по добавлению сертификатов к MiniIO, но общий план у них такой:

  • Создаём сертификат
  • В случае Windows кладём его в C:Users%User%.miniocerts
  • В случае Linux в ${HOME}/.minio/certs 
  • Перезапускаем сервер

Банальный Let’s Encrypt — это скучно и описано везде, так что наш путь — это путь самурая, поэтому в случае Windows скачиваем Cygwin, а в случае Linux просто проверяем, что у нас установлен openssl. И делаем немного консольной магии:

  • Создаём ключи: openssl ecparam -genkey -name prime256v1 | openssl ec -out private.key
  • Создаём сертификат по ключу: openssl req -new -x509 -days 3650 -key private.key -out public.crt
  • Копируем private.key и public.crt в папку, указанную выше
  • Перезапускаем MinIO

Если всё прошло как надо, то в статусе появятся примерно такие строчки.

MinIo для самых маленьких

Включаем MinIO Erasure Coding

Сперва пара слов о сабже. В двух словах: это программная защита данных от повреждения и потери. Как рейд, только намного надёжней. Если классический RAID6 может позволить себе потерять два диска, то MinIO спокойно переживает потерю половины. Более детально технология описана в официальном гайде. Но если взять самую суть, то это реализация кодов Рида-Соломона: вся информация хранится в виде блоков данных, к которым есть блоки чётности. И вроде это всё уже было сделано много раз, только есть важное «но»: мы можем явно указывать соотношение блоков чётности к блокам данных для хранимых объектов.
Хотите 1:1? Пожалуйста!
Хотите 5:2? Без проблем!

Очень важная функция, если вы используете сразу несколько нод и хотите найти свой собственный баланс между максимальной безопасностью данных и затраченных ресурсов. Из коробки MinIO использует формулу N/2 (где N — общее количество дисков), т.е. делит ваши данные между N/2 дисками данных и N/2 дисками четности. Переводя на человеческий: можно потерять половину дисков и восстановить данные. Это соотношение задаётся через Storage Class, позволяя вам самостоятельно выбрать, что важнее: надёжность или ёмкость.

В гайде приведён такой пример: предположим, что у вас инсталляция на 16 дисков и вам надо сохранить файл размером 100 Мб. Если используются настройки по умолчанию (8 дисков под данные, 8 под блоки чётности), то файл в итоге займёт практически двойной объём т.е. 200 Мб. Если отношение дисков будет 10/6, то понадобится 160 Мб. 14/2 — 114 Мб.

Другое важное отличие от рейдов: в случае выпадения дисков MinIO будет работать на уровне объектов, восстанавливая один за другим, не останавливая работу всей системы. В то время как обычный рейд будет вынужден восстанавливать весь volume, что займёт непредсказуемое количество времени. На памяти автора дисковая полка, которая после выпадения двух дисков ушла на пересчёт на полторы недели. Было весьма неприятно.

И, важное замечание: MinIO делит все диски для Erasure Coding на сэты от 4х до 16ти дисков, используя максимально возможный размер сэта. И в дальнейшем, один элемент информации будет храниться только в пределах одного сэта.

Звучит всё это очень здорово, но насколько сложной будет настройка? Давайте посмотрим. Берём команду для запуска и просто перечисляем диски, на которых нужно создать хранилище. Если всё сделано верно, то в репорте увидим количество задействованных дисков. И совет, что негоже на один хост добавлять сразу половину дисков, ибо это к потере данных.

c:minio>minio.exe server F: G: H: I: J: K:

MinIo для самых маленьких
Далее для управления и настройки MinIO сервера нам потребуется агент, скачать который можно всё там же с официального сайта.

Чтобы не стирать пальцы, каждый раз набирая адрес и ключи доступа (да и небезопасно это), удобно при первом запуске сразу создать alias по формуле mc alias set <YOUR-MINIO-ENDPOINT> [YOUR-ACCESS-KEY] [YOUR-SECRET-KEY]

mc alias set veeamS3 https://172.17.32.52:9000 YOURS3ACCESSKEY YOURSECERTKE

Или же можно сразу добавить ваш хост:

mc config host add minio-veeam https://minio.jorgedelacruz.es YOURS3ACCESSKEY YOURSECERTKEY

А потом создадим immutable бакет красивой командой

mc mb --debug -l veeamS3/immutable 

mc: <DEBUG> PUT /immutable/ HTTP/1.1
Host: 172.17.32.52:9000
User-Agent: MinIO (windows; amd64) minio-go/v7.0.5 mc/2020-08-08T02:33:58Z
Content-Length: 0
Authorization: AWS4-HMAC-SHA256 Credential=minioadmin/20200819/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-bucket-object-lock-enabled;x-amz-content-sha256;x-amz-date, Signature=**REDACTED**
X-Amz-Bucket-Object-Lock-Enabled: true
X-Amz-Content-Sha256: UNSIGNED-PAYLOAD
X-Amz-Date: 20200819T092241Z
Accept-Encoding: gzip
mc: <DEBUG> HTTP/1.1 200 OK
Content-Length: 0
Accept-Ranges: bytes
Content-Security-Policy: block-all-mixed-content
Date: Wed, 19 Aug 2020 09:22:42 GMT
Location: /immutable
Server: MinIO/RELEASE.2020-08-16T18-39-38Z
Vary: Origin
X-Amz-Request-Id: 162CA0F9A3A3AEA0
X-Xss-Protection: 1; mode=block
mc: <DEBUG> Response Time:  253.0017ms

—debug позволяет видеть не просто итоговое сообщение,  а более развёрнутую информацию. 

-l значит —with-lock, что значит immutable

Если теперь вернуться в веб интерфейс, то там появится наш новый бакет.

MinIo для самых маленьких
На данный момент это всё. Мы создали защищенное хранилище и готовы переходить к интеграции с Veeam.

Можно ещё удостовериться, что всё работает на отлично:

c:minio>mc admin info veeamS3

●  172.17.32.52:9000
   Uptime: 32 minutes
   Version: 2020-08-16T18:39:38Z
   Network: 1/1 OK
   Drives: 6/6 OK
0 B Used, 1 Bucket, 0 Objects
6 drives online, 0 drives offline

MinIO и Veeam

Внимание! Если по какой-то из невероятных причин вы хотите работать через HTTP, то по адресу HKEY_LOCAL_MACHINESOFTWAREVeeamVeeam Backup and Replication создайте DWORD ключ SOBRArchiveS3DisableTLS. Выставите его значение в 1 и помните, что мы такое поведение решительно не одобряем и никому не советуем.

Внимание ещё раз! Если из-за какого-то недоразумения вы продолжаете использовать Windows 2008 R2, то при попытке подключить MinIO к Veeam вы скорее всего получите примерно такую ошибку: Failed to establish connection to Amazon S3 endpoint. Лечится это официальным патчем от Microsoft.

Ну что же, с приготовлениями закончено, давайте откроем интерфейс VBR и перейдём на вкладку Backup Infrastructure, где вызовем мастер добавления нового репозитория.

MinIo для самых маленьких
Само собой, интересует нас Object storage, а именно S3 Compatible. В открывшемся визарде задаём имя, проходим шаги с указанием адреса и учётной записи. Если требуется, то не забываем указать гейт, через который будут проксироваться запросы к хранилищу.

MinIo для самых маленьких
После чего выбираем бакет, папку и ставим галочку Make recent backups immutable. Или не ставим. Но раз уж мы сделали хранилище с поддержкой этой функции, то грех будет не воспользоваться.

MinIo для самых маленьких
Next > Finish и наслаждаемся результатом.

Теперь надо добавить его к SOBR репозиторию в качестве Capacity Tier. Для этого или создаём новый, или редактируем имеющийся. Нас интересует шаг Capacity Tier.

MinIo для самых маленьких
Здесь нам надо выбрать, по какому сценарию мы будем работать. Все варианты довольно хорошо описаны в другой статье, так что не буду повторяться

А по завершении работы мастера будут автоматически запущены задания на копирование или перенос бекапов. Но если в ваши планы не входит так сразу выдать нагрузку на все системы, то обязательно задайте допустимые интервалы для работы по кнопке Window.

MinIo для самых маленьких
И, само собой, можно сделать отдельные Backup Copy задания. Некоторые считают, что так даже удобнее, так как они несколько более прозрачны и предсказуемы для пользователя, не желающего вникать в подробности работы капасити тира. А подробностей там хватает, так что ещё раз рекомендую соответствующую статью по ссылке выше.

И напоследок — ответ на коварный вопрос: что же будет, если всё же взять и попробовать удалить бекап из Immutable стораджа?

Вот ответ:

MinIo для самых маленьких
На этом на сегодня всё. По верной традиции, ловите список полезных топиков по теме:

Источник: habr.com