Pull to refresh

Обзор программы синхронизации Syncthing + установка на Raspberry Pi и  Macbook

Decentralized networks
Sandbox
syncthing cloud bittorrentsync dropbox arudmin
В этой статье речь пойдет про Syncthing — новое открытое кроссплатформенное приложение, работающее по модели клиент-сервер и предназначенное для синхронизации файлов между участниками (P2P). Приложение написано на языке Go и по функциональности похоже на BitTorrent Sync.

После обзора нового сервиса мы с вами попробуем установить его на Raspberry Pi и синхронизировать с ноутбуком.

Обзор системы


Для синхронизации файлов между узлами в P2P-сети был написан простой, эффективный и безопасный протокол обмена блоками Block Exchange Protocol (BEP). Программа Syncthing реализует возможности данного протокола, хотя его можно использовать в любом программном обеспечении. Разработка идёт полностью открыто, весь исходный код публикуют на Github. Протокол тоже открыт, так что любые баги можно сразу обнаружить и исправить. Программа выпускается под Mac OS X, Windows, Linux, FreeBSD и Solaris, легко настраивается через удобный веб-интерфейс, работает в локальной сети или через интернет.

вот так выглядит интерфейс административной панели:


Готовые сборки доступны на Гитхабе под все основные платформы, также на сайте имеется документация (англ.) и руководство по быстрому запуску (англ.).

Возможности программы:
  • Открытый исходный код приложения и открытый протокол.
  • Каждый узел в сети идентифицируется по стойкому сертификату.
  • Поддержка синхронизации на уровне блоков. При маленьком изменении в большом файле будет синхронизироваться лишь изменившаяся часть.
  • Отсутствие искусственного лимитирования канала
  • Возможность явно указать, каким узлам будет доступна синхронизируемая директория.
  • Синхронизация директорий и файлов по дате последнего изменения (пока без поддержки версионности).
  • Опция «master-slave», благодаря которой другие узлы будут лишь синхронизироваться с данной директорией, но не смогут изменять её содержимое.
  • Управление через удобный адаптируемый веб-интерфейс.
  • Кроссплатформенность. Поддерживаются операционные системы Windows, Linux, Mac OS X, FreeBSD и Solaris. Существует неофициальный клиент для Android.
  • Безопасность и приватность. Данные хранятся на клиентских машинах, не требуется взаимодействие со сторонним сервером. Поддерживается TLS.


Установка и настройка


Теперь после краткого обзора перейдем непосредственно к установке и настройке приложения. Я буду использовать домашний макбук в качестве основного хоста с веб-интерфейсом, а клиент будет установлен на Raspberry PI model B.

На макбуке
Перейдем на страницу загрузки актуального релиза и скачаем необходимый архив, для Mac OS необходимо загрузить syncthing-darwin-amd64-v0.8.13.tar.gz

список поддерживаемых на данный момент платформ:


Распаковываем скачанный архив и в папке с программой запускаем файл syncthing.

Дожидаемся завершения программы и находим в консоли строку вида:
My ID: WFDJGOXZBKCC45BFO36JCTFM2EPIKSPXZACUZAUTXRYD2RJAELGS

Это — идентификатор системы, запомните его, он пригодится нам чуть поз днее. Теперь займемся клиентом.

На Raspberry Pi
Зайдем в консоль Raspberry Pi и скачаем пакет для этой платформы:

wget https://github.com/calmh/syncthing/releases/download/v0.8.13/syncthing-linux-armv5-v0.8.13.tar.gz


Теперь распакуем и запустим сервис
tar xvzf synct*
cd synct*
./syncthing


Необходимо подождать некоторое время, пока сгенерируется уникальный ключ-идентификатор и также запомнить (записать) его.
После этого нужно добавить первый сгенерированный на ноутбуке ключ в конфигурационный файл config.xml.
nano /home/pi/.config/syncthing/config.xml
и добавить ID «ноутбука» в ветку repository, а также новый узел:

<repository id=«default» directory="/home/pi/Sync" ro=«false»>
<node id=«raspberry-pi-ID»></node>
<node id=«ваш-ID-компьютера»></node>
</repository>

<node id=«ваш-ID-компьютера» name=«Имя хоста»> <address>dynamic</address>
</node>


У меня получилось вот так
<repository id=«default» directory="/home/pi/Sync" ro=«false» ignorePerms=«false»>
<node id=«EGOE6LPEVKJQ3EVYJNZJ2QC6NHTQA7L5SPCOGCSZ33DTLTTCM22D»></node>
<node id=«WFDJGOXZBKCC45BFO36JCTFM2EPIKSPXZACUZAUTXRYD2RJAELGS»></node>
<versioning></versioning>
</repository>
<node id=«EGOE6LPEVKJQ3EVYJNZJ2QC6NHTQA7L5SPCOGCSZ33DTLTTCM22D» name=«raspberrypi»>
<address>dynamic</address>
</node>
<node id=«WFDJGOXZBKCC45BFO36JCTFM2EPIKSPXZACUZAUTXRYD2RJAELGS» name=«macbook«>
<address>dynamic</address>
</node>


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

Настройка клиента на Raspberry Pi завершена, осталось заново запустить сервис командой

./syncthing &

Или же добавить его в автозагрузку в файле /etc/rc.local.

Проверка работы


Открываем в браузере ноутбука снова адрес http://127.0.0.1:8080 и в верхнем правом углу выбираем Edit→Add Node


В появившемся окне заполняем поля, указав полученный ранее ID Raspberry Pi, имя хоста. Поле Address оставляем “dynamic”.


Попробуем синхронизировать каталоги. По умолчанию создается папка синхронизации в ~/Sync/ на каждой ноде.
Кладем файл и через некоторое время он будет синхронизирован с остальными узлами.

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

Статистика



Нагрузка на Raspberry Pi

Из админки Syncthing:
RAM Utilization: ~ 10МБ
CPU Utilisation: ~ 1% в режиме покоя и до 60% в процессе синхронизации.

Вывод статистики подтребления памяти и процессора в момент синхронизации (htop)


Нагрузка Macbook Pro'13

Из админки Syncthing:
RAM Utilization: ~ 20МБ
CPU Utilisation: ~ 12 – 30 %

Скрин статистики из системной утилиты Activity Monitor


В процессе сбора статистики обнаружил, что если админка открыта в браузере, использование процессорного времени многократно возрастает (от 5 до 40%)

В то время как фоновый процесс (без админки) потребляет всего 2−4%


К примеру, Bittorrent Sync потребляет 5−9%. Данные, конечно, относительные и зависят от железа других факторов, но некоторые выводы сделать все же позволяют.
Основой вывод – не оставляйте без надобности админку открытой в браузере, даже в фоновой вкладке.


Заключение


Насколько это приложение удобнее и эффективнее того же Bittorrent Sync – к которому я уже привык – покажет время. Пост написан по «горячим следам» спустя всего пару часов после обнаружения информации о Syncthing.

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

Ссылки по теме
Проект на Гихабе: github.com/calmh/syncthing#
Актуальные версии программы для различных платформ: github.com/calmh/syncthing/releases/latest
image Документация: discourse.syncthing.net/category/documentation
image Форум поддержки: discourse.syncthing.net

Скрипт автозапуска для Raspberry Pi (Debian): gist.github.com/arudmin/5a13e9105814c3f568ec
Tags:
Hubs:
Total votes 27: ↑27 and ↓0 +27
Views 66K
Comments Comments 39