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

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
Метки:
Поделиться публикацией
Похожие публикации
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 39
  • +1
    1) Сабж не использует дисковое пространство незнакомых друг другу нод для хранения общака? Чтобы получить дисковое пространство в сабже, нужно самому запустить две ноды?

    2) Сабж, тем не менее, использует незнакомые ноды для децентрализованного поиска нужных нод? Какой расход по трафику?
    • 0
      Syncthing не использует сторонние ноды для передачи данных, связь происходит напрямую.

      Дисковое пространство ограничено только ресурсами нод. Сервис – децентрализованный – ближе по технологии к Bittorrent Sync, а не к Dropbox. Ключевые особенности я постарался перечислить в посте.

      Для поиска нод и их связи между собой используется центральный узел, который указывается в конфигурационном файле.
      Параметр globalAnnounceServer по умолчанию настроен на сервер announce.syncthing.net:22025, но ведь исходный код открыт и вам никто не запрещает развернуть свой собственный узел синхронизации.

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

      • 0
        Хм, тогда что в сабже децентрализованного? Получается, это просто удобный open-source, self-hosted софт, но совершенно централизованный? Причем из коробки он цетрализован на чьем-то частном сервере?
        • 0
          Центральный сервер необходим только для поиска нод и их связи с адресами машин. Он ни каким образом не участвует в передаче данных.

          Как я уже писал ниже в комментариях, вы можете поднять свой собственный глобальный сервер и использовать его для своих нужд.

          Либо вы можете указать в конфигурационном файле айпи адрес удаленной ноды, открыть на ней необходимые порты и программа будет обращаться к ней напрямую, минуя глобальный пиринговый сервер.
          • 0
            Первое предложение правильнее звучит так:
            Центральный сервер необходим только для поиска идентификаторов нод и их связи с айпи адресами.
    • –4
      Давно пользуюсь rsync. Синхронизирую рабочий компьютер, домашний, raspberry pi и рабочий сервер с его помощью. Не вижу преимуществ у предложенного решения.
      • 0
        Rsync работает с одним соединением, а это торрент со всеми радостями балансировки нагрузки.
        • –1
          Так это торрент или программа синхронизации? )
          Понимаю, если речь идет о группе пользователей, rsync не очень удобен.
          • 0
            Это гибрид. Вы с проектом BTSync не знакомы? Классическое применение у меня: я кидаю новые фотографии в каталог на десктопе. Автоматом изменения заливаются на мой сервер домашний, сервер отца и десктопе деда. Меня это спасло, когда я сжег случайно винт с данными. BTSync поддерживает примитивное версионирование, кстати.
            • 0
              Не знаком. У меня аналогично, что то меняю на рабочем компьютере, автоматически применяется к домашнему. Что то закидываю в папку android, автоматически появляется на планшете.
              • 0
                С торрентами первичная настройка в разы проще, чем скрипты переписывать. Особенно, если динамические ip и NAT с другими граблями.
            • 0
              Плюс пробивается NAT, используется ретрекер, находятся пиры по DHT. AES-256 из коробки.
        • 0
          Спасибо, попробую, а то что-то btsync не справляется с синхронизацией, когда в папке часто происходят изменения. И бывает что файлы залипают и не синхронизируются сколько не жди.
          • +1
            Спасибо, давно ждал открытых аналогов. Файлы не портит? Какие основные грабли?
            • 0
              Присоединяюсь к вопросу: не портятся ли файлы при синхронизации на блочном уровне? Интересует синхронизация pst файла объемом 2-3ГБ.
            • 0
              Насколько сильно кушает ресурсы? BTSync на слабеньком NAS'е и на тачке с FreeBSD создает немалую нагрузку.
              • 0
                добавил информацию о нагрузке и потреблении ресурсов в конце поста
              • 0
                Правильно ли я понял, что обе ноды в описываемой инсталляции находились в пределах одной сети(локалка)?
                А как насчет ситуации, когда одна или обе ноды будут находиться на NAT-ом?
                • 0
                  у меня заработало только когда я прописал IP вместо dynamic и пробросил порты
                  • 0
                    О. Тогда печаль. BTSync обходит такое за счёт своего стандартного трекера. А серверную часть в виде трекера здесь поднять можно?
                • 0
                  В пределах локальной сети каждая нода имеет свой открытый порт для оповещений.

                  В случае, когда ноды находятся за NAT, используется внешний сервер для связи нод.

                  Эти параметры указываются в конфигурационном файле и могут быть изменены при желании.
                • +1
                  Присмотреться стоит, без сомнения… но как написано на сайте проекта — протокол еще не устоялся и до версии 1.0 возможны кардинальные изменения… так что ИМХО, поиграться можно, но надо ждать релиза…
                  А насчет проблем с сихронизацией часто изменяющихся файлов и большого количества мелких файлов в Btsync — лично я поставил в крон перезапуск сервиса раз в час, это дает пинок Btsync — у для принудительной сихронизации.

                  А также возможно разработчики Btsync таки откроют исходники на фоне появления конкурента с открытыми исходниками.
                  • 0
                    Проскакивала у них такая идея вроде. Тут сложность конкуренции вообще. Я не понимаю стратегию монетизации. Единственный вариант, который я вижу — аренда места у них на серверах под синхронизацию. По сути тот же Dropbox, но с более широкими возможностями работы из-за распределенности.
                    • 0
                      Одно из двух — или у разработчиков Btsync хитрый план по монетизации и они просто создали некое сообщество, которое помогло отработать технологию и проверить на самые очевидные баги, либо им все это фиолетово и цель не в монетизации… но тогда конкурент с открытыми исходниками при условии активной разработки и багрепортинге более предпочтителен нежели вроде рабочий Btsync, но мутный в плане того, кто смотрит мои файлы например.ИМХО опять же.
                      • 0
                        В теории btsync можно использовать без их ретрекера. Но с пирами будет труднее. Останутся прямые адреса и DHT. Открытый продукт в целом предпочтительнее.
                        • 0
                          И не только в теории — но мне удалось запустить Btsync без ретрекера только в пределах локальной сети — или если есть два сервера со статическими IP и проброшенными портами через NAT, а также прописанными хостами.
                          Как вариант — подконтрольный выделенный сервер с белым IP где то в интернете как собственный ретрекер. Но учитывая объем сихронизируемых данных — влетит в копеечку.
                          • 0
                            Все относительно. МТС предоставляет мне белый IP с каналом 50/100 мегабит (день/ночь) за 700 рублей в сутки. Дома 24/7 работает сервер на Debian с виртуальными машинами. Мне совсем не трудно использовать его подобным образом. Вы, кстати, про DHT забыли. Есть ненулевые шансы, что он с помощью темной магии найдет пиров через него вне сети (естественно не за NAT)
                            • 0
                              700 рублей/сутки умножить на 30 дней = 21000 рублей… к сожалению мне жаба не подпишет… да и альтернатив Ростелекому в месте моего проживания нет.
                              Статический IP есть конечно — но опять же все упирается в объемы синхронизации…
                              А насчет темной магии — у меня не сработало, как ни старался…
                              • 0
                                Стоп. Фигня получилась. В месяц, конечно.
                  • –6
                    не по теме конечно, но скрині макОС стали… ну не знаю.
                    • +1
                      Просьба по теме к автору поста — проверьте пожалуйста, есть ли какая то возможность сихронизировать папки в пределах одной ноды — к примеру на разных разделах или винчестерах. Ситуация использования — бэкап данных на подключаемый USB винчестер например.Про использование rsync — да, сейчас им и пользуюсь…
                      В Btsync я такой возможности без особых извратов не нашел.
                      • 0
                        BTSync ноду считает неделимой сущностью. Это да. Я, кстати, так и не понял в чем суть ограничения. Чтобы самопересечений и вложенных синхронизаций избежать? Типа каталога, который синхронизируется, а он сам часть более крупной синхронизации.
                        • 0
                          Ага Ага.Единственное что придумалось — запустил две ноды Btsync на разных портах одного сервера — но это двойная нагрузка, непонятные глюки с синхронизацией, иногда непредсказуемая загрузка под 100% CPU.
                        • 0
                          К сожалению, не нашел варианта решения вашей задачи с помощью Syncthing. Полагаю, автор не предусматривал такое использование программы.

                          Подобную тему уже освещали на Хабре, используя уилиту rsnapshot для Linux систем. Попробуйте ее или просмотрите комментарии, чтобы найти подходящее для вас решение: habrahabr.ru/post/136595/

                          Для Windows можно использовать HandyBackup: www.handybackup.ru/
                        • 0
                          Скрипт автозапуска для малинки: gist.github.com/arudmin/5a13e9105814c3f568ec

                          Создайте файл в папке /etc/init.d и сделайте его исполняемым. Сама программа должна быть в папке /usr/local/bin, но это можно изменить в скрипте.
                          • 0
                            Все круто, но как делать так чтобы без лишних действий перезаписывались файлы в случае если одна из папок в режиме мастер?
                            А то приходится нажимать кнопку для перезаписи, т.е. постоянно отслеживать состояние.

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.