Введение
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 предлагает привлекательное сочетание простоты и возможностей.
Для продакшн-развертываний рассмотрите возможность запуска нескольких узлов для избыточности и ознакомьтесь с официальной документацией для расширенных параметров конфигурации.