Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016)

Материал из 0x1.tv

Аннотация

Докладчик
Андрей Савченко.jpg
Андрей Савченко

Живая синхронизация файлов между различными узлами является типичной задачей в кластерных системах.

Утилита clsync была разработана для решения этой задачи быстро, надёжно и безопасно. В первую очередь работа была ориентирована на системы высокой доступности, для которых требуется:

  • высокая производительность (сравнима с производительностью локальной файловой системы)
  • высокая доступность (отказ в обслуживании не более нескольких секунд)
  • высокая надёжность
  • универсальность

Видео

on youtube

Слайды

Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016).pdf
Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016)!.jpg

Расширенные тезисы

Существуют разные подходы к репликации и синхронизации данных, в частности:

  • единые сетевые файловые хранилища;
  • блочная репликация;
  • файловая репликация.

Сетевые файловые системы создают единую точку отказа, что в условиях не очень надёжной и перегруженной аппаратной инфраструктуры оказалось неприемлемым решением. Блочная репликация оказалась слишком медленной. Поэтому было использовано решение на основе lsyncd, осуществляющего синхронизацию контейнеров между узлами кластера и их резервное копирование. Однако lsyncd оказался слишком требовательным к CPU (существенная часть кода написана на Lua), непригодным к тонкой настройке и недостаточно надёжным. Поэтому было разработано собственное решение — clsync, где мы постарались учесть недостатки lsyncd и оптимизировать решение для наших задач.

По сути, clsync является демоном мониторинга изменений файловой системы по гибким regexp-подобным правилам и выполнения произвольных действий при наступлении любых отслеживаемых событий. Однако приложение весьма гибко и может быть использовано и в режиме работы обычного приложения для выполнения одноразовых операций, например, разовой синхронизации часто меняющихся данных с рекурсивной досинхронизацией изменений, возникших во время предыдущей синхронизации, что оказалось чрезвычайно полезным для задач web-хостинга.

Clsync написан на языке C стандарта C99, поддерживает различные механизмы уведомления о событиях файловой системы как на Linux, так и на BSD. Для Linux механизмом нотификации по умолчанию является inotify, для FreeBSD — kqueue. В качестве бэкенда для синхронизации может использоваться любое приложение, скрипт или связываемая библиотека, но чаще всего применяется rsync.

Для обеспечения безопасности предусматриваются опциональные механизмы защиты (некоторые из которых могут ухудшить производительность):

  • использование unshare для изоляции пространств имён;
  • использование capabilities и сброс ненужных привилегий;
  • запрет выхода за пределы наблюдаемой директории при помощи pivot_root, chroot и unmount;
  • использование seccomp-фильтрации;
  • разделение процесса на привилегированную и непривилегированную части.

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

Примечания и отзывы


Plays:130   Comments:0