Установка MinIO сервера и консоли для хранения и управления бэкапами БД

Решение для удобного и быстрого управлению дампами и бэкапами базы данных с помощью MinIO.

Что такое MinIO

MinIO — это высокопроизводительная объектная система хранения данных с открытым исходным кодом. Она предназначен для облачных и контейнерных приложений и предлагает масштабируемость, производительность и совместимость с API Amazon S3.

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

Почему стоит выбрать MinIO

  • Высокая производительность: MinIO оптимизирован для высокопроизводительных рабочих нагрузок и может легко обрабатывать крупномасштабные приложения для обработки данных.
  • Масштабируемость: поддерживает горизонтальное масштабирование, что позволяет добавлять больше серверов для удовлетворения растущих потребностей в хранилище.
  • Простота: MinIO легко развертывать и управлять, что делает его доступным для разработчиков и администраторов.
  • Совместимость. Полная совместимость с API S3 делает его отличным выбором для пользователей AWS S3.
  • Безопасность. Надежные функции безопасности, включая шифрование на стороне сервера и управление идентификацией.
  • Открытый исходный код: open source проект, который позволяет пользователям настраивать его в соответствии со своими потребностями.

Также есть удобный web-based интерфейс MinIO Console, где можно контролировать сервер MinIO, перемещаться по хранимым данным и выполнять административные функции. Этот интерфейс оптимизирует процессы управления хранилищем, предлагая интуитивно понятные и доступные средства взаимодействия с объектными системами хранения.


Интерфейс централизует и упрощает задачи управления хранилищем. Вы можете легко перемещаться и контролировать свою инфраструктуру хранения данных. От мониторинга состояния сервера до управления контролем доступа и выполнения операций с данными — консоль предлагает удобную и эффективную платформу для администрирования развертываний MinIO.


Такой подход к хранению объектов, основанный на использовании MinIO, успешно применяется на практике уже 2,5 года и получает исключительно положительные отзывы от коллег и сотрудников о его удобстве и эффективности.


Подробнее о продукте MinIO можно найти тут.

Подготовка к установке MinlO

Допустим, что бизнес требует от команды инфраструктуры создать сервер в качестве хранилища, где будут лежать дамп-файлы базы данных PostgreSQL. Бэкапы должны проводиться автоматически каждый день в определенное время и отправлять на хранение в этот сервер тоже автоматически. Также требуется, что этим хранилищем могут пользоваться разработчики и другие технические команды, откуда они будут брать нужный дамп-файл для тестирования, разработки или других случаев.


Архитектура будет выглядеть примерно так:

Идея здесь следующая:


  1. У нас есть Ubuntu-сервер с PostgreSQL Server (192.168.1.100) и его инструменты.
  2. На сервере также настраивается любой удобный Backup Scheduler (обычный скрипт бэкапов, запускающийся через crontab - как один из простых примеров) и клиент MinIO для копирования в хранилище.
  3. Также имеется второй Ubuntu-сервер с MinIO Server (192.168.1.101), который является главным хранилищем со всеми нужными конфигурациями, и MinIO Console, GUI которого будет удобен для общего пользования.

Установка PostgreSQL базы данных

Для начала устанавливаем PostgreSQL Server и его инструменты.


Подключаемся к первому серверу (192.168.1.100) и запускаем следующие команды:

# Обновление пакетов:
sudo apt update
# Установка PostgreSQL:
sudo apt install postgresql postgresql-contrib -y
# Установка инструментов PostgreSQL (psql-client):
sudo apt install postgresql-client -y
# Команды установит “pg_dump” инструмент, который нам потребуется для бэкапов.
# Убедитесь, что PostgreSQL установлен:
sudo systemctl status postgresql
# Вывод этой команды покажет запущен ли процесс PostgreSQL на сервере.
psql --version
# Вывод этой команды покажет версию установленного PostgreSQL. 

По умолчанию, после установки PostgreSQL, создается юзер “postgres”. Можно подключиться к базе локально.

# Получить доступ к командной строке PostgreSQL, используя этого пользователя:
sudo -i -u postgres
psql

После этого нужно подключиться к командной консоли postgresql.

Установка MinIO-сервера и консоли и их настройки конфигурации

Подключаемся ко второму серверу (192.168.1.101) и делаем следующее:

# Скачиваем исходник MinIO server:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
# Запускаем MinIO server:
./minio server /data
# Запустится MinIO сервер, который также содержит URL к консоли MinIO (по дефолту http://127.0.0.1:9000)
# Подключаемся к MinIO консоли: открываем любой браузер и переходим на наш URL из предыдущего пункта: http://127.0.0.1:9000

Вы увидите консоль MinIO:

Создаем ключи (Access and Secret keys):


Чтобы поставить нужные нам credentials, открываем файл nano ~/.minio/config.json

{
  "version": "9",
  "credential": {
    "accessKey": "",
    "secretKey": ""
  },
  "region": "",
  "browser": "on",
  "logger": {
    "console": {
      "level": "error"
    },
    "file": {
      "level": "error",
      "filename": ""
    }
  },
  "notify": {
    "redis": {
      "1": {
        "enable": false,
        "address": "",
        "password": "",
        "key": "",
        "certDir": "",
        "poolSize": 0,
        "db": 0
      }
    }
  }
}

Находим строки:


"accessKey": "",

"secretKey": ""


Внутри кавычек указываем любые значения для Access и Secret keys. Рекомендуются более секьюрные значения. Если вы не хотите указывать креды внутри как hardcoded, то можно сделать следующим образом:

export MINIO_ACCESS_KEY=your_access_key # тут указываем свой Access Key
export MINIO_SECRET_KEY=your_secret_key # тут указываем свой Secret Key

В файле ~/.minio/config.json указываем значения:

"accessKey": "${MINIO_ACCESS_KEY}",
"secretKey": "${MINIO_SECRET_KEY}"

Это один из способов обойти hardcode, вы можете использовать другой удобный вам метод.


Логинимся к MinIO console:


В нашем случае, Username - это Access Key, а Password - это Secret Key.


Теперь мы настроили MinIO server и консоль для него. Если хотите настроить другие интеграции к ним или поставить более продвинутые конфигурации по безопасности, доступам, репликам, то документацию можно найти тут.

Автобэкап базы и автокопирование в MinIO хранилище

Теперь перед нами стоит задача автоматизировать бэкап базы и копирование бэкапа на MinIO хранилище.


В первом сервере PostgreSQL (192.168.1.100) также необходимо поставить клиент MinIO, чтобы автокопирование работало. Для этого нужно установить MinIO client.

# Создаем папку “minio-client” в домашней директории: 
mkdir /home/minio-client
cd /home/minio-client

# Скачиваем клиент:
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x /home/minio-client/mc

# Подтверждаем, что клиент установился:
/home/minio-client/mc --version

# Создаем бакет, в котором будут лежать наши дампы. Для этого настраиваем алиас:
/home/minio-client/mc alias set minio http://192.168.1.101:9000 your_minio_access_key your_minio_secret_key

# Создаем бакет с названием “devops”:
/home/minio-client/mc mb minio/devops

Cоздаем файл backup.sh и вставляем следующее:

#!/bin/bash

# PostgreSQL database credentials
DB_USER="your_db_user" 
DB_NAME="your_db_name"

# MinIO credentials and endpoint
MINIO_ACCESS_KEY="your_minio_access_key"
MINIO_SECRET_KEY="your_minio_secret_key"
MINIO_ENDPOINT="http://192.168.1.101:9000" 
BUCKET_NAME="devops"

# Backup directory
BACKUP_DIR="/path/to/sql_backup"

# Date and timestamp
DATE=$(date +%Y-%m-%d_%H-%M-%S)

# Dump PostgreSQL database
pg_dump -U "$DB_USER" -d "$DB_NAME" > "$BACKUP_DIR/$DB_NAME-$DATE.sql"

# Upload dump file to MinIO
mc alias set minio "$MINIO_ENDPOINT" "$MINIO_ACCESS_KEY" "$MINIO_SECRET_KEY"
mc cp "$BACKUP_DIR/$DB_NAME-$DATE.sql" "minio/$BUCKET_NAME/$DB_NAME-$DATE.sql"

Обязательно укажите свои креды и путь к директории с бэкапами.


Сохраняем содержимое скрипта и запускаем:

chmod +x backup.sh
bash -x backup.sh

После успешно выполненного скрипта настраиваем Cron для автозапуска (используется редактор типа vim):

crontab -e

Настраиваем, когда будет запускаться наш скрипт по автобэкапу и автокопированию. Допустим, что он должен запускаться каждый день в полночь:

0 0 * * * /home/minio-client/backup.sh

Сохраняем настройки Cron и ждем, когда выполнится скрипт. После полуночи в MinIO консоли должен отобразится бэкап базы.

В MinIO консоли можно загружать и скачивать объекты парой кликов, создавать пользователей и управлять аккаунтами внутри:

Также здесь есть вкладка Monitoring, которая по дефолту выдает метрики, а также позволяет запустить логгинг:

API конфигурация, репликации, нотификации и другие фичи доступны в одном месте, что очень упрощает работу с хранилищем и сохраняет время и ресурсы.

Нужна помощь с данными?

Узнайте про услугу DataOps, и наш менеджер расскажет подробнее, подберет план работ под ваши задачи и рассчитает стоимость

Узнать больше
Cloud