Кластер MinIO
В статье рассматривается пример развёртывания MinIO в качестве объектного хранилища S3.
Рекомендуемой топологией MinIO для TeamStorm является Multi-Node Multi-Drive (MNMD) или Distributed/Распределённая конфигурация.
MinIO в конфигурации MNMD поддерживает erasure coding. Это позволяет допустить потерю до половины узлов или дисков в кластере, при этом продолжая обслуживать операции чтения. Используйте калькулятор Erasure Code Calculator при планировании и проектировании кластера MinIO.
Минимальная конфигурация MNMD, поддерживающая erasure coding, состоит из четырёх нод (серверов) по четыре диска в каждой. Соберите ноды в один server pool, при этом в MinIO нужно:
- использовать последовательно пронумерованные имена хостов
- использовать нотации расширения
{x...y}для обозначения последовательного ряда хостов при создании пула серверов - использовать нотации расширения
{x...y}для обозначения последовательного ряда дисков - чтобы порядок физических дисков оставался постоянным при перезапусках, чтобы заданная точка монтирования всегда указывала на один и тот же отформатированный диск.
Установка состоит из нескольких этапов:
- Подготовка нод (серверов)
- Подготовка дисков
- Установка MinIO
- Установка MinIO Client
- Создание пользователя и группы minio-user
- Создание файла сервиса для systemd
- Создание файла окружения для MinIO
- Запуск сервиса MinIO
- Настройка подключения к MinIO
- Создание бакета
- Конфигурация HAProxy (блок s3minio)
- Подключение
Шаг 1. Подготовка нод (серверов)
Создайте четыре ноды (сервера) с последовательно пронумерованными именами хостов:
- minio1.example.com
- minio2.example.com
- minio3.example.com
- minio4.example.com
Создайте необходимые сопоставления имён хостов в DNS. Если такой возможности нет, внесите нужные записи в /etc/hosts.
Шаг 2. Подготовка дисков
-
На каждой ноде создайте четыре каталога для монтирования четырёх дисков:
sudo mkdir -p /var/lib/minio/data1 sudo mkdir -p /var/lib/minio/data2 sudo mkdir -p /var/lib/minio/data3 sudo mkdir -p /var/lib/minio/data4Для обеспечения лучшей производительности используйте файловую систему XFS. В MinIO не различаются типы дисков и не используются смешанные типы хранилищ, поэтому на всех нодах должен использоваться одинаковый тип дисков (NVMe, SSD или HDD) с одинаковой ёмкостью, например, N ТБ.
В MinIO ограничивается размер используемого диска до самого маленького диска в развёртывании. Например, если в развёртывании есть 15 дисков по 10 ТБ и 1 диск по 1 ТБ, в MinIO ёмкость каждого диска ограничится до 1 ТБ.
-
На каждой ноде подготовьте на дисках файловую систему XFS:
-
На каждой ноде добавьте точки монтирования четырёх дисков в файле
/etc/fstab: -
Проверьте монтирование ранее подготовленных дисков:
Шаг 3. Установка MinIO
На каждой ноде загрузите последний стабильный binary-файл MinIO и установите его в систему:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
Шаг 4. Установка MinIO Client
На ноде minio1.example.com загрузите последний стабильный binary-файл MinIO Client и установите его в систему:
Шаг 5. Создание пользователя и группы minio-user
-
На каждой ноде создайте пользователя и группу minio-user:
-
На каждой ноде cоздайте директории для хранения TLS сертификатов, выполнив команду:
-
На каждой ноде задайте разрешения на доступ к каталогам, предназначенным для использования в MinIO:
Шаг 6. Создание файла сервиса для systemd
-
На каждой ноде загрузите официальный файл сервиса MinIO:
-
Проверьте содержимое
minio.serviceперед его использованием и переместите этот файл в каталог конфигурацииsystemd:
На этом шаге не запускайте minio.service.
Шаг 7. Создание файла окружения для MinIO
На каждой ноде создайте файл окружения в /etc/default/minio. Служба MinIO использует этот файл в качестве источника всех переменных окружения, используемых MinIO и файлом minio.service.
Пример файла окружения в /etc/default/minio:
# Set the hosts and volumes MinIO uses at startup
# The command uses MinIO expansion notation {x...y} to denote a
# sequential series.
# The following example covers four MinIO hosts
# with4 drives each at the specified hostname and drive locations.
# The command includes the port that each MinIO server listens on
# (default 9000)
MINIO_VOLUMES="http://minio-server{1...4}.your_domain:9000/var/lib/minio/data{1...4}/minio"
# Set all MinIO server options
# The following explicitly sets the MinIO Console listen address to
# port 9001 on all network interfaces. The default behavior is dynamic
# port selection.
MINIO_OPTS="--certs-dir /etc/minio/certs --console-address :9001"
MINIO_REGION="ru-central-1"
# Set the root username. This user has unrestricted permissions to
# perform S3 and administrative API operations on any resource in the
# deployment.
# Defer to your organizations requirements for superadmin user name.
MINIO_ROOT_USER=teamstormuser
# Set the root password
# Use a long, random, unique string that meets your organizations
# requirements for passwords.
MINIO_ROOT_PASSWORD=SecretPassword
# Set to the URL of the load balancer for the MinIO deployment
# This value must match across all MinIO servers. If you do
# not have a load balancer, set this value to to any one of the
# MinIO hosts in the deployment as a temporary measure.
# MINIO_SERVER_URL="https://minio.example:9000"
-
MINIO_VOLUMES:minio-server{1...4}.your_domain- ноды, объединённые в единый пул с нотацией расширения{x...y}9000- порт подключения/var/lib/minio/data{1...4}/minio— последовательный ряд дисков с нотацией расширения{x...y}
-
MINIO_ROOT_USER- имя пользователя администратора MinIO MINIO_ROOT_PASSWORD- пароль, в котором рекомендуется использовать не менее 16 символов.
Шаг 8. Запуск сервиса MinIO
-
Выполните следующие команды на каждой ноде, чтобы запустить службу MinIO:
-
Убедитесь в том, что сервис minio запустился и работает без ошибок:
Шаг 9. Настройка подключения к MinIO
Создайте alias для minio на ноде minio-server1.your_domain:
/usr/local/bin/mc alias set minio http://minio-server1.your_domain:9000 teamstormuser SecretPassword
Шаг 10. Создание бакета
Примеры наименований для бакетов:
- wiki
- cwm
- avatars
Чтобы создать бакеты используйте команду на ноде minio-server1.your_domain:
/usr/local/bin/mc mb -p minio/wiki --region=ru-central-1
/usr/local/bin/mc mb -p minio/cwm --region=ru-central-1
/usr/local/bin/mc mb -p minio/avatars --region=ru-central-1
Шаг 11. Конфигурация HAProxy (блок s3minio)
В рамках статьи пользовательский трафик приходит в HAProxy по minio.your_domain:9000 и равномерно балансируется между нодами кластера MinIO.
Балансировку нагрузки между нодами кластера MinIO осуществите с помощью HAProxy.
Шаг 12. Подключение
Параметры для подключения к MinIO:
- address —
minio-server.your_domain:9000 - bucket -
cwm - region -
ru-central-1 - access key ID -
teamstormuser - secret access key -
SecretPassword - upload method -
PUT - enable SSL -
No
При подключении MinIO с использованием TLS/SSL укажите в enable SSL значение Yes.