Garage S3: Легкая альтернатива для самостоятельного объектного хранилища

Введение

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

Основные преимущества Garage S3

Легкость и эффективность ресурсов

Garage разработан для работы на скромном оборудовании, что делает его идеальным для домашних лабораторий, малого бизнеса и периферийных развертываний. Он может эффективно работать на ARM-устройствах, таких как Raspberry Pi, потребляя минимум CPU и RAM.

Географическое распределение

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

Совместимость с S3

Garage реализует значительную часть S3 API, позволяя использовать знакомые инструменты, такие как s3cmd, AWS CLI, rclone и многие решения для резервного копирования без модификаций. Эта совместимость обеспечивает легкую миграцию и интеграцию с существующими рабочими процессами.

Отсутствие внешних зависимостей

В отличие от многих распределенных систем хранения, Garage не требует внешних сервисов координации, таких как ZooKeeper или etcd. Он использует собственный алгоритм консенсуса, упрощая развертывание и уменьшая точки отказа.

Гибкая репликация

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

Открытый исходный код

Garage полностью открыт под лицензией AGPL-3.0, давая вам полный контроль над вашими данными и инфраструктурой без привязки к поставщику.

Установка Garage в Docker

Предварительные требования

Перед началом убедитесь, что у вас есть:

  • Установленный Docker на вашей системе
  • Базовое понимание работы с командной строкой
  • Как минимум 1 ГБ свободного дискового пространства для тестирования

Шаг 1: Создание структуры каталогов

Сначала создайте каталоги для хранения конфигурации и данных Garage:

mkdir -p ~/garage/{data,meta}

Шаг 2: Создание файла конфигурации

Создайте файл конфигурации ~/garage/garage.toml:

metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"

replication_mode = "none"

rpc_bind_addr = "[::]:3901"
rpc_public_addr = "127.0.0.1:3901"
rpc_secret = "1799bccfd7411eddcf9ebd316bc1f5287ad12a68094e1c6ac6abde7e6feae1ec"

[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.garage.localhost"

[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.garage.localhost"
index = "index.html"

[admin]
api_bind_addr = "[::]:3903"

Важно: Сгенерируйте собственный rpc_secret с помощью:

openssl rand -hex 32

Шаг 3: Запуск контейнера Garage

Запустите контейнер Garage следующей командой:

docker run -d \\
  --name garage \\
  -p 3900:3900 \\
  -p 3901:3901 \\
  -p 3902:3902 \\
  -p 3903:3903 \\
  -v ~/garage/garage.toml:/etc/garage.toml \\
  -v ~/garage/data:/var/lib/garage/data \\
  -v ~/garage/meta:/var/lib/garage/meta \\
  dxflrs/garage:v0.9.4 \\
  server

Шаг 4: Инициализация кластера

Проверьте идентификатор узла:

docker exec garage garage node id

Вывод покажет ваш идентификатор узла. Используйте его для настройки кластера:

docker exec garage garage layout assign -z dc1 -c 1G <NODE_ID>
docker exec garage garage layout show
docker exec garage garage layout apply --version 1

Шаг 5: Создание учетных данных доступа

Создайте пару ключей для доступа S3:

docker exec garage garage key create my-key

Сохраните показанные Access Key ID и Secret Access Key.

Шаг 6: Создание бакета

Создайте ваш первый бакет:

docker exec garage garage bucket create my-bucket

Предоставьте вашему ключу доступ к бакету:

docker exec garage garage bucket allow --read --write my-bucket --key my-key

Шаг 7: Тестирование настройки

Установите AWS CLI, если вы еще этого не сделали, затем настройте его:

aws configure set aws_access_key_id <YOUR_ACCESS_KEY>
aws configure set aws_secret_access_key <YOUR_SECRET_KEY>

Загрузите тестовый файл:

echo "Привет Garage!" > test.txt
aws s3 cp test.txt s3://my-bucket/ --endpoint-url http://localhost:3900

Просмотреть содержимое бакета:

aws s3 ls s3://my-bucket/ --endpoint-url http://localhost:3900

Конфигурация Docker Compose

Для более удобного управления можно использовать Docker Compose. Создайте файл docker-compose.yml:

version: '3.8'

services:
  garage:
    image: dxflrs/garage:v0.9.4
    container_name: garage
    command: server
    ports:
      - "3900:3900"
      - "3901:3901"
      - "3902:3902"
      - "3903:3903"
    volumes:
      - ./garage.toml:/etc/garage.toml
      - ./data:/var/lib/garage/data
      - ./meta:/var/lib/garage/meta
    restart: unless-stopped

Запустите сервис:

docker-compose up -d

Заключение

Garage предоставляет практичную, легкую альтернативу коммерческим решениям для объектного хранения. Развертывание на базе Docker упрощает тестирование и работу в различных средах. Независимо от того, строите ли вы домашнюю лабораторию, настраиваете хранилище для резервного копирования или экспериментируете с распределенными системами, Garage предлагает привлекательное сочетание простоты и возможностей.

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