Установка SeaweedFS на Ubuntu 20.04

Что такое SeaweedFS
SeaweedFS — это открытая, простая и масштабируемая распределённая файловая система для хранения и быстрой отдачи миллиардов объектов. Коротко: она сочетает в себе мастер-сервер для метаданных и набор volume-серверов для данных. Простое определение: master управляет распределением томов и каталогом, volume хранит сами файлы.
Требования
- Сервер с установленной Ubuntu 20.04 LTS.
- Установлен пароль root или доступ по sudo.
- Доступ к интернету для загрузки исходников и зависимостей.
Подготовка системы
Обновите пакеты и установите необходимые зависимости:
apt-get update -y
apt-get install build-essential autoconf automake gdb git libffi-dev zlib1g-dev libssl-dev unzip -y
apt-get install golang -yПримечание: команда устанавливает golang из репозитория Ubuntu; для конкретной версии Go можно скачать официальный tarball с golang.org и распаковать в /usr/local.
Важно: убедитесь, что у вас хватает свободного места и корректно настроено время на сервере (NTP), особенно для кластеров с несколькими нодами.
Установка SeaweedFS из исходников
SeaweedFS обычно собирают из Git‑репозитория. Склонируйте репозиторий и соберите бинарник:
git clone https://github.com/chrislusf/seaweedfs.git
cd ~/seaweedfs
make installПосле сборки бинарник появится в ~/go/bin/ — скопируйте его в каталог доступный для исполнения в системе:
cp ~/go/bin/weed /usr/local/bin/
weed versionОжидаемый вывод подобен:
version 30GB 2.14 4211601e linux amd64Создание systemd‑сервиса для Master
Создайте файл сервиса для master‑процесса:
nano /etc/systemd/system/seaweedmaster.serviceВставьте:
[Unit]
Description=SeaweedFS Master
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/bin/weed master
WorkingDirectory=/usr/local/bin/
SyslogIdentifier=seaweedfs-master
[Install]
WantedBy=multi-user.targetСохраните, затем перезагрузите демоны systemd и запустите сервис:
systemctl daemon-reload
systemctl start seaweedmaster
systemctl enable seaweedmaster
systemctl status seaweedmasterВы увидите логи и статус процесса master, где будет указан адрес (по умолчанию 0.0.0.0:9333) и информация о лидере кластера.
Создание и запуск volume‑серверов
Создайте каталоги для томов, например /mnt/vol1 и /mnt/vol2:
mkdir /mnt/{vol1,vol2}Создайте systemd‑сервис для первого volume:
nano /etc/systemd/system/seaweedvolume1.serviceВставьте:
[Unit]
Description=SeaweedFS Volume
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/bin/weed volume -dir="/mnt/vol1" -max=10 -mserver="69.87.216.36:9333" -port=8081
WorkingDirectory=/usr/local/bin/
SyslogIdentifier=seaweedfs-volume
[Install]
WantedBy=multi-user.targetПерезагрузите systemd, запустите и включите сервис:
systemctl daemon-reload
systemctl start seaweedvolume1.service
systemctl enable seaweedvolume1.service
systemctl status seaweedvolume1Аналогично для volume2 создайте /etc/systemd/system/seaweedvolume2.service с другим портом и директорией:
[Unit]
Description=SeaweedFS Volume
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/bin/weed volume -dir="/mnt/vol2" -max=5 -mserver="69.87.216.36:9333" -port=8080
WorkingDirectory=/usr/local/bin/
SyslogIdentifier=seaweedfs-volume2
[Install]
WantedBy=multi-user.targetЗапустите:
systemctl daemon-reload
systemctl start seaweedvolume2.service
systemctl enable seaweedvolume2.service
systemctl status seaweedvolume2Логи покажут, что томы зарегистрировались в master и отправляют heartbeat.
Запись тестового файла в том
Чтобы получить FileID и URL volume‑сервера используйте API assign:
curl http://localhost:9333/dir/assignОтвет будет в формате JSON, например:
{"fid":"7,016bad1bc0","url":"69.87.216.36:8080","publicUrl":"69.87.216.36:8080","count":1}Затем загрузите файл на volume используя полученный fid:
curl -F file=@/root/file1.png http://69.87.216.36:8080/7,016bad1bc0Ответ содержит имя, размер и eTag:
{"name":"file1.png","size":74912,"eTag":"7a6511cbeda98ca00346544ca2968046"}Можно проверить расположение тома:
curl http://69.87.216.36:9333/dir/lookup?volumeId=7Пример ответа:
{"volumeId":"7","locations":[{"url":"69.87.216.36:8080","publicUrl":"69.87.216.36:8080"}]}Доступ к файлу
Откройте в браузере или через curl URL вида:
http://your-server-ip:8080/7,016bad1bc0

В веб‑интерфейсе вы увидите загруженные объекты и метрики.
Когда SeaweedFS не подходит
- Нужна согласованность уровня POSIX (блоковая файловая система) — SeaweedFS ориентирован на объектное хранение, не на POSIX.
- Необходимо шифрование «из коробки» для каждого объекта — требуется дополнительная обвязка или прокси.
- Малый кластер с единственным узлом, где простая файловая система решает задачу без распределённости.
Альтернативы и когда их выбрать
- Ceph — если нужен полный блок‑ и объектный стек с высокой отказоустойчивостью и интеграцией с CephFS/RBD.
- GlusterFS — для распределённого POSIX‑совместимого хранилища с простым масштабированием.
- HDFS — для аналитических рабочих нагрузок Hadoop‑класса.
Чеклист для развертывания (SOP)
Для администратора:
- Обновить систему и установить зависимости.
- Собрать и проверить бинарник weed.
- Создать systemd‑юниты для master и томов.
- Настроить отдельные дисковые устройства или LVM для /mnt/vol*.
- Настроить брандмауэр: открыть порты 9333 (master), 8080/8081 (volume) по необходимости.
- Настроить мониторинг и логирование (Prometheus, Grafana, syslog).
Для разработчика/интегратора:
- Проверить API assign и lookup.
- Реализовать механизм публичных URL или CDN для отдачи файлов.
- Продумать TTL и lifecycle объектов через возможности SeaweedFS.
Критерии приёмки
- Master и все volume‑сервисы запущены и в состоянии active (running).
- Успешный ответ от /dir/assign и /dir/lookup.
- Загруженный тестовый файл доступен по возвращённому адресу.
- Логи не содержат постоянных ошибок heartbeat или регистрации тома.
Тестовые сценарии и проверки
- Проверить отказ volume: остановить один volume и убедиться, что master корректно обрабатывает потерю тома.
- Проверить перезапуск: остановить master и поднять — убедиться, что кластера восстанавливается (в тестовом окружении).
- Нагрузочное тестирование: отправить параллельные загрузки малых и больших файлов и замерить задержки.
Рекомендации по безопасности
- Запускайте сервисы под выделенным непривилегированным пользователем, а не root, где это возможно.
- Ограничьте доступ по сети: экспонируйте порты только для доверенных подсетей или через VPN.
- Используйте TLS для публичных endpoint‑ов (reverse proxy типа Nginx/Traefik), поскольку native HTTP у SeaweedFS по умолчанию не шифрует трафик.
- Регулярно бэкапьте метаданные master (если используете raft, планируйте резервную стратегию для данных).
Короткий словарь терминов
- Master — узел, управляющий метаданными и распределением томов.
- Volume — узел/каталог, хранящий данные (объекты).
- Fid — идентификатор объекта (file id).
- Assign — API для получения fid и url volume.
Резюме
SeaweedFS — лёгкое и быстрое объектное хранилище, которое удобно собирать и интегрировать на серверах Ubuntu. Оно хорошо подходит для хранения большого количества мелких и средних файлов с низкой латентностью. Для продакшена дополнительно потребуется продумать безопасность, мониторинг, резервирование и отказоустойчивость.
Если необходимо, могу подготовить systemd‑юниты под пользователя nonroot, пример конфигурации для HTTPS (NGINX / Traefik) или скрипт автоматической установки с Ansible.
Краткое резюме в 1 строке: быстрое развёртывание SeaweedFS на Ubuntu 20.04 с systemd, загрузкой файла и базовой проверкой работы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента