Skip to main content
Version: ariadna

minio

Начало работы с Minio

Для ознакомления minio может быть установлен с помощью пакета mvs-minio:

sudo yum install -y mvs-minio

sudo systemctl enable --now minio.service

Метапакет устанавливает minio, файл конфигурации /etc/default/minio c пользователем MINIO_ROOT_USER (если файл не существует). Для быстрого старта достаточно установки этого пакета, однако нельзя использовать такую конфигурацию в production. Метапакета mvs-minio также фиксирует версию minio, поэтому для обновления minio он должен быть удален.

Установка minio

Варианты установки minio:

sudo yum install https://dl.min.io/server/minio/release/linux-amd64/minio-20230904195737.0.0.x86_64.rpm

В пакет входит исполняемый файл и systemd-юнит.

  • Скачивание и запуск исполняемых файлов (может понадобиться для миграции данных при обновлении SNSD экземпляров, SNMD установки на момент обновления до версии 20230904195737.0.0 миграции не требовали)

Сервер:

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
MINIO_ROOT_USER=<admin> MINIO_ROOT_PASSWORD=<password> ./minio server /mnt/data --console-address ":<console_port>"

MCli:

sudo wget -O /usr/bin/mcli https://dl.min.io/client/mc/release/linux-amd64/mc
sudo chmod +x /usr/bin/mcli
mcli alias set myminio/ http://<MINIO-SERVER> <MYUSER> <MYPASSWORD>

Обновление MinIO

Начиная с релиза minio от 2022-10-29 работа MinIO в fs-mode прекращается. Обновление SNSD экземпляров должно проводиться через миграцию, так как новые версии MinIO не стартуют и обнаружении каталога c данными в FS-mode.

Обязательно тестировать работоспособность новых версий на stage-окружении.

Алогоритм обновления MinIO:

  • Убедиться, что конфигурация MinIO не SNSD (см. файл /etc/default/minio): Можно обновлять:
MINIO_VOLUMES="/mnt/disk{0...3}/minio"

Нельзя обновлять (см. Миграция SNSD-экземпляров MinIO):

MINIO_VOLUMES="/var/lib/minio"
  • Удалить метапакет mvs-minio. Рекомендуется перед этим обновить его до версии 1.0.2. Файл /etc/default/minio не будет затронут
sudo yum remove mvs-minio
  • Остановить службу minio.service и выключить автозагрузку. Это необходимо сделать для того чтобы не приходилось вручную удалять симлинк. В ранних версиях расположение файла юнита: /etc/systemd/system/minio.service, в поздних - /usr/lib/systemd/system/minio.service
sudo systemctl disable --now minio.service
  • Рекомендуется в файле /etc/default/minio заменить переменные окружения (не нужно, если файл конфигурации был сгенерирован mvs-minio версии 1.0.2):
  • MINIO_ACCESS_KEY (deprecated) на MINIO_ROOT_USER

  • MINIO_SECRET_KEY (deprecated) на MINIO_ROOT_PASSWORD

    • Обновить пакет minio:
sudo yum install https://dl.min.io/server/minio/release/linux-amd64/minio-20230904195737.0.0.x86_64.rpm
  • Запустить службу:
sudo systemctl enable --now minio.service

Настройка MinIO Distributed (пример для 4х дисков)

Монтирование дисков

Вывод UUID дисков:

ls -la /dev/disk/by-uuid/

Пример монтирования дисков с UUID по команде mount

sudo mount /dev/disk/by-uuid/<UUID-disk1> /mnt/disk1
sudo mount /dev/disk/by-uuid/<UUID-disk2> /mnt/disk2
sudo mount /dev/disk/by-uuid/<UUID-disk3> /mnt/disk3
sudo mount /dev/disk/by-uuid/<UUID-disk4> /mnt/disk4

Пример монтирования 4х HDD через файл /etc/fstab

/dev/disk/by-uuid/<UUID-disk1> /mnt/disk1 xfs defaults 0 1
/dev/disk/by-uuid/<UUID-disk2> /mnt/disk2 xfs defaults 0 1
/dev/disk/by-uuid/<UUID-disk3> /mnt/disk3 xfs defaults 0 1
/dev/disk/by-uuid/<UUID-disk4> /mnt/disk4 xfs defaults 0 1

Назначить minio-user владельцем директорий

chown -R minio-user: /mnt/disk1
chown -R minio-user: /mnt/disk2
chown -R minio-user: /mnt/disk3
chown -R minio-user: /mnt/disk4

Пример файла конфигурации Minio Distributed Mode с массивом дисковых устройств

MINIO_VOLUMES="/mnt/disk{1...4}/minio"
MINIO_OPTS="--address :9000 --console-address :9001"
MINIO_ACCESS_KEY=<MINIO_ACCESS_KEY>
MINIO_SECRET_KEY=<MINIO_SECRET_KEY>

Пример файла конфигурации Minio Distributed Mode массивами дисковых устройств 4х node

MINIO_VOLUMES="http://minio-{1...4}:9000/mnt/disk{1...4}/minio"
MINIO_OPTS="--console-address :9001"
MINIO_ACCESS_KEY=<MINIO_ACCESS_KEY>
MINIO_SECRET_KEY=<MINIO_SECRET_KEY>

Примечание для Distributed Deployments Параметр MINIO_VOLUMES указывает используемые разделы под хранилище, в том числе на других устройствах кластера. Вы можете указать весь диапазон дисков, используя нотацию расширения /mnt/disk{1...4}. Если вы хотите использовать определенную подпапку на каждом диске, укажите ее как /mnt/disk{1...4}/minio или для использования в кластере внешних устройств: http://<minio_FQDN-{1...4}>:9000/mnt/disk{1...4}/minio. Необходимо наличие записей на DNS-серверe

Добавление дискового пула Необходимо аналогично подготовить и примонтировать разделы соблюдая порядковые номера нового пула

  • добавить в настройках новый пул
MINIO_VOLUMES=/mnt/disk{0...3}/minio /mnt/disk{4...7}/minio
  • Перезапустить службу minio
  • Проверка: /usr/local/bin/mcli admin decommission status minio0

Настройка Firewalld

sudo firewall-cmd --zone=public --permanent --add-port=9000-9001/tcp
sudo firewall-cmd --reload

MinIO Maintenance

Установка MinIO cli

sudo yum install mcli -y

Добавление alias-а подключения к серверу

/usr/local/bin/mcli alias set minio0 http://<minio_ip>:9000 <MINIO_ACCESS_KEY> <MINIO_SECRET_KEY>

Добавление нового дискового массива:

  • Подготовить разделы согласно разделу 3, соблюдая порядковые номера нового пула
  • Добавить в настройках новый пул конфигурацию MinIO /etc/default/minio и рестартовать службу:
MINIO_VOLUMES="/mnt/disk{0...3}/minio /mnt/disk{4...7}/minio"

  • После успешного перезапуска проверить наличие новых дисков в разделе мониторинг в web-console или с помощью mcli:
/usr/local/bin/mcli admin decommission status minio0

Замена диска вышедшего из строя

  • Убедиться, что владельцем директории замененного диска является minio-user
  • Предварительная проверка состояния MinIO
/usr/local/bin/mcli admin info minio0
/usr/local/bin/mcli admin console minio0
  • Настроить точку монтирования нового диска в расположение вышедшего из строя носителя (см раздел 3)Восстановление диска в кластере
/usr/local/bin/mcli admin heal -r minio0
  • После восстановления проверить статус кластера
/usr/local/bin/mcli admin info minio0
/usr/local/bin/mcli admin console minio0

Миграция SNSD-экземпляров MinIO

Данный пример - для миграции данных в рамках одного сервера.

  • Подготовить диски для SNMD-экземпляра, как то
/dev/sda1 /mnt/disk0 xfs defaults 0 0
/dev/sdb1 /mnt/disk1 xfs defaults 0 0
/dev/sdc1 /mnt/disk2 xfs defaults 0 0
/dev/sdd1 /mnt/disk3 xfs defaults 0 0
  • Создать каталоги для MinIO:
sudo mkdir -p /mnt/disk{0..3}/minio
sudo chown minio-user: /mnt/disk{0..3}/minio
  • Скачать MinIO новой версии:
wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/local/bin/minio-update
chmod +x /usr/local/bin/minio-update
  • Скопировать конфигурацию MinIO:
cp /etc/default/minio /etc/default/minio-update

Изменить параметры, указав новые порты и MINIO_VOLUMES:

Исходный файл (SNSD): /etc/default/minio

MINIO_VOLUMES="/var/lib/minio"
MINIO_OPTS="--address :9000 --console-address :9001"
MINIO_ROOT_USER=Rc1ylhryEpV2XHss5xkf
MINIO_ROOT_PASSWORD=NZTSHVXupI69cFVzvFPi8gwQCZFj2Az6SGuAmNb2

Новый файл (SNMD): /etc/default/minio-update

MINIO_VOLUMES="/mnt/disk{0...3}/minio"
MINIO_OPTS="--address :19000 --console-address :19001"
MINIO_ROOT_USER=Rc1ylhryEpV2XHss5xkf
MINIO_ROOT_PASSWORD=NZTSHVXupI69cFVzvFPi8gwQCZFj2Az6SGuAmNb2
  • Создать systemd-юнит для нового экземпляра (/usr/lib/systemd/system/minio-update.service):
[Unit]
Description=MinIO
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio-update

[Service]
Type=notify

WorkingDirectory=/usr/local

User=minio-user
Group=minio-user

EnvironmentFile=-/etc/default/minio-update
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio-update\"; exit 1; fi"
ExecStart=/usr/local/bin/minio-update server $MINIO_OPTS $MINIO_VOLUMES

Restart=always
LimitNOFILE=1048576
TasksMax=infinity
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

  • Скачать mcli и создать алиасы для экземпляров:
sudo wget -O /usr/bin/mcli https://dl.min.io/client/mc/release/linux-amd64/mc
sudo chmod +x /usr/bin/mcli
/usr/bin/mcli alias set minio-src http://127.0.0.1:9000 Rc1ylhryEpV2XHss5xkf NZTSHVXupI69cFVzvFPi8gwQCZFj2Az6SGuAmNb2
/usr/bin/mcli alias set minio-dst http://127.0.0.1:19000 Rc1ylhryEpV2XHss5xkf NZTSHVXupI69cFVzvFPi8gwQCZFj2Az6SGuAmNb2
  • Мигрировать данные (создать бакет на новом экземпляре, если это не было сделано ранее):
/usr/bin/mcli mb minio-dst/bucket1
/usr/bin/mcli mirror --md5 minio-src/bucket1 minio-dst/bucket1

  • Настроить пользователей и политику доступа к новому бакету.

  • Остановить minio и заменить файлы конфигурации:

mcli alias remove minio-src
mcli alias remove minio-dst

sudo systemctl stop minio minio-update

sudo mv /etc/default/minio /etc/default/minio.old
sudo mv /etc/default/minio-update /etc/default/minio
sudo mv /usr/local/bin/minio /usr/local/bin/minio.old
sudo mv /usr/local/bin/minio-update /usr/local/bin/minio
sudo rm /usr/lib/systemd/system/minio-update.service
sudo systemctl daemon-reload

Поменять порты в файле конфигурации /etc/default/minio на исходные:

MINIO_OPTS="--address :9000 --console-address :9001"

Запустить службу:

sudo systemctl start minio

См. также:

Миграция данных между серверами MinIO

  • Добавить alias нового MinIO
/usr/local/bin/mcli alias set minio1 http://<new_minio_ip>:9000 <MINIO_ACCESS_KEY> <MINIO_SECRET_KEY>
  • Перенос всех данных на новый MinIO
/usr/local/bin/mcli mirror --md5 minio0/ minio1/
  • Перенос одного bucket на новый MinIO
/usr/local/bin/mcli mb minio1/bucket0
/usr/local/bin/mcli mirror --md5 minio0/bucket0 minio1/bucket0

или

/usr/local/bin/mcli cp --recursive --md5 minio0/bucket0/ minio1/bucket0