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"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[Unit] Description=MinIO Documentation=https://docs.min.io Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/bin/minio [Service] WorkingDirectory=/usr/local/ User=minio-user Group=minio-user EnvironmentFile=/etc/default/minio ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi" ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES # Let systemd restart this service always Restart=always # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=65536 # Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target # Built for ${project.name}-${project.version} (${project.name}) |
[/codesyntax]
Запустите следующую команду, чтобы перезапустить сервисы systemd:
systemctl daemon-reload
Добавьте Minio в автозагрузку:
systemctl enable minio
systemctl start minio
systemctl status minio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
● minio.service - MinIO Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-01-05 18:11:15 +06; 5min ago Docs: https://docs.min.io Process: 1667 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Variable MINIO_VOLUMES not set in /etc/default/minio"; exit 1; fi (code=exited, status=0/SUCCESS) Main PID: 1669 (minio) CGroup: /system.slice/minio.service └─1669 /usr/local/bin/minio server -C /etc/minio --address 192.168.1.112:9000 /usr/local/share/minio/ Jan 05 18:11:17 nfs-server minio[1669]: Endpoint: http://192.168.1.112:9000 Jan 05 18:11:17 nfs-server minio[1669]: Browser Access: Jan 05 18:11:17 nfs-server minio[1669]: http://192.168.1.112:9000 Jan 05 18:11:17 nfs-server minio[1669]: Object API (Amazon S3 compatible): Jan 05 18:11:17 nfs-server minio[1669]: Go: https://docs.min.io/docs/golang-client-quickstart-guide Jan 05 18:11:17 nfs-server minio[1669]: Java: https://docs.min.io/docs/java-client-quickstart-guide Jan 05 18:11:17 nfs-server minio[1669]: Python: https://docs.min.io/docs/python-client-quickstart-guide Jan 05 18:11:17 nfs-server minio[1669]: JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide Jan 05 18:11:17 nfs-server minio[1669]: .NET: https://docs.min.io/docs/dotnet-client-quickstart-guide Jan 05 18:11:17 nfs-server minio[1669]: Detected default credentials '<span style="font-size: 14pt;"><strong>minioadmin:minioadmin</strong></span>', please change the credentials immediately using 'MINIO_ACCESS_KEY...SECRET_KEY' Hint: Some lines were ellipsized, use -l to show in full. |
если есть сертификат то закинуть его можно сюда:
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