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:
- С помощью rpm пакета
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
Калькуляция места на новых версиях Minio с API v3
Для отображения занимаемого места в MVS Platform Master требуется в ручную добавить необходимые ключи через мастер конфигурации платформы
"/MVS/Configuration/Storage/S3Host/AWSRegionName": "us-east-1"
"/MVS/Configuration/Storage/S3Host/AWSServiceName": "s3"
"/MVS/Configuration/Storage/S3Host/MinioApiVersion": "V3"