Гид по технологиям

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

• 5 min read • DevOps • Обновлено 26 Nov 2025
Установка SeaweedFS на Ubuntu 20.04
Установка SeaweedFS на Ubuntu 20.04

Схема развертывания SeaweedFS — Master и Volume сервера

Что такое 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

В веб‑интерфейсе вы увидите загруженные объекты и метрики.

Когда 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, загрузкой файла и базовой проверкой работы.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро