Живая синхронизация данных и иные применения clsync (Андрей Савченко, OSSDEVCONF-2016)
Материал из 0x1.tv
Аннотация
- Докладчик
- Андрей Савченко
Живая синхронизация файлов между различными узлами является типичной задачей в кластерных системах.
Утилита clsync была разработана для решения этой задачи быстро, надёжно и безопасно. В первую очередь работа была ориентирована на системы высокой доступности, для которых требуется:
- высокая производительность (сравнима с производительностью локальной файловой системы)
- высокая доступность (отказ в обслуживании не более нескольких секунд)
- высокая надёжность
- универсальность
Видео
Слайды
Расширенные тезисы
Существуют разные подходы к репликации и синхронизации данных, в частности:
- единые сетевые файловые хранилища;
- блочная репликация;
- файловая репликация.
Сетевые файловые системы создают единую точку отказа, что в условиях не очень надёжной и перегруженной аппаратной инфраструктуры оказалось неприемлемым решением. Блочная репликация оказалась слишком медленной. Поэтому было использовано решение на основе 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
